2016-05-12 28 views
2

我使用bfg从git仓库一(克隆)删除一些子目录:混帐:使用高炉煤气重复后--prune空承诺

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 

这工作不错,但我已经使用高炉煤气后,我有许多空提交(即提交良好的日志消息,但没有更改,因为他们只接触现在已被删除的文件)。

因此,作为下一步我试图用

git filter-branch --commit-filter 'git_commit_non_empty_tree "[email protected]"' HEAD 

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

两个版本没有收到预期的效果(除去空提交)。

相反,我结束了一个资料库,其中(见下面的截图,左边是修剪前,右边是后):

  1. 几个空的提交已被删除
  2. 最空提交保持
  3. 非空提交被复制在提交

enter image description here

单独列车

有何建议?

+0

你是如何创建'myrepo.git'的? - 根据BFG指导原则,它是一个裸/镜像存储库吗? – javabrett

+0

我用'git clone --mirror https://:@git ....'。那是正确的方法吗? – fuenfundachtzig

+0

是的。在“filter-branch”开始之前,你是否还推回并重新获取'origin'? – javabrett

回答

3

从您看到的重复历史记录中可以看出,您的BFG运行后尝试删除旧的,现在改写的提交历史记录失败。这可能有多种原因,但主要原因是如果myrepo.git不是BFG指令中列出的裸/镜像副本回购。

某些东西正在保留旧的BFG前重写历史记录,现在显示为重复记录。这个历史记录可能存储在一个远程文件中,例如origin,这也可以解释为什么你的filter-branch没有删除你期望的所有空提交。

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

+0

哪个版本你试图建立?最新的PR 52a2ae7应该没问题,也许你建了一个旧版本。如果这个修改没有建立,请在公关留言。 – javabrett

+0

经过仔细检查,我签出正确的版本,它编译罚款。 (对不起,我第一次尝试编译github的pull请求。) – fuenfundachtzig

+0

它似乎比'git filter-branch'解决方案好得多。还有一些令人讨厌的(空的)“合并分支”......的主人“,但除此之外,历史是清洁的。 – fuenfundachtzig