git: --prune-empty after using bfg duplicates commits
git: --prune-empty after using bfg duplicates commits
我正在使用 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
两个版本都没有达到预期的效果(删除空提交)。
相反,我最终得到的是一个存储库,其中(见下面的屏幕截图,左边是修剪之前,右边是修剪之后):
- 一些空提交已被删除
- 大多数空提交仍然存在
- 非空提交在单独的提交序列中重复
有什么建议吗?
从您看到的重复历史来看,您的 post-BFG-运行 尝试删除旧的、现在重写的提交历史似乎很可能失败了。发生这种情况的原因有很多,但主要原因是 myrepo.git
不是 BFG 说明中概述的 bare/mirror-clone 存储库。
有些东西保留了 BFG 之前的旧重写历史,现在显示为重复。此历史记录可能或什至可能存储在远程服务器中,例如 origin
,这也可以解释为什么您的 filter-branch
没有删除您期望的所有空提交。
最后,您可能对 add the --prune-empty-commits
feature to BFG 的当前拉取请求感兴趣 - 它运行良好,与 BFG 的所有内容一样,比 运行ning filter-branch
快几个数量级.
我正在使用 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
两个版本都没有达到预期的效果(删除空提交)。
相反,我最终得到的是一个存储库,其中(见下面的屏幕截图,左边是修剪之前,右边是修剪之后):
- 一些空提交已被删除
- 大多数空提交仍然存在
- 非空提交在单独的提交序列中重复
有什么建议吗?
从您看到的重复历史来看,您的 post-BFG-运行 尝试删除旧的、现在重写的提交历史似乎很可能失败了。发生这种情况的原因有很多,但主要原因是 myrepo.git
不是 BFG 说明中概述的 bare/mirror-clone 存储库。
有些东西保留了 BFG 之前的旧重写历史,现在显示为重复。此历史记录可能或什至可能存储在远程服务器中,例如 origin
,这也可以解释为什么您的 filter-branch
没有删除您期望的所有空提交。
最后,您可能对 add the --prune-empty-commits
feature to BFG 的当前拉取请求感兴趣 - 它运行良好,与 BFG 的所有内容一样,比 运行ning filter-branch
快几个数量级.