2015-12-01 60 views
0

您可以在裸回購庫上使用git ls-tree --full-tree -r HEAD以獲取該回購庫中的所有文件,但我希望該列表用於特定提交。在特定提交下獲取裸露git文件夾中的文件樹

I.e.我想通過第一次提交提交來回顧一下repo commit,直到我進入HEAD並查看文件樹是如何進化的。我只關心文件和路徑,實際上我並不關心內容。

有沒有辦法在光禿禿的回購上做到這一點?我希望這是一個裸回購,因爲我們有一些非常大的回購,並且爲每個提交做結賬在CPU時間上花費太多。

回答

1

當然,只需將HEAD替換爲任何承諾或樹標識符,如SHA-1或gitrevisions所允許的任何說明符。請使用git rev-list。例如,從當前工作提交(HEAD)回到根在每個合併之後只有第一次家長:

git rev-list --first-parent --topo-order HEAD | while read rev; do 
    git ls-tree --full-tree -r $rev 
done 

要通過同一組中的其他訂單修訂的運行,加--reverse的參數git rev-list

如果你想在合併時關注所有父母,你可以簡單地省略--first-parent--topo-order限制將確保父代提交ID在所有子代之前(或在--reverse之後)。如果沒有特定的排序,您將按提交日期順序提交提交(或按照--reverse,轉發)。 (如果你要跟蹤樹的演變,但也想很好地處理合並,你可能需要一個更復雜的操作,因爲你有git rev-list一起生成父和子提交ID,因爲即使是--topo-order或其他一些將父母/子女關係保持在一起的排序標準,從扁平化的圖表中可以看出,合併發生的位置並不會很明顯,請仔細閱讀the git rev-list documentation。使用--first-parent簡化了工作,因爲它爲您提供了簡化,嚴格的父母/孩子訂購。)

+0

嗯,這很奇怪。我以爲那是我正在嘗試的,而且並不奏效。那麼,它現在有效。謝謝。 –

相關問題