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

为什么Gerrit显示的更改数量与git不同?,git,gerrit,Git,Gerrit,这是我最近提交/更改Git的结果 …在Gerrit中: 对增加和删除的行数的差异有何解释?不同的算法?如果您多次推送,那是因为您的参考版本不支持更改中的基本提交。每个git提交都指向一个完整的git树快照(这使得签出或区分任何修订都非常快且时间相当恒定)。Git不在内部存储补丁,它们是在需要时按需计算的,就像在计算提交统计数据时一样 是计算它们的主命令,它处理多个diff算法(至少请参见--diff-algorithm)。还可以设置特定的默认差异行为(请参见diff.dirstat和diff

这是我最近提交/更改Git的结果

…在Gerrit中:


对增加和删除的行数的差异有何解释?不同的算法?

如果您多次推送,那是因为您的参考版本不支持更改中的基本提交。

每个git提交都指向一个完整的git树快照(这使得签出或区分任何修订都非常快且时间相当恒定)。Git不在内部存储补丁,它们是在需要时按需计算的,就像在计算提交统计数据时一样

是计算它们的主命令,它处理多个diff算法(至少请参见
--diff-algorithm
)。还可以设置特定的默认差异行为(请参见
diff.dirstat
diff.algorithm
configs)


如果两个工具/机器都使用不同的差异设置计算差异统计数据,那么最后可能会得到不同的统计数据。(我不知道情况是否如此)

实际变化是一样的。但区别在于GIT和GERRIT如何计算更改的行数。假设您在头部有4个提交版本/更改/补丁集

提交补丁集4
提交补丁集#3
提交补丁集#2
提交补丁集#1

Git:
为提交4(A1)更改的行数:提交补丁集4和提交补丁3之间的差异
为提交3(B1)更改的行数:提交补丁集3和提交补丁2之间的差异
为提交#2(C1)更改的行数:提交#补丁集#2和提交#补丁#1之间的差异
为提交#1(D1)更改的行数:提交补丁集#1和头之间的差异

Gerrit:
为commit#4(A2)更改的行数:commit#U patchset#4和基/头之间的差异
为提交#3(B2)更改的行数:提交#补丁集#3和基/头之间的差异
为提交#2(C2)更改的行数:提交#补丁集#2和基/头之间的差异
为提交#1(D2)更改的行数:提交#补丁集#1和基/头之间的差异

因此,更改的行数总是不同的

您可以要求Gerrit使用选项显示补丁集版本与基本/头部版本之间的确切差异(如GIT所示)。“选项。
例如,
提供在提交补丁集4和提交补丁集3之间更改的确切行。这应该与GIT计算相匹配


希望能有帮助

Gerrit不应该显示不同的数字。你能链接到gerrit上的更改吗?
gerrit
使用
jgit
。有一个
jgit
二进制文件可用。在提交时尝试运行
jgit show
,检查
jgit
git
产生的差异是否不同。我记得我遇到过类似的情况。这是在提交之前还是之后?是否有(无形的)重新基址和/或合并发生?@Mureinik抱歉,我不能。它在公司内部网上。可能有从crlf到lf的转换,或者反之亦然,gerrit不跟踪或标记空间。