Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git:--使用bfg duplicates提交后修剪为空_Git_Git Rewrite History_Bfg Repo Cleaner - Fatal编程技术网

git:--使用bfg duplicates提交后修剪为空

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之后,我有许多空的提交(例如,提交时有很好的日志

我正在使用从(克隆的)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

两个版本都没有预期的效果(删除空提交)

相反,我最终得到的是一个存储库,其中(见下面的屏幕截图,左边是修剪前,右边是修剪后):

  • 已删除一些空提交
  • 大多数空提交仍然存在
  • 非空提交在单独的提交序列中重复

  • 有什么建议吗?

    从您看到的重复历史记录来看,您的后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