2015-04-24 3 views
14

ist das Ergebnis meiner letzten commit/Wechsel in Git ...Warum zeigt Gerrit eine andere Anzahl an Änderungen als git? Diese

enter image description here

... und in Gerrit:

enter image description here

Gibt es eine Erklärung für Unterschied in der Zahl von Zeilen hinzugefügt und gelöscht? Unterschiedlicher Algorithmus?

+0

Gerrit sollte keine andere Nummer anzeigen. Kannst du bitte auf die Änderung bei Gerrit verlinken? – Mureinik

+5

'Gerrit' verwendet' jgit'. Es gibt eine 'jgit'-Binärdatei. Versuchen Sie 'jgit show' auf Ihrem Commit auszuführen und prüfen Sie, ob die von' jgit' und 'git' erzeugten Diffs unterschiedlich sind. Ich erinnere mich an eine ähnliche Situation. –

+0

IST dies vor oder nach dem Senden? Gab es eine (unsichtbare) Rebase und/oder Zusammenführung? – kdopen

Antwort

0

Wenn Sie mehrere Male gedrückt haben, liegt das daran, dass Ihre Referenzversion gegen etwas anderes als das Basis-Commit in der Änderung ist.

0

Jeder Git commits zeigt auf einen ganzen git tree snapshot (was das checkout oder Diffedieren jeder Revision sehr schnell und ziemlich konstant macht). Git speichert Patches nicht intern, sie werden bei Bedarf berechnet, wenn beispielsweise Commit-Statistiken berechnet werden.

git diff ist der Hauptbefehl, um sie zu berechnen, und es behandelt mehrere diff-Algorithmen (siehe --diff-algorithm mindestens). Auch git configuration kann bestimmte Standard-Diff-Verhalten einstellen (siehe diff.dirstat und diff.algorithm Configs).

Wenn beide Tools/Maschinen Diff-Stats mit unterschiedlichen Diff-Einstellungen berechnen, erhalten Sie am Ende möglicherweise unterschiedliche Werte. (Ich weiß nicht, ob das der Fall ist)

0

Die tatsächlichen Änderungen sind gleich. Der Unterschied liegt jedoch daran, wie GIT und GERRIT die Anzahl der geänderten Zeilen berechnet. Angenommen, Sie haben 4 Versionen/Änderungen/Patchsets des Commits über HEAD.

commit_patchset # 4
commit_patchset # 3
commit_patchset # 2
commit_patchset # 1
HEAD

Git:
Anzahl der Zeilen geändert für # 4 (A1) commit: diff zwischen commit_patchset # 4 und commit_patch # 3
Anzahl der Zeilen, die für das Commit # 3 (B1) geändert wurden: diff zwischen commit_patchset # 3 und commit_patch # 2 Num ber der Zeilen geändert für commit # 2 (C1): diff zwischen commit_patchset # 2 und commit_patch # 1
Anzahl der Zeilen geändert für # 1 (D1) commit: diff zwischen commit_patchset # 1 und HEAD

Gerrit:
Anzahl der Zeilen geändert für commit # 4 (A2): diff zwischen commit_patchset # 4 und BASE/HEAD
Anzahl der Zeilen für commit # 3 (B2) geändert: diff zwischen commit_patchset # 3 und BASE/HEAD
Anzahl Für Commit # 2 (C2) geänderte Zeilen: Diff zwischen commit_patchset # 2 und BASE/HEAD Anzahl der Zeilen geändert für Commit # 1 (D2): diff zwischen commit_patchset # 1 und BASIS/KOPF

Also immer die Anzahl der Zeilen geändert werden unterschiedlich sein.

Sie können Gerrit bitten, den genauen Unterschied (wie GIT zeigt) zwischen der Patchset-Version anstelle von BASE/HEAD unter Verwendung der Option ".." anzuzeigen.
Zum Beispiel
http://your_gerrit_url/your_change_id/4..3 gibt Ihnen die genauen Zeilen zwischen commit_patchset # 4 und commit_patchset # 3 geändert. Dies sollte mit den GIT-Berechnungen übereinstimmen.

Ich hoffe, es hilft.

Verwandte Themen