`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 config interactive.diffFilter diff-highlight git diff без цвета

Также я попробовал:

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.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проблема ;-)

Другие вопросы по тегам