git: - 使用bfg重复提交后出现的-prune-empty

时间:2016-05-12 16:00:46

标签: git git-rewrite-history bfg-repo-cleaner

我正在使用bfg从(克隆)git存储库中删除一些子目录:

java -jar bfg-1.12.12.jar --delete-folders {folder1,folder2,folder3} --no-blob-protection myrepo.git/
git reflog expire --expire=now --all && git gc --prune=now --aggressive

这个工作正常但是在我使用了bfg之后我有很多空提交(即提交了很好的日志消息,但没有更改,因为它们只触及了现在被删除的文件)。

因此,下一步我尝试使用

git filter-branch --commit-filter 'git_commit_non_empty_tree "$@"' HEAD

git filter-branch --prune-empty --tag-name-filter cat -- --all

两个版本都没有达到预期效果(删除空提交)。

相反,我最终得到的是一个存储库(见下面的截图,左边是修剪之前,右边是之后):

  1. 删除了一些空提交
  2. 大多数空提交仍然存在
  3. 非空提交在单独的提交列表中重复
  4. enter image description here

    有任何建议吗?

1 个答案:

答案 0 :(得分:4)

从您看到的重复历史记录中,似乎您的BFG后运行尝试删除旧的,现在重写的提交历史记录失败。这可能由于多种原因而发生,但主要原因是如果myrepo.git不是BFG指令中概述的裸/镜像克隆存储库。

有些东西保留了旧的BFG前重写历史记录,现在显示为重复记录。此历史记录可能甚至可能存储在origin等远程数据库中,这也可以解释为什么filter-branch没有删除您期望的所有空提交。

最后,您可能对add the --prune-empty-commits feature to BFG的当前拉取请求感兴趣 - 它运行良好,就像所有BFG一样,比运行filter-branch快几个数量级。