1

我最近使用 BFG --delete-files 从存储库中删除了几个大文件,输出似乎符合我的预期。正确的文件和大小被报告为从 repo 中删除,并且本地大小反映了这些删除。

但是,当我上传并与 master 比较时,它报告说存在巨大差异,并且影响了数百个提交。我不知道该怎么做或如何理解它;经历太多了。我知道删除文件将重组 repo,但我如何确定差异中实际发生了什么?

4

2 回答 2

0

这取决于在所有这些文件中看到的差异的性质。

例如,如果它们是 EOL 差异(行尾),这可能意味着 BFG 提交重写过程是在本地使用配置 core.autocrlf 完成的,这可能对所有文件都有更改 eol(除了删除一些他们)。
推送后,所有其他文件将显示为“不同”。

于 2017-12-13T05:56:03.973 回答
0

这是由于java -jar bfg.war --delete-files filename将从所有分支的整个提交历史中删除指定的文件,但您只将一个分支推送到 remote

在使用 BFG 删除文件之前,假设提交历史如下:

…---A---B---C---D  master, origin/master
         \
          E---F  mybranch, origin/mybranch

当您将master分支与进行比较时,mybranch相关的提交是C、和。DEF

并假设 delete-files 是test.txt,并且它只存在于 commitBE. 当你执行

java -jar bfg.war --delete-files test.txt

提交历史将是:

…---A---B'---C'---D'  master, origin/master
         \
          E'---F'  mybranch, origin/mybranch

注意:master它不仅会重写本地分支(和)的提交mybranch,还会重新指向跟踪分支(origin/masterorigin/mybranch)。

如果你git fetch在那之后做,你会发现本地分支和他们的跟踪分支是不同的:

        E---F    origin/mybranch
       /
      B---C---D  origin/master
     /     
…---A---B'---C'---D'  master
         \
          E'---F'  mybranch

而如果你只强制推mybranch送到远程仓库(而不是强制推送分支),远程仓库master上的提交历史将是:

      B---C---D  master
     /     
…---A---B'---E'---F'  mybranch

因此,当您再次mybranchmaster分支进行比较时,相关提交将包含B, C, D, B',E'F'.

如果您还强制将本地masterbtanch 推送到远程,则在使用 BFG 时进行比较时,相关提交的计数应该相同。

于 2017-12-20T01:20:08.620 回答