Ігноруйте зміни пробілів у всіх командах 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?
Thayne

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

для git status?
Еяз
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.