簡體   English   中英

如何驗證BFG Repo-Cleaner是否已從git存儲庫中正確刪除了大文件?

[英]How to verify that BFG Repo-Cleaner has correctly removed a large file from a git repository?

我使用BFG Repo-Cleaner從git存儲庫中刪除了一個大文件:

java -jar ../bfg-1.11.8.jar --delete-folders escrow application.git
cd application.git
git reflog expire --expire=now --all
git gc --prune=now --aggressive
cd ..
mkdir clone
cd clone
git clone file:///home/damian/temp/TCLIPG-4370/test/application.git

我使用腳本( http://stubbisms.wordpress.com/2009/07/10/git-script-to-show-largest-pack-objects-and-trim-your-waist-line/ )來檢查我的運行BFG Repo-Cleaner之前和之后的存儲庫,它顯示了托管目錄的刪除,並且兩個存儲庫中的內存也減少了。

一切看起來都不錯,但我如何驗證我的所有提交是否相同? 我是否必須使用git-for-each-ref創建一個腳本,並在兩個存儲庫中比較具有相同名稱的提交,以驗證BFG是否正常工作?

任何建議將不勝感激。

您可以從Eric S. Raymond的repodiffer (他的reposurgeon項目的一部分)獲得獨立意見: http//www.catb.org/~esr/reposurgeon/repodiffer.html

你這樣使用它:

$ repodiffer old-repo-copy.git new-repo-copy.git

該腳本可能需要一段時間才能運行,但它會准確地告訴您這兩個回購之間發生了哪些變化。 小樣本輸出:

...
1a54b66 -> 9b11d44: same differences as for 5c572dc -> 6e8307c.
changed: e00a601 -> 30a42c8 in tree.
L only:
  frontend/assets/big.mp4
R only:
  frontend/assets/big.mp4.REMOVED.git-id
...

完全披露:我是BFG Repo-Cleaner的作者。

快速而骯臟的技術 - 假設只有1個版本的大文件存在過

這將打印出大文件的blob sha

 git hash-object <large-file>

使用上一步中的sha

git cat-file -p <large-file-sha>

如果失敗,那么您就知道沒有提交可以引用該blob。

如果你真的想驗證你的所有提交都是一樣的(並且在這里意味着'不同',因為你要刪除大文件),那么你需要編寫一個腳本來對原始提交和新提交進行差異化。 你不會使用for-each-ref,你會使用rev-list,而你需要一種機制來將舊的sha映射到new sha,這可能與BFG工具不同。 您可以像描述的那樣驗證分支提示,這可能已經足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM