2013-06-01 24 views
12

Pracuję nad projektem, w którym systemem kontroli wersji jest SVN i chcę używać git. Zrobiłem klona svn git ale git status działa strasznie wolno (około 8 minut). Repozytorium ma około 63000 plików, a większość z nich to biblioteki ignorowane przez git. Czy to normalne? Zrobiłem git prune && git gc, aby wykonać czyszczenie nieosiągalnych obiektów i zbieranie śmieci. Zrobiłem też git repack -Adf, ale to jeszcze pogorszyło sytuację. Trwa to nawet dłużej (ponad 20 minut).Status git trwa zbyt długo

Co robię źle? Jest to projekt studyjny i zakładam, że plik .gitignore nie zawiera właściwych rzeczy. Czy można dokładnie ustalić, które pliki są generowane z wizualnej wersji studyjnej i które muszą być wersjonowane?

Jeśli plik .gitignore nie jest problemem, w jaki sposób mogę uczynić mój git status szybszym, czy to normalne, że projekt z 65 000 plików (około 10 GB) działa tak wolno z git?

+1

Odkryłem również, że git działa wolno w niektórych środowiskach Windows. Czy obejrzałeś http://stackoverflow.com/questions/4485059/git-bash-is-extremely-slow-in-windows-7-x64?lq=1 i http://stackoverflow.com/questions/2835775/ msysgit-bash-is-horrendously-slow-in-windows-7? lq = 1? –

+0

Co wyświetla komunikat "git status" po zakończeniu? –

+0

@me_i wyświetla zwykły komunikat "nic do zatwierdzenia", trwa to zbyt długo –

Odpowiedz

5

Dla repozytorium tego rozmiaru, git status i powiązane z nim polecenia mogą być bardzo wolne. Git działa znacznie lepiej, gdy projekty są rozdzielane i rozdzielane, podczas gdy Subversion ma tendencję do zachęcania do korzystania z pojedynczych repozytoriów behemoth zawierających wiele projektów, więc ten rodzaj problemu nie jest niczym niezwykłym podczas korzystania z Git-SVN.

Niemniej jednak, są tam kilka różnych rozwiązań, których można użyć, aby przyspieszyć:

  • Jeśli nie już, upgrade do korzystania z dysku SSD zamiast dysku magnetycznego. Ta pojedyncza zmiana znacznie zmieniła szybkość Gita, gdy pracowałem nad podobnym repozytorium.

  • Zobacz sekcję Konfiguracja git help svn. To opisuje konfigurowanie Git-SVN do używania podfolderów ścieżek w repozytorium Subversion (np. trunk/project-a, branches/*/project-a, tags/*/project-a, ...) zamiast całego repozytorium. Jeśli ma to sens w przypadku Twojego repozytorium, będzie to oznaczać, że możesz mieć znacznie mniejsze płatności i znacznie szybsze serie z git status.

  • Sprawdź sekcję Rzadkie Zamówienie git help read-tree. To pomoże ci skonfigurować Git, aby użyć rzadkiej kopii roboczej, podobnej do skróconej realizacji Subversion. Ponownie oznacza to, że będzie mniej plików śledzących Git w kopii roboczej, a zatem sprawdzenie wszystkich będzie znów szybsze.

  • Należy rozważyć ustawienie flagi "Załóż niezmienioną" na dużych częściach kopii roboczej. Dzięki temu Git nie będzie zawracał sobie głowy sprawdzaniem, czy pliki się zmieniły. Są dwa sposoby, aby to zrobić:

    1. Aby ustawić flagę dla konkretnych folderów, uruchomić coś jak następuje:

      find <folder-name>... -type f -exec git update-index --assume-unchanged {} + 
      
    2. Aby ustawić flagę dla całego repozytorium (uwaga ta straci uncommitted zmiany):

      git config core.ignorestat true 
      git reset --hard HEAD 
      

    przyjrzeć się opcji w 01 i config.ignoreStat w sekcji git help config, aby uzyskać więcej informacji na temat ich działania.

    Korzystanie z nich będzie oznaczać, trzeba podać ścieżkę do polecenia jak git diff i git add jawnie, to znaczy poleceń jak gołej git diff, git commit -a & c nie będzie działać.

  • Zmień system operacyjny i/lub system plików. Zgodnie ze stronami podręcznika Git (takimi samymi, jak w poprzednim punkcie), system Windows 'lstat jest powolny, podobnie jak system plików CIFS. Podejrzewam, że ideał jest podobny do ext3 lub ext4 w Linuksie lub jakimś innym * nix.

Powiązane problemy