2016-05-12 68 views

回答

4

簡答題:沒有。該號碼不會存儲在任何地方(除非您自己存儲 - 如果Git將它保存在.git/config某處)可能會更好。

當且僅當文件.git/shallow存在時,存儲庫纔會變淺(通過Git的內部定義)。該文件的內容有點鬼鬼祟祟:大部分Git都以與.git/grafts完全相同的方式對待它。也就是說,shallow文件中的每一行都包含一個提交哈希ID(沒有別的,vs grafts,其中每行後面跟着所有移植的父ID:由於該行是空的,因此沒有父ID,提交變爲根提交)。 (Git可以在內部將它標記爲「不是真正的根目錄」,表明它有父母是從來沒有獲得過的。爲了完全可靠,這還需要確保沒有在文件中存儲根提交ID ,並且我不確定是否是這種情況)。

您可以計算所有引用的最大深度:從每個引用開始,計算從最低限度提交到(可能已嫁接)根的圖深度。但是,這並不一定是傳遞給--depth的數字(在此處或稍後,--depth給予git fetch)。

例如,假設我們克隆了一個只有兩個提交的存儲庫,同時也使用了--depth 10。最深的鏈是一個或兩個提交很長的時間,因爲只有兩個提交:確切的一個(真實)根,以及可能有另一個作爲其父的提交,或者可能是另一個(真實)根提交。如果 - 這種情況我不知道答案 - .git/shallow文件從不包含真正的根,它在這一點上將是空的,我們會知道無論最長的鏈是多長,--depth參數必須大於,但我們不知道實際的數字。

另一方面,假設我們用我們的--depth 10克隆了一個10個或更多提交的存儲庫,並獲得由假根嫁接終止的10個提交鏈。然後,我們添加兩個新的提交到這個10長鏈,以便我們有一個12提交鏈。 --depth仍然是10,但計數鏈,我們發現12.

所以,這表明計算計數可能太小或太大的兩種方式。但是,在很多情況下,計算出來的計數會很好。要計算計數,請使用git for-each-ref查找每個找到的參考,並使用git rev-list --count --first-parent。無論您獲得的最大數量是深度數還是足夠接近。