2013-07-29 3 views
14

W ciągu ostatnich kilku dni każde pchnięcie do naszego repozytorium git spowodowało automatyczne pakowanie na serwerze.Dlaczego git uruchamia automatyczne pakowanie po każdym naciśnięciu przycisku na naszym repo?

Wyjście na kliencie, gdy tak się dzieje:

~pdr git:master ❯❯❯ git push origin master 
Counting objects: 44, done. 
Delta compression using up to 8 threads. 
Compressing objects: 100% (26/26), done. 
Writing objects: 100% (27/27), 4.67 KiB, done. 
Total 27 (delta 14), reused 0 (delta 0) 
Auto packing the repository for optimum performance. 

Opakowanie dzieje się na serwerze, a ps pokazuje te polecenia git pracy:

git  23252 0.0 0.0 68520 552 ?  S 15:21 0:00 sshd: [email protected] 
git  23253 0.0 0.0 9660 540 ?  Ss 15:21 0:00 git shell -c git-receive-pack 'repositories/pdr.git' 
git  23254 0.0 0.0 16644 2136 ?  S 15:21 0:00 git receive-pack repositories/pdr.git 
git  23258 0.0 0.0 9660 624 ?  S 15:21 0:00 git gc --auto --quiet 
git  23261 0.0 0.0 9660 504 ?  S 15:21 0:00 git repack -d -l -q -A 
git  23262 0.0 0.0 4104 376 ?  S 15:21 0:00 /bin/sh /usr/lib/git-core/git-repack -d -l -q -A 
git  23275 267 92.2 9569724 3742468 ?  Sl 15:21 23:07 git pack-objects --keep-true-parents --honor-pack-keep --non-empty --all --reflog --unpack-unreachable --local -q --delta-base-offset /home/git/repositories/pdr.git/objects/.tmp-23262-pack 

mam uruchomić ręczne „git gc ", po którym następuje" git fsck "na serwerze. Brak komunikatów o błędach, ale po następnym uruchomieniu ponownie rozpoczęto automatyczne pakowanie.

To jest na serwerze z systemem Ubuntu Server 10.04 LTS z Git 1.7.0.4.

+2

I recon pytanie to: "Dlaczego?" – drvdijk

+1

możliwy duplikat [co oznacza "Automatyczne pakowanie repozytorium dla optymalnej średniej wydajności"?] (Http://stackoverflow.com/questions/8633981/what-does-auto-packing-the-pository-for-optimum-performance- mean) – drvdijk

+0

Sprawdź http://stackoverflow.com/questions/7392155/why-does-git-run-git-gc-auto-on-every-merge. W rzeczywistości może to być jego duplikat. – patrickvacek

Odpowiedz

24

Git decyduje, czy auto GC based on two criteria:

  1. są zbyt wiele kaczki? (Dosłownie, czy istnieje more than 50 files z .idx w .git/objects/pack?)
  2. Czy jest zbyt dużo luźnych obiektów? (Dosłownie, istnieją more than 27 files in .git/objects/17?)

Jeśli z jakiegoś powodu nie jest w stanie Git scalić pliki pakietu lub usunąć luźne przedmioty w tym katalogu, to myślę, że musi ponownie auto-GC następnym razem.

Sprawdziłbym zawartość dwóch wymienionych powyżej katalogów, aby sprawdzić, czy kryteria (domyślne) zostały spełnione i sprawdzić, czy kryteria zmieniają się po przepakowaniu.

Niektóre przyczyny awarii zakończenia procesu może być:

  • jakieś uprawnienia problemu
  • nieosiągalne cele, które są ignorowane przez zbierania śmieci Git czy nie przycina domyślnie ze względu na ich młodości
  • niewystarczająca ilość miejsca na dysku do uzupełnienia niewystarczającej ilości pamięci gc (przepakowanie) w celu uzupełnienia obiektów gc (przepakowywanie) o zbyt duże rozmiary, aby zmieściły się w określonym pakiecie s ize (patrz git config pack.packSizeLimit która domyślnie nieograniczona, ale może być przesłonięta przez użytkownika)

Należy również upewnić się, oczywiście, że GC związanych parametrów przestrajalnych nie zostały ustawione w sposób nieuzasadniony patrząc na:

git config -l | grep gc 

Aby uzyskać więcej informacji, zobacz książkę Git SCM pod numerem Git Internals.

+0

Nie ma luźnych obiektów, ale jest 346 paczek ... Nie ustawiono opcji gc, ale z powodu mały serwer z 4GB ramem ustawiliśmy pack.windowmemory = 50m i pack.packsizelimit = 100m. Mamy ogromne repozytorium, ponieważ popełniliśmy błąd dodając duże pliki binarne, gdy zaczynaliśmy z git. – anr78

+0

"Nieuzasadnione parametry strojenia" Problem polegał na tym, że zwiększyłem pack.packsizelimit do 500m, a po przepakowaniu mam 27 plików .idx w obiektach/paczkach, a repo zachowuje się. Dzięki za pomoc – anr78

+0

packSizeLimit został ustawiony na 10m dla mnie. reso rozwiązał ten problem. Dzięki. – d4ryl3

Powiązane problemy