我已经使用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是否正确工作?
任何建议将不胜感激。
3条答案
按热度按时间cmssoen21#
您可以从Eric S. Raymond的
repodiffer
(他的reposurgeon项目的一部分)获得独立意见:http://www.catb.org/~esr/reposurgeon/repodiffer.html你可以这样使用它:
该脚本可能需要一段时间才能运行,但它会准确地告诉您这两个存储库之间发生了什么变化。输出的小示例:
0yg35tkg2#
快速和肮脏的技术-假设只有一个版本的大文件曾经存在
这将打印出大文件的blob sha
使用上一步中的SHA
如果失败,那么你知道没有提交可以引用那个blob。
如果你真的想验证所有的提交都是一样的(same在这里的意思是“不同”,因为你要删除的是一个大文件),那么你需要写一个脚本来区分原始提交和新提交。你不会使用for-each-ref,你会使用rev-list,你需要一个机制来Map旧的sha到新的sha,这可能是你在BFG工具中没有的。你可以像你描述的那样验证分支提示,这可能已经足够好了。
6jjcrrmo3#
我所能做的就是做一个普通的克隆,应用我需要的bfg命令,然后用图形化的git工具查看文件(sublime merge很棒!)。
然后,在我满意之后,在镜像克隆上应用相同的更改,然后推送它们,因为git不允许你从普通克隆推送未引用的提交对象。解释如下:Is there a way in git to push the reflog?