Mam repozytorium testów, które umieszczam pod Git. Większość plików jest dość malutka, ale jest ich bardzo dużo i po prostu operacje Git, takie jak dodawanie i status, trwają dziesiątki minut. Jakie są moje możliwości poddania ich kontroli wersji i uzyskaniu rozsądnej wydajności? Czy powinienem spróbować użyć submodułów, czy też powinienem omijać DVCSes?Powolne operacje Git
Odpowiedz
Operacje Git, takie jak add
i status
, wymagają stat
każdego pliku w systemie plików (aby wykryć zmiany). Masz naprawdę ogromną liczbę plików (powiedzmy dziesiątki lub setki tysięcy plików) lub masz system plików, który ma dość powolną operację stat
.
W każdym razie, jeśli potrzebujesz pracować w systemie, w którym jest to bardzo powolne, możesz użyć w indeksie "załóż niezmieniony" bit, który mówi Git, aby nie przejmował się tym plikiem. Jeśli to zrobisz, musisz ręcznie polecić git, aby wykryć zmiany w poszczególnych plikach, np. przekazując je bezpośrednio do git add
, w przeciwnym razie Git nawet nie będzie wiedział, że coś się zmieniło. Możesz to włączyć, ustawiając git config core.ignoreStat true
, a następnie uruchamiając coś takiego jak git reset --hard HEAD
.
Bingo! Nie liczyłem ich, ponieważ obawiam się, ale nie zdziwiłbym się odkryciem, że są to setki tysięcy, a nawet miliony plików, prawie wszystkie generowane przez ludzi. Próbowałem ustawić tę flagę i pomógł nieco w niektórych operacjach, ale wciąż zbyt wolno. Może powinienem stworzyć mnóstwo małych repozytoriów. – dromodel
Zastanawiam się, jaka jest tutaj liczba "bardzo duża". Zwykle nie jest to ilość małych plików, które git uważa za kłopotliwe, ale duże pliki binarne. Mogę sobie jednak wyobrazić, że jeśli ilość jest wystarczająco duża, trzeba by je podzielić na kilka repozytoriów - za pomocą podmodułów lub w inny sposób. Jeśli muszą znajdować się w jednym repo, może się okazać, że Subversion jest bardziej wydajny.
EDYCJA: ok, więc dodałeś jako komentarz, że używasz zestawu NFS, który brzmi jak możliwe wąskie gardło tutaj. Proszę sprawdzić rozwiązania na ten temat w this thread. Szczególnie core.preloadindex może być tutaj interesujący.
core.preloadindex
Włącz równoległego napięcia wstępnego indeksu dla operacji takich jak git diff
To może przyspieszyć operacje jak git diff i git status szczególnie na systemach plików takie jak NFS, które mają słabą semantykę buforowania, a co za tym idzie, stosunkowo duże opóźnienia IO. Przy tym ustawieniu true, git będzie porównywać indeksy danych z systemu plików równolegle, pozwalając na nakładanie się IO.
EDIT2: w komentarzach wspomniano o 6 milionach plików. Mogę zrozumieć, że staje się to wąskim gardłem - to naprawdę bardzo duża ilość.
Wątpię, czy SVN jest bardziej wydajny niż git - a nawet jeśli jest, git jest znacznie lepszy (według Linusa Torvaldsa jesteś brzydki i głupi, gdy nie używasz Git: p) – ThiefMaster
Cóż, nie musisz brać tylko mojej słowo na to - nawet Linus [zgadza się] (http://stackoverflow.com/questions/984707/what-are-the-git-limits), że w niektórych przypadkach jest to sytuacja. Git działa na repo jako całości, więc nie jest najlepszą opcją w niektórych scenariuszach. – eis
Istnieje kilka plików binarnych. Liczba plików jest znacznie większa niż liczba, jaką można znaleźć w dowolnym projekcie z otwartym kodem źródłowym. – dromodel
- 1. Jakie operacje są operacje atomowe
- 2. Operacje Git czasami zawieszają się w Jenkins na Windows
- 3. operacje sieciowe Git za firmowym firewallem wykorzystaniem LibGit2Sharp rzuca
- 4. Czy możliwe są równoczesne operacje z repozytoriami Git?
- 5. Git - pchanie zdalnego oddziału do dużego projektu jest bardzo powolne
- 6. Operacje wiersza w oktawie
- 7. python - operacje na listach
- 8. Operacje PHP PDO?
- 9. operacje schowka w Delphi
- 10. Jakie operacje unieważnią więzy?
- 11. Operacje atomowe w C++
- 12. SQL: Ternary operacje
- 13. qemu operacje pamięciowe
- 14. Bitowe operacje w OCaml
- 15. arytmetyczne operacje wewnątrz szablony
- 16. operacje LINQ na IDictionary
- 17. Operacje transakcyjne Meteor
- 18. Powolne działanie Regexa
- 19. powolne szyny stos
- 20. Powolne czasy rozruchu logback
- 21. HTMLUnit: bardzo powolne wykonywanie?
- 22. Powolne działanie SQL
- 23. Powolne Light.exe - wydanie AV
- 24. Powolne uruchamianie z Ionic
- 25. Powolne formatowania RichTextBox
- 26. Debugowanie czasami bardzo powolne
- 27. PHP powolne z mysqli
- 28. Uruchamianie hibernacji bardzo powolne
- 29. django jest bardzo powolne.
- 30. Powolne ładowanie układu
Na jakim systemie plików pracujesz? – Useless
Git jest znany z tego, że potrafi szybko obsłużyć duże projekty. Czy używasz powolnego systemu plików? –
Uchwyt jest nad systemem NFS, chociaż jego głowa jest bardzo wysokiej klasy. – dromodel