2016-05-12 6 views

Odpowiedz

4

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.