Po odzyskaniu płytkiego klonu, np.jak poznać głębię płytkiego klonu git?
git clone --depth 10 http://foo.bar/baz.git
Czy istnieje git
polecenie odzyskania głębi tego klonu? (np. polecenie, które po prostu drukuje 10
).
Po odzyskaniu płytkiego klonu, np.jak poznać głębię płytkiego klonu git?
git clone --depth 10 http://foo.bar/baz.git
Czy istnieje git
polecenie odzyskania głębi tego klonu? (np. polecenie, które po prostu drukuje 10
).
Krótka odpowiedź: nie. Numer nie jest nigdzie przechowywany (chyba, że przechowujesz go samemu - i może być fajnie, jeśli Git go gdzieś zapisał w .git/config
).
Repozytorium jest płytkie (według wewnętrznej definicji Gita) wtedy i tylko wtedy, gdy istnieje plik .git/shallow
. Plik tego pliku jest trochę podstępny: większość Git traktuje go w dokładnie taki sam sposób, jak .git/grafts
. Oznacza to, że każda linia w pliku shallow
zawiera identyfikator mieszania commit (i nic innego, niż grafts
, gdzie po każdej linii występują wszystkie przeszczepione identyfikatory nadrzędne: ponieważ linia jest pusta, nie ma żadnych identyfikatorów macierzystych, a zatwierdzenie staje się root commit). (Git może oznaczyć ją wewnętrznie jako "nie tak naprawdę root", co oznacza, że ma rodziców, którzy nigdy nie zostali uzyskani.) Aby być całkowicie pewnym, wymagałoby to również, aby żadne identyfikatory rootów nie były przechowywane w pliku i nie jestem pewien, czy tak jest w tym przypadku.)
Można obliczyć maksymalną głębokość wszystkich odniesień: zaczynając od każdego odniesienia, policz głębokość wykresu od największego zobowiązania do korzenia (prawdopodobnie przeszczepionego). Nie musi to jednak koniecznie być liczbą przekazaną do --depth
(tutaj lub, później, z --depth
podaną git fetch
).
Załóżmy na przykład, że sklonowaliśmy repozytorium, które ma tylko dwa zatwierdzenia, a jednocześnie używa się --depth 10
. Najgłębszy łańcuch ma długość jednego lub dwóch zatwierdzeń, ponieważ istnieją tylko dwa zatwierdzenia: jeden (prawdziwy) root dla pewnych i jeden commit, który może mieć drugi jako jego rodzic lub inny (prawdziwy) root commit. Jeśli - w tym przypadku nie wiem, odpowiedź na - plik .git/shallow
nigdy nie zawiera prawdziwych korzeni, byłaby w tym momencie pusta i moglibyśmy wiedzieć, że jak długo trwa najdłuższy łańcuch, argument --depth
musiał być większy od tego , ale nie znamy rzeczywistej liczby.
Załóżmy, że z drugiej strony sklonujemy 10 lub więcej-commit repozytorium z naszym --depth 10
i otrzymamy łańcuch 10 zatwierdzeń zakończonych przez fałszywe-root-graft. Następnie dodajemy dwa nowe nowe zobowiązuje się do tego 10-długi łańcuch, tak, że mamy łańcuch 12-commit. --depth
to nadal 10, ale zliczając łańcuchy, znajdujemy 12.
To pokazuje dwa sposoby, że obliczona liczba może być zbyt mała lub zbyt duża. Jednak w wielu okolicznościach obliczona liczba dobrze by działała. Aby uzyskać obliczone liczby, użyj git for-each-ref
, aby znaleźć każde odniesienie i git rev-list --count --first-parent
dla każdego znalezionego odniesienia. Jakiekolwiek maksimum uzyskasz, jest prawdopodobnie liczbą głębokości lub czymś wystarczająco bliskim.