Игнорировать изменения пробелов во всех командах git

26

Я обнаружил множество сайтов, которые объясняют, как заставить git предупреждать вас, когда вы изменяете окончания строк, или различные другие методы, чтобы вы не испортили весь файл. Предположим, что для этого уже слишком поздно - в дереве уже есть коммиты, которые переключают окончания строк в файлах, поэтому git diffпоказывает вычитание старого файла с последующим добавлением нового файла с тем же содержимым

Я ищу параметр конфигурации git или флаг командной строки, который говорит diffпросто игнорировать их - если две строки отличаются только пробелами, притвориться, что они одинаковы. Мне нужен этот вариант конфигурации / флаг для работы за все , что полагается на различия файлов - diff, blameдаже merge/ в rebaseидеале - я хочу , gitчтобы полностью игнорировать конечные пробелы, в частности , строки окончаний. Как я могу это сделать?

Михаил Мрозек
источник

Ответы:

14

Для различий есть git diff --ignore-space-at-eol, что должно быть достаточно хорошо. Что касается различий и обвинений, вы можете игнорировать все изменения пробелов с помощью -w: git diff -w, git blame -w.

Для git applyи git rebaseдокументации упоминается --ignore-whitespace.

Для слияния похоже, что вам нужно использовать внешний инструмент слияния. Вы можете использовать этот скрипт-обертку (не проверено), где favorite-mergetoolнаходится ваш любимый инструмент слияния ; бежать git -c mergetool.nocr.cmd=/path/to/wrapper/script merge. Результат слияния будет в формате Unix; если вы предпочитаете другой формат, преобразуйте все в другой формат или $MERGEDпосле слияния.

#!/bin/sh
set -e
TEMP=$(mktemp)
tr -d '\013' <"$BASE" >"$TEMP"
mv -f "$TEMP" "$BASE"
TEMP=$(mktemp)
tr -d '\013' <"$LOCAL" >"$TEMP"
mv -f "$TEMP" "$LOCAL"
TEMP=$(mktemp)
tr -d '\013' <"$REMOTE" >"$TEMP"
mv -f "$TEMP" "$REMOTE"
favorite-mergetool "$@"

Чтобы свести к минимуму проблемы со смешанными окончаниями строк, убедитесь, что текстовые файлы объявлены как таковые .

Смотрите также Возможно ли git-merge игнорировать различия в конце строки? Переполнение стека.

Жиль "ТАК - перестань быть злым"
источник
Есть ли какая-либо конфигурация, чтобы всегда использовать флаг -w с git blame?
Тейн
@ Thayne Не то, что я знаю. Вы можете определить псевдоним как, bl = blame -wно вы не можете переопределить имя встроенных команд, и я не вижу опции конфигурации, чтобы сделать его по умолчанию. Но я не эксперт по мерзавцам.
Жиль "ТАК - перестань быть злым"
для git status?
Ejaz