2016-05-12 4 views

Antwort

4

Kurze Antwort: Nein. Die Nummer wird nirgends gespeichert (es sei denn, Sie speichern sie selbst - und es wäre nett, wenn Git sie irgendwo in .git/config gespeichert hätte).

Ein Repository ist flach (von Git's interner Definition) wenn und nur wenn die Datei .git/shallow existiert. Die Inhalte dieser Datei sind ein wenig hinterhältig: die meisten Git behandelt es genau wie .git/grafts. Das heißt, jede Zeile in der Datei shallow enthält eine Commit-Hash-ID (und nichts anderes, als grafts, wobei auf jede Zeile alle verpflanzten Eltern-IDs folgen: Da die Zeile leer ist, gibt es keine Eltern-IDs und das Commit wird zu a Root-Commit). (Git kann es intern als "nicht wirklich ein root" kennzeichnen, was darauf hinweist, dass es Eltern hat, die einfach nie erhalten wurden. Um absolut zuverlässig zu sein, würde dies auch sicherstellen, dass keine tatsächlichen Root-Commit-IDs jemals in der Datei gespeichert werden , und ich bin mir nicht sicher, ob das der Fall ist.)

Sie könnten eine maximale Tiefe aller Referenzen berechnen: Beginnen Sie mit jedem Verweis, Graf Tiefe von diesem tippmost Commit hinunter zu einem (möglicherweise gepfropft) Wurzel. Dies wäre jedoch nicht notwendigerweise die Nummer, die an --depth (hier oder später mit einer --depth, erteilt an git fetch) übergeben wurde.

Angenommen, wir klonen zum Beispiel ein Repository, das nur zwei Commits hat, während wir auch --depth 10 verwenden. Die tiefste Kette ist entweder ein oder zwei Commits lang, da es nur zwei Commits gibt: eine (echte) Wurzel für bestimmte und eine Commit, die die andere als ihre Eltern haben könnte, oder könnte eine andere (echte) Root-Commit sein. Wenn - das ist der Fall, weiß ich nicht die Antwort auf - die .git/shallow Datei enthält nie echte Wurzeln, wäre es an dieser Stelle leer und wir würden wissen, dass, wie lange die längste Kette ist, das --depth Argument größer als das sein muss , aber wir würden die tatsächliche Anzahl nicht wissen.

Angenommen, wir klonen auf der anderen Seite ein 10-oder-mehr-Commit-Repository mit unserem --depth 10 und erhalten eine Kette von 10 Commits, die durch ein gefälschtes Root-Graft beendet werden. Dann fügen wir zwei neue Commits zu dieser 10-langen Kette hinzu, so dass wir eine 12-Commit-Kette haben. Die --depth ist immer noch 10, aber Ketten zählen, finden wir 12.

So zeigt dies zwei Möglichkeiten, dass eine berechnete Anzahl zu klein oder zu groß sein könnte. In vielen Fällen würde die berechnete Anzahl jedoch gut funktionieren. Um berechnete Zählungen zu erhalten, verwenden Sie git for-each-ref, um jede Referenz zu finden, und git rev-list --count --first-parent für jede gefundene Referenz. Was auch immer Sie erhalten, ist wahrscheinlich die Tiefenzahl, oder etwas nahe genug.