git:--使用bfg duplicates提交后修剪为空
我正在使用从(克隆的)git存储库中删除一些子目录:git:--使用bfg duplicates提交后修剪为空,git,git-rewrite-history,bfg-repo-cleaner,Git,Git Rewrite History,Bfg Repo Cleaner,我正在使用从(克隆的)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之后,我有许多空的提交(例如,提交时有很好的日志
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
或
两个版本都没有预期的效果(删除空提交)
相反,我最终得到的是一个存储库,其中(见下面的屏幕截图,左边是修剪前,右边是修剪后):
有什么建议吗?从您看到的重复历史记录来看,您的后BFG运行尝试删除旧的、现在已重写的提交历史记录似乎失败了。出现这种情况的原因有很多,但主要原因是如果
myrepo.git
不是BFG说明中概述的裸/镜像克隆repo
有些东西正在保留旧的BFG前重写历史,现在显示为副本。此历史记录可能存储在远程系统中,例如origin
,这也解释了为什么筛选器分支
没有删除预期的所有空提交
最后,您可能对当前的pull请求感兴趣-它运行良好,与BFG的所有功能一样,比运行
filter branch
要快几个数量级-您是如何创建myrepo.git
-它是根据BFG指南创建的裸/镜像存储库吗?我使用了git clone--mirror https://:@git…
。这是正确的方法吗?是的。在开始使用过滤器分支之前,您是否也回推并重新蚀刻您的源代码
?不,我没有--而且由于“内部解决方案”(使用bfg repo cleaner)一次性工作,我不会费心检查这是否有效--我猜…您尝试构建了哪个版本?最新的PR 52a2ae7应该没问题,也许你建立了一个旧版本。如果该版本没有生成,请在PR上留下注释。在仔细检查我是否签出了正确的版本后,它可以编译。(很抱歉,我第一次尝试从github编译pull请求。)它似乎也比git筛选器分支
解决方案好得多。还有一些恼人的(空的)“合并分支'主'…”但除此之外历史是干净的。你是如何解决这个@fuenfundachtzig的?我也遇到过类似的情况,但我不明白如何让一个主分支:
git filter-branch --prune-empty --tag-name-filter cat -- --all