我最近使用 BFG --delete-files 从存储库中删除了几个大文件,输出似乎符合我的预期。正确的文件和大小被报告为从 repo 中删除,并且本地大小反映了这些删除。
但是,当我上传并与 master 比较时,它报告说存在巨大差异,并且影响了数百个提交。我不知道该怎么做或如何理解它;经历太多了。我知道删除文件将重组 repo,但我如何确定差异中实际发生了什么?
我最近使用 BFG --delete-files 从存储库中删除了几个大文件,输出似乎符合我的预期。正确的文件和大小被报告为从 repo 中删除,并且本地大小反映了这些删除。
但是,当我上传并与 master 比较时,它报告说存在巨大差异,并且影响了数百个提交。我不知道该怎么做或如何理解它;经历太多了。我知道删除文件将重组 repo,但我如何确定差异中实际发生了什么?
这取决于在所有这些文件中看到的差异的性质。
例如,如果它们是 EOL 差异(行尾),这可能意味着 BFG 提交重写过程是在本地使用配置 core.autocrlf 完成的,这可能对所有文件都有更改 eol(除了删除一些他们)。
推送后,所有其他文件将显示为“不同”。
这是由于java -jar bfg.war --delete-files filename
将从所有分支的整个提交历史中删除指定的文件,但您只将一个分支推送到 remote。
在使用 BFG 删除文件之前,假设提交历史如下:
…---A---B---C---D master, origin/master
\
E---F mybranch, origin/mybranch
当您将master
分支与进行比较时,mybranch
相关的提交是C
、和。D
E
F
并假设 delete-files 是test.txt
,并且它只存在于 commitB
和E
. 当你执行
java -jar bfg.war --delete-files test.txt
提交历史将是:
…---A---B'---C'---D' master, origin/master
\
E'---F' mybranch, origin/mybranch
注意:master
它不仅会重写本地分支(和)的提交mybranch
,还会重新指向跟踪分支(origin/master
和origin/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
因此,当您再次mybranch
与master
分支进行比较时,相关提交将包含B
, C
, D
, B'
,E'
和F'
.
如果您还强制将本地master
btanch 推送到远程,则在使用 BFG 时进行比较时,相关提交的计数应该相同。