22 listopada 2011

Jak przyśpieszyć git'a?

Na pewno sposobów jest wiele, jednak jednym z nich jest regularne odpalanie git gc (garbage collector).

Pamięć jednak jest zawodna, dlatego najlepszym pomysłem jest zautomatyzowanie procesu i ustawienie cyklicznego wywoływania procesu.

Do tego wystarczy pojedynczy wiersz w cronie. Jednakże jeżeli na co dzień uzywamy wielu repozytoriów, tych wpisów musiałoby być w cronie więcej.

By zachować w nim porządek chciałbym zaproponować inne podejście:

Tworzymy sobie plik ~/.gitrepos, do którego wpisujemy ścieżki projektów, które chcemy "utrzymać w czystości"


/media/truecrypt1/workspace/current/project_A/
/media/truecrypt1/workspace/current/project_B/
/media/truecrypt1/workspace/old/project_C/
/media/truecrypt1/workspace/another/project_D/

Potem już tylko crontab -e i wklejamy:

30 2 * * * cat ~/.gitrepos | xargs -I {} git --work-tree={} --git-dir={}.git gc

Taki wpis, codziennie w nocy o 2:30 będzie odpalał git gc dla każdego repozytorium z zapisanych katalogów. Użycie --work-tree oraz --git-dir jest konieczne, dlatego że domyślnie polecenie z crona jest odpalane w katalogu domowym.

PS. jeżeli nie lubisz/nie chcesz używać crona  w tradycyjny/trudniejszy sposób, zainstaluj sobie nakładkę graficzną gnome-schedule (sudo apt-get install gnome-schedule)
Related Posts Plugin for WordPress, Blogger...

2 komentarze:

  1. O, używasz truecrypta;-) Z ciekawosci zapytam: jak duze masz repo, ze git Ci przymula? (Mam na myśli branch, label, file, disk size). Fajna 'sztuczka' ;-)

    OdpowiedzUsuń
  2. @Pawel:

    NDA nie pozwala mi napisać o wszystkich szczegółach, jednak jest to kilkaset MB, kilkadziesiąt tys. plików, kilka tys. branchy ;)

    OdpowiedzUsuń