Es ist ein bekanntes Problem in TortoiseGit. Es existiert seit Jahren und wird anscheinend nie repariert. Ich weiß nicht, ob es daran liegt, dass der TortoiseGit-Entwickler nicht bereit oder nicht in der Lage ist, dies zu tun. (Ich habe es auch schon einmal gemeldet, kann das Problem aber jetzt nicht mehr finden.)
Wie auch immer, ich tue Folgendes, um das Problem zu beheben:
git gc --prune=all --quiet
Es beschneidet das Git-Repository, packt alle diese Einzelobjektdateien neu, reduziert die Anzahl der Dateien .git
von bis zu Zehntausenden auf unter 20 und verbessert wahrscheinlich die Gesamtleistung von Git-Operationen.
Manchmal macht Git nach einem Commit eine leichte Version davon alleine, aber ich habe dies in Jahren des täglichen Gebrauchs selten gesehen. Also mache ich es einfach selbst. Dies ist auch eine gute Maßnahme, die Sie in Betracht ziehen sollten, bevor Sie ein Backup des Systems erstellen (siehe unten).
Zur Vereinfachung habe ich eine Batchdatei git-gcall.cmd
in einem zugänglichen Pfad erstellt, der den oben gezeigten Befehl aufruft. Ich muss es nach praktisch jedem Commit ausführen und nach 2-3 Sekunden aktualisieren sich die Symbole von selbst. Kein Mord beteiligt. Wachen Sie TortoiseGit nur etwas schwieriger auf, um das Repository tatsächlich zu beobachten und seinen Status zu aktualisieren.
Hier ist ein PowerShell-Skript, das diesen Befehl in einer Reihe konfigurierter Verzeichnisse rekursiv ausführt, falls erforderlich, um ihn vor dem Erstellen einer Sicherung zu verwenden. Es kann auch regelmäßig ausgeführt werden, beispielsweise über Nacht, um dieses Problem mit veralteten Symbolen im Hintergrund zu beheben.
gc-all-git.ps1:
Write-Host "Packing Git repositories where necessary..."
function Git-Gc($path)
{
cd $path
Get-ChildItem . -Recurse -Hidden .git | Foreach-Object {
cd $_.FullName
if ((Get-ChildItem objects -File -Recurse).Count -gt 50)
{
cd ../
Write-Host $(Get-Location).Path
git gc --prune=all --quiet
}
}
}
Git-Gc C:\Source
Git-Gc C:\xampp\htdocs
Nennen Sie es mit der üblichen erforderlichen Batch-Datei:
gc-all-git.cmd:
@echo off
cd /d "%~dp0"
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy unrestricted -File gc-all-git.ps1
exit /b %errorlevel%