Игнорировать изменения пробелов во всех командах 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.