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

标签 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. 非空提交在单独的提交序列中重复

enter image description here

有什么建议吗?

最佳答案

从您看到的重复历史记录来看,您在 BFG 运行后尝试删除旧的、现已重写的提交历史记录的尝试似乎已失败。发生这种情况的原因有多种,但主要原因是 myrepo.git 不是 BFG 说明中概述的裸/镜像克隆存储库。

某些东西正在保留旧的、前 BFG 重写历史记录,现在显示为重复。该历史记录有可能甚至很可能存储在诸如 origin 之类的远程位置,这也可以解释为什么您的 filter-branch 没有删除您的所有空提交期待。

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

关于git: --prune-empty 使用 bfg 重复提交后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37192065/

相关文章:

Git递归添加某个路径下的所有存储库作为子模块

git - 我如何解决 .husky/_/husky.sh : No such file or directory error when using husky?

git - 如何让 Git 推/pull 通过 Windows 7 防火墙?

git-rewrite-history - 使用 BFG 存储库清洁器后,BitBucket 存储库变大

git - 自动修复相同消息和作者(完整存储库)的连续提交

git - BFG错误: BFG aborting: No refs to update - no dirty commits found

git - 检索不是类似于存储的提交的已删除存储

重命名文件夹后的 Git 过滤

git - BFG : mapping from old (pre-cleaning) to new hashes

Git:删除除特定目录之外的所有内容(BFG Repo Cleaner)