2

我正在使用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

1 回答 1

5

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

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

最后,您可能对当前的拉取请求感兴趣,以将该功能添加--prune-empty-commits到 BFG - 它运行良好,并且与所有 BFG 一样,比运行快几个数量级filter-branch

于 2016-06-02T21:18:52.347 回答