如何验证BFG Repo-Cleaner是否正确地从git仓库中删除了一个大文件?

gijlo24d  于 2023-04-19  发布在  Git
关注(0)|答案(3)|浏览(125)

我已经使用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是否正确工作?
任何建议将不胜感激。

cmssoen2

cmssoen21#

您可以从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的作者。*
0yg35tkg

0yg35tkg2#

快速和肮脏的技术-假设只有一个版本的大文件曾经存在
这将打印出大文件的blob sha

git hash-object <large-file>

使用上一步中的SHA

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

如果失败,那么你知道没有提交可以引用那个blob。
如果你真的想验证所有的提交都是一样的(same在这里的意思是“不同”,因为你要删除的是一个大文件),那么你需要写一个脚本来区分原始提交和新提交。你不会使用for-each-ref,你会使用rev-list,你需要一个机制来Map旧的sha到新的sha,这可能是你在BFG工具中没有的。你可以像你描述的那样验证分支提示,这可能已经足够好了。

6jjcrrmo

6jjcrrmo3#

我所能做的就是做一个普通的克隆,应用我需要的bfg命令,然后用图形化的git工具查看文件(sublime merge很棒!)。
然后,在我满意之后,在镜像克隆上应用相同的更改,然后推送它们,因为git不允许你从普通克隆推送未引用的提交对象。解释如下:Is there a way in git to push the reflog?

相关问题