Git swapped beim Packen ...
Von Zeit zu Zeit lohnt es sich Git-Repositories neu zu packen oder den Müll weg zu bringen (mittels "garbage collection, der Befehl ist
Auch beim Auschecken oder Klonen von grossen Repositories packt Git neu.
Da ich mit den Standard-Einstellungen regelmässig ware Swap-Orgien erlebt habe, lohnt es sich, die Ressourcen für Git zu begrenzen.
In der Standard-Einstellung benutzt Git pro Core und Hyper-Threading je einen Thread. Da Hyperthreading keinen "echten Prozessor" zur Basis hat, steht aufgrund vieler Kontextwechsel das System nahezu still. Ein System mit zwei Kernen und Hyperthreading wird von Git mit vier Threads konfiguriert und jedem Thread steht im Standard der komplette Arbeitsspeicher zur Verfügung.
Das ist ein bisschen viel. Und die folgenden Konfigurationsoptionen begrenzen das ein wenig.
Die genaue Beschreibung der einzelnen Optionen lassen sich auf der git-config-Manpage nachlesen.
Das Repack-Skript auf der oben verlinkten Webseite hat sich damit natürlich auch verändert.
Dieses Skript ist Teil meines littlehelpers-Repositories auf GitHub.
git gc
).Auch beim Auschecken oder Klonen von grossen Repositories packt Git neu.
Da ich mit den Standard-Einstellungen regelmässig ware Swap-Orgien erlebt habe, lohnt es sich, die Ressourcen für Git zu begrenzen.
In der Standard-Einstellung benutzt Git pro Core und Hyper-Threading je einen Thread. Da Hyperthreading keinen "echten Prozessor" zur Basis hat, steht aufgrund vieler Kontextwechsel das System nahezu still. Ein System mit zwei Kernen und Hyperthreading wird von Git mit vier Threads konfiguriert und jedem Thread steht im Standard der komplette Arbeitsspeicher zur Verfügung.
Das ist ein bisschen viel. Und die folgenden Konfigurationsoptionen begrenzen das ein wenig.
git config --global pack.threads 2
git config --global pack.windowMemory 1073741824
git config --global pack.depth 250
git config --global pack.window 250
git config --global pack.windowMemory 1073741824
git config --global pack.depth 250
git config --global pack.window 250
Die genaue Beschreibung der einzelnen Optionen lassen sich auf der git-config-Manpage nachlesen.
Das Repack-Skript auf der oben verlinkten Webseite hat sich damit natürlich auch verändert.
#!/bin/bash
case $(uname) in
"Linux")
renice -n 19 -p $$
ionice -c 2 -n 7 -p $$
;;
"SunOS")
renice -n 19 -p $$
;;
esac
start_directory=$PWD
for i in $(find ${start_directory} -name '.git' -type d); do
du -hs ${i}/..
cd ${i}/..
git gc
git repack -a -d
du -hs ${i}/..
echo
done
case $(uname) in
"Linux")
renice -n 19 -p $$
ionice -c 2 -n 7 -p $$
;;
"SunOS")
renice -n 19 -p $$
;;
esac
start_directory=$PWD
for i in $(find ${start_directory} -name '.git' -type d); do
du -hs ${i}/..
cd ${i}/..
git gc
git repack -a -d
du -hs ${i}/..
echo
done
Dieses Skript ist Teil meines littlehelpers-Repositories auf GitHub.
Kommentare
Ansicht der Kommentare: Linear | Verschachtelt