繁体   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