Ignoruj ​​zmiany białych znaków we wszystkich poleceniach git

26

Znalazłem mnóstwo stron, które wyjaśniają, jak git ostrzega cię o zmianie zakończenia linii, lub różne inne techniki, które zapobiegają zepsuciu całego pliku. Załóżmy, że jest już na to za późno - drzewo ma już zatwierdzenia, które przełączają zakończenia linii plików, więc git diffpokazuje odjęcie starego pliku, a następnie dodanie nowego pliku o tej samej treści

Szukam opcji konfiguracji git lub flagi wiersza polecenia, która każe diffpo prostu je zignorować - jeśli dwie linie różnią się tylko białymi spacjami, udawaj, że są takie same. Potrzebuję tej funkcji config / Flaga pracować dla wszystkiego, co opiera się na różnicach plików - diff, blamenawet merge/ rebaseidealnie - Chcę git, aby całkowicie ignorować końcowe białe znaki, zwłaszcza zakończeń linii. Jak mogę to zrobić?

Michał Mrożek
źródło

Odpowiedzi:

14

W przypadku diff git diff --ignore-space-at-eolpowinno wystarczyć. W przypadku różnic i winy można zignorować wszystkie zmiany białych znaków za pomocą -w: git diff -w, git blame -w.

Dla git applyi git rebasedokumentacja wspomina --ignore-whitespace.

Do scalenia wygląda na to, że potrzebujesz zewnętrznego narzędzia do scalania. Możesz użyć tego skryptu opakowania (niesprawdzonego), gdzie favorite-mergetooljest twoje ulubione narzędzie do scalania ; biegnij git -c mergetool.nocr.cmd=/path/to/wrapper/script merge. Wynik scalenia będzie w formacie uniksowym; jeśli wolisz inny format, przekonwertuj wszystko na inny format lub przekonwertuj $MERGEDpo scaleniu.

#!/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 "$@"

Aby zminimalizować problemy z mieszanymi zakończeniami linii, upewnij się, że pliki tekstowe są zadeklarowane jako takie .

Zobacz także Czy git-merge może ignorować różnice na końcu linii? na przepełnienie stosu.

Gilles „SO- przestań być zły”
źródło
Czy jest jakaś konfiguracja, aby zawsze używać flagi -w z git blame?
Thayne
@Thayne Nie o tym wiem. Możesz zdefiniować alias podobny do, bl = blame -wale nie możesz przedefiniować nazwy wbudowanych poleceń i nie widzę opcji konfiguracji, aby ustawić ją jako domyślną. Ale nie jestem ekspertem od gitów.
Gilles „SO- przestań być zły”
dla git status?
Ejaz