【问题标题】:How to verify that BFG Repo-Cleaner has correctly removed a large file from a git repository?如何验证 BFG Repo-Cleaner 是否已从 git 存储库中正确删除了一个大文件?
【发布时间】:2014-09-16 17:09:13
【问题描述】:

我使用 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 是否正常工作?

任何建议将不胜感激。

【问题讨论】:

    标签: git bfg-repo-cleaner


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      快速而肮脏的技术 - 假设曾经存在的大文件只有 1 个版本

      这将打印出大文件的 blob sha

       git hash-object <large-file>
      

      使用上一步中的 sha

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

      如果失败,那么您知道没有提交可以引用该 blob。

      如果您真的想验证您的所有提交是否相同(此处相同意味着“不同”,因为您要删除大文件),那么您需要编写一个脚本来区分原始提交和新的提交。您不会使用 for-each-ref,您会使用 rev-list,并且您需要一种将旧 sha 映射到新 sha 的机制,而 BFG 工具可能没有这种机制。不过,您可以按照您的描述验证分支提示,这可能就足够了。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      相关资源
      最近更新 更多