`git config interactive.diffFilter diff-highlight`: одинаковые различия по линиям - и без цвета
После git config --global interactive.diffFilter diff-highlight
мой .gitconfig
:
# This is Git's per-user configuration file.
[user]
name = Vitaly Zdanevich
email = vitaly.zdanevich@xxx.com
[core]
excludesfile = /Users/vitaly/.gitignore_global
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge --skip -- %f
process = git-lfs filter-process --skip
required = true
[diff]
tool = vimdiff
context = 20
[difftool]
prompt = false
[interactive]
diffFilter = diff-highlight
Но в git commit -p
а также git add -p
Я вижу тот же diff построчно без цвета по умолчанию terminal.app
:
Также я попробовал:
git -c interactive.diffFilter="git diff --color-words" add -p
И получить:
fatal: mismatched output from interactive.diffFilter
hint: Your filter must maintain a one-to-one correspondence
hint: between its input and output lines.
Моя версия git 2.17.2 (Apple Git-113)
на macOS 10.14.1
из официальных инструментов командной строки, я предпочитаю простоту, а не от Brew.
2 ответа
Несмотря на то, что Git 2.26 помогает, я бы все же рекомендовал более новую версию Git.
Те, кто использует diff-фильтр, заметили одну или две регрессии в коде, который анализирует вывод diff во встроенной версии «», которая была исправлена в Git 2.38 (3 квартал 2022 г.).
См. , , коммит b6633a0 (01 сентября 2022 г.) Йоханнеса Шинделина (
dscho
).
(Объединено Junio C Hamano --
gitster
-- в коммите fb094cb, 9 сентября 2022 г.)
коммит fd3f7f6: изящно обрабатывать неразборчивые заголовки кусков в цветных различиях
Докладчик: Филипп Блен
Автор: Филипп Вуд
Подпись: Йоханнес Шинделин
В этой теме Филипп Блейн сообщил, что встроенный( ) команда не работает, когда ее просят использоватьчтобы раскрасить диф.
Причина в том, что этот инструмент создает цветные различия с заголовком фрагмента, который не содержит анализируемого
@@ ... @@
информацию о диапазоне строк, и поэтому мы не можем обнаружить какую-либо часть в этом заголовке, которая идет после диапазона строк.Как предложил Филлип Вуд, давайте примем это за четкий индикатор того, что мы должны показывать заголовки фрагментов дословно.
Вот что такое Perl-версия интерактивногоadd
командование тоже.
И:
коммит 0a10167: игнорировать грязные подмодули
Подписал: Йоханнес Шинделин
Благодаря тому, что всегда работает и с
--numstat
вариант (последний с--ignore-submodules=dirty
) еще до того, как будет сгенерировано какое-либо реальное различие для анализа, Perl-версия(manman ) просто игнорировал грязные подмодули и даже не предлагал их для постановки.Однако встроенный вариант не использовал этот флаг, поскольку пытается выполнить только одну команду, пропуская ненужные.
diff-index
/diff-files
вызов варианта Perl и, следовательно, точно повторяет то, что делает код Perl, только после того, как он сгенерирует и проанализирует реальный diff.Это вызывает проблему при запуске встроенного метода with, поскольку этот раскрашиватель diff всегда вставляет пустую строку перед заголовком diff, чтобы гарантировать, что он создает 4 строки, как ожидается (эквивалент неокрашенного
diff
, ,---
и+++
линии).
Ноgit diff-files
(человек ) не производит никакогоindex
строка для грязных подмодулей.Основная проблема заключается даже не в несоответствии строк, а в том, что
git add -p
представляет diffs для грязных подмодулей: для них нет ничего, что можно было бы поставить.Давайте исправим эту ошибку и научим встроенный
add -p
также игнорировать грязные подмодули.
Это, кстати, также исправляетdiff-so-fancy
проблема ;-)