为什么Gerrit显示的变更数量与git不同?

14

这是我在Git中最新提交/更改的结果...

请输入图片描述

...而在Gerrit中:

请输入图片描述

为什么增加和删除的行数会有不同呢?是否使用了不同的算法?


Gerrit 不应该显示不同的数字。你能否请提供在 Gerrit 上的修改链接? - Mureinik
6
Gerrit 使用 jgit。已经提供了 jgit 二进制文件。尝试在您的提交上运行 jgit show,并检查 jgitgit 生成的差异是否不同。我记得我遇到过类似的情况。 - Arkadiusz Drabczyk
@Mureinik 抱歉,我不能这样做。这是公司内部网络的内容。 - trejder
@kdopen 提交并推送后,没有rebase、merge或其他任何操作,就像通常一样:git status + git add -A + git commit -m "" + git push。我不知道这是否是我偶然发现的唯一情况,还是每次提交/推送后都会有差异。接下来的三天我无法访问公司内部网络,所以无法进一步验证。 - trejder
1
可能存在从CRLF到LF或反之的转换,Gerrit无法跟踪或制表符与空格的问题。 - kazandzhiro
显示剩余3条评论
3个回答

1
实际更改是一样的。但区别在于GIT和GERRIT如何计算更改行数。假设你有4个版本/更改/补丁集在HEAD之上的提交。
提交补丁集#4 提交补丁集#3 提交补丁集#2 提交补丁集#1 HEAD
Git: 提交#4(A1)更改的行数:commit_patchset#4和commit_patch#3之间的差异 提交#3(B1)更改的行数:commit_patchset#3和commit_patch#2之间的差异 提交#2(C1)更改的行数:commit_patchset#2和commit_patch#1之间的差异 提交#1(D1)更改的行数:commit_patchset#1和HEAD之间的差异
Gerrit: 提交#4(A2)更改的行数:commit_patchset#4和BASE / HEAD之间的差异 提交#3(B2)更改的行数:commit_patchset#3和BASE / HEAD之间的差异 提交#2(C2)更改的行数:commit_patchset#2和BASE / HEAD之间的差异 提交#1(D2)更改的行数:commit_patchset#1和BASE / HEAD之间的差异

因此,每次更改的行数都会有所不同。

您可以要求 Gerrit 使用".."选项显示补丁集版本与 BASE/HEAD 之间的确切差异(与 GIT 显示相同)。
例如,
http://your_gerrit_url/your_change_id/4..3 可以为您提供提交补丁集 #4 和提交补丁集 #3 之间的确切更改行。这应该与 GIT 计算相匹配。

希望对您有所帮助。


0

如果您已经多次推送,则是因为您的参考版本与更改中的基本提交不同。


0

每个 Git 提交都指向一个完整的 Git 树快照(这使得检出或比较任何修订版本非常快且相当恒定)。Git 不会在内部存储补丁,它们是按需计算的,例如在计算提交统计信息时。

git diff 是计算它们的主要命令,并处理多种差异算法(至少请参见 --diff-algorithm)。此外,git 配置 可以设置特定的默认差异行为(请参见 diff.dirstatdiff.algorithm 配置)。

如果两个工具/机器使用不同的差异设置计算差异统计信息,则最终可能会得到不同的统计信息。(我不知道是否是这种情况)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接