如果我檢索一個淺層克隆,例如如何知道git的淺層克隆的深度?
git clone --depth 10 http://foo.bar/baz.git
是否git
有任何命令檢索此克隆的深度? (例如簡單地打印10
的命令)。
如果我檢索一個淺層克隆,例如如何知道git的淺層克隆的深度?
git clone --depth 10 http://foo.bar/baz.git
是否git
有任何命令檢索此克隆的深度? (例如簡單地打印10
的命令)。
簡答題:沒有。該號碼不會存儲在任何地方(除非您自己存儲 - 如果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
。無論您獲得的最大數量是深度數還是足夠接近。