2016-05-12 20 views

risposta

4

Risposta breve: no. Il numero non è memorizzato da nessuna parte (a meno che non lo memorizzi tu stesso - e potrebbe essere carino se Git lo salvasse in .git/config da qualche parte).

Un repository è superficiale (secondo la definizione interna di Git) se e solo se esiste il file .git/shallow. I contenuti di questo file sono un po 'subdoli: la maggior parte di Git lo tratta esattamente allo stesso modo di .git/grafts. Cioè, ogni riga nel file shallow contiene un ID hash di commit (e nient'altro, rispetto a grafts, dove ogni riga è seguita da tutti gli ID padre innestati: poiché la riga è vuota, non ci sono ID padre e il commit diventa un root commettere). (Git può contrassegnarlo internamente come "non proprio una radice", indicando che ha genitori che semplicemente non sono mai stati ottenuti. Per essere completamente affidabile, ciò richiederebbe anche che nessun ID di commit effettivo sia mai memorizzato nel file e non sono sicuro che sia così.)

È possibile calcolare una profondità massima di tutti i riferimenti: a partire da ogni riferimento, contare la profondità del grafico da quella più tip tip verso una radice (possibilmente innestata). Tuttavia, questo non dovrebbe essere necessariamente il numero passato a --depth (qui o, più tardi, con un --depth assegnato a git fetch).

Supponiamo, ad esempio, di clonare un repository che ha solo due commit, mentre usa anche --depth 10. La catena più profonda è uno o due commit lunghi, poiché ci sono solo due commit: uno (reale) root per certi, e uno commit che potrebbe avere l'altro come genitore, o potrebbe essere un altro commit (reale) di root. Se, in questo caso, non conosco la risposta, il file .git/shallow non contiene mai radici reali, sarebbe vuoto a questo punto e sapremmo che per quanto sia lunga la catena più lunga, l'argomento --depth deve essere stato maggiore di , ma non sapremmo il numero effettivo.

Supponiamo, d'altra parte, di clonare un repository 10-or-more-commit, con il nostro --depth 10, e ottenere una catena di 10 commit terminati da un errore di root-root. Quindi aggiungiamo due nuovi a questa catena da 10, in modo che abbiamo una catena di 12 commit. Il numero --depth è ancora 10, ma contando le catene, troviamo 12.

Quindi, questo mostra due modi in cui un conteggio calcolato potrebbe essere troppo piccolo o troppo grande. In molte circostanze, tuttavia, il conteggio calcolato funzionerebbe bene. Per ottenere conteggi calcolati, utilizzare git for-each-ref per trovare ogni riferimento e git rev-list --count --first-parent su ogni riferimento trovato. Qualunque sia il massimo che si ottiene è probabile che il numero di profondità, o qualcosa di abbastanza vicino.