Почему Gerrit показывает различное количество изменений, чем git?

Это результат моей последней фиксации/изменения в Git...

enter image description here

... и в Gerrit:

enter image description here

Есть ли объяснение различий в количестве добавленных и удаленных строк? Разный алгоритм?

Ответ 1

Если вы нажали несколько раз, это значит, что ваша эталонная версия против чего-то другого, кроме базового, в изменении.

Ответ 2

Каждый git фиксирует точки на весь снимок дерева git (что делает проверку или изменение любой ревизии очень быстрой и довольно постоянной). git не хранит исправления внутри, они вычисляются по требованию, когда это необходимо, например, когда вычисляются данные фиксации.

git diff - основная команда для их вычисления, и она обрабатывает несколько алгоритмов дифференциала (как минимум, --diff-algorithm). Кроме того, git configuration может устанавливать конкретные поведения по умолчанию (см. diff.dirstat и diff.algorithm configs).

Если оба инструмента/машины вычисляют данные о различиях с различными настройками diff, вы можете получить другую статистику в конце. (Я не знаю, так ли это)

Ответ 3

Фактические изменения одинаковы. Но разница заключается в том, как GIT и GERRIT вычисляет количество строк. Скажем, у вас есть 4 версии/изменения/патчеты коммита поверх HEAD.

commit_patchset # 4
commit_patchset # 3
commit_patchset # 2
commit_patchset # 1
ГОЛОВА

Git:
Количество строк, измененных для фиксации # 4 (A1): diff между commit_patchset # 4 и commit_patch # 3
Количество строк, измененных для фиксации # 3 (B1): diff между commit_patchset # 3 и commit_patch # 2
Количество строк, измененных для commit # 2 (C1): diff между commit_patchset # 2 и commit_patch # 1
Количество строк, измененных для фиксации # 1 (D1): diff между commit_patchset # 1 и HEAD

Геррит:
Количество строк, измененных для фиксации # 4 (A2): разность между commit_patchset # 4 и BASE/HEAD
Количество строк, измененных для фиксации # 3 (B2): diff между commit_patchset # 3 и BASE/HEAD
Количество строк, измененных для фиксации # 2 (C2): diff между commit_patchset # 2 и BASE/HEAD
Количество строк, измененных для фиксации # 1 (D2): diff между commit_patchset # 1 и BASE/HEAD

Таким образом, всегда меняется количество строк.

Вы можете попросить Gerrit показать точную разницу (как GIT показывает) между версией patchset вместо BASE/HEAD, используя опцию ".." .
Например, фотографии http://your_gerrit_url/your_change_id/4..3 дает точные строки, измененные между commit_patchset # 4 и commit_patchset # 3. Это должно соответствовать вычислениям GIT.

Надеюсь, это поможет.