Есть ли способ настроить git, чтобы он применял опцию `--color-Move` по умолчанию?
Начиная с Git 2.15, git show
теперь поддерживает обнаружение перемещенных линий с --color-moved
вариант. Это работает для перемещения по файлам.
Есть ли способ настроить git, чтобы он применялся --color-moved
вариант по умолчанию?
2 ответа
Документация git diff
должны быть проверены. Запустите следующую команду, чтобы раскрасить перемещенный код:
git config --global diff.colorMoved default
Примечание: с Git 2.19 (Q3 2018) git diff --color-moved
"функция была еще более подправлена.
См. Коммит 626c0b5, коммит ca1f4ae (18 июля 2018 г.) и коммит e2fe6ab, коммит b309571, коммит 51da15e, коммит ee1df66, коммит 3783aad, коммит 74cfa7b, коммит 21c770b, коммит 25790be (16 июля 2018 г.) от Stefan Beller ( stefanbeller
)
(Объединено Юнио С Хамано - gitster
- в комитете a81575a, 02 августа 2018 г.)
Во-первых, новая опция по умолчанию - блоки, а не зебра
diff.c
: добавить режим блоков для обнаружения перемещенного кодаНовый "
blocks
"Режим обеспечивает золотую середину между равниной и зеброй.
Он настолько же интуитивно понятен (несколько цветов), что и обычный, но все же требует минимального количества строк / символов для подсчета блока как перемещенного.
- С блоками соседние блоки нельзя отличить друг от друга.
- С зеброй, изменение между двумя цветами указывает, что новый блок был обнаружен.
Поэтому помните об этом при использовании git config --global diff.colorMoved default
установка.
Режим по умолчанию (см. git diff
мод) будут блоки, уже не зебра.
Затем блок поставляется с управлением пробелами:
diff.c
: добавить режим пробела для обнаружения движения, который позволяет изменять отступВозможность
--color-moved
оказался полезным, как отмечено в списке рассылки. Однако при рефакторинге иногда изменяется отступ, например, при разбиении функций на более мелкие вспомогательные функции код обычно перемещается, за исключением уменьшения отступа.Чтобы просто просмотреть перемещенный код, игнорирующий изменение отступа, будет достаточно режима игнорирования пробелов в обнаружении перемещения, реализованного в предыдущем патче. Однако вся окраска ходов, мотивированная коммитом 2e2d5ac (diff.c: цвет перемещал линии по-разному, 2017-06-30, Git v2.15.0), породил представление о том, что рецензент может доверять ходу "блока",
Поскольку существуют такие языки, как python, которые зависят от правильного относительного отступа для потока управления программы, игнорирование любого изменения пробела в блоке не будет выполнять обещания 2e2d5ac, что позволяет рецензентам уделять меньше внимания внутренней части блока, так как внутри рецензент хочет принять тот же программный поток.
Этот новый режим игнорирования пробелов примет это во внимание и будет позволять только те же самые изменения пробела на строку в каждом блоке. Этот патч допускает только те же изменения в начале строк.
Поскольку это режим пустого пространства, он сделан исключительным для других режимов пустого пространства при обнаружении движения.
Этот патч приносит некоторые проблемы, связанные с обнаружением блоков.
Нам нужна широкая сеть, чтобы поймать возможные сдвинутые линии, но затем нужно сузиться, чтобы проверить, не повреждены ли блоки. Рассмотрим этот пример (игнорируя размеры блоков):
- A
- B
- C
+ A
+ B
+ C
В начале блока при проверке, есть ли аналог для
A
, мы должны игнорировать все космические изменения. Однако в следующих строках мы должны проверить, не изменился ли отступ отступа.Проверка того, что изменение отступа не изменилось, выполняется путем вычисления изменения отступа по разнице в длине строки, и затем предполагается, что изменение происходит только в начале более длинной строки, общий хвост такой же. Вот почему тест содержит такие строки:
- <TAB> A
...
+ A <TAB>
...
Поскольку первая строка, начинающая блок, определяется с помощью функции сравнения, которая игнорирует пробелы в отличие от остальной части блока, где для сравнения учитывается дельта пробела, нам также нужно подумать о следующей ситуации:
- A
- B
- A
- B
+ A
+ B
+ A
+ B
При проверке, если первый
A
(оба в+
а также-
линии) является началом блока, мы должны проверить всеA
'и запишите все дельты пробелов, чтобы мы могли найти приведенный выше пример как один блок с отступом.