Ignorar alterações de espaços em branco em todos os comandos git

26

Eu encontrei vários sites que explicam como o git avisa quando você está alterando as terminações de linha ou diversas outras técnicas para impedir que você estrague um arquivo inteiro. Suponha que seja tarde demais para isso - a árvore já possui confirmações que alternam as terminações de linha dos arquivos, para git diffmostrar a subtração do arquivo antigo seguida pela adição de um novo arquivo com o mesmo conteúdo

Estou procurando uma opção de configuração do git ou um sinalizador da linha de comando que diga diffapenas para ignorá-los - se duas linhas diferem apenas pelo espaço em branco, finja que são iguais. Eu preciso esta opção config / bandeira para o trabalho para qualquer coisa que se baseia em diferenças de arquivo - diff, blamemesmo merge/ rebaseidealmente - Eu quero gitignorar completamente o espaço em branco à direita, particularmente finais de linha. Como eu posso fazer isso?

Michael Mrozek
fonte

Respostas:

14

Para diff, há git diff --ignore-space-at-eol, o que deve ser bom o suficiente. Para diff e culpa, você pode ignorar todas as alterações de espaço em branco com -w: git diff -w, git blame -w.

Para git applye git rebase, a documentação menciona --ignore-whitespace.

Para mesclar, parece que você precisa usar uma ferramenta de mesclagem externa. Você pode usar esse script de wrapper (não testado), onde favorite-mergetoolé sua ferramenta de mesclagem favorita ; correr git -c mergetool.nocr.cmd=/path/to/wrapper/script merge. O resultado da mesclagem estará no formato unix; se você preferir outro formato, converta tudo para esse formato diferente ou $MERGEDdepois da mesclagem.

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

Para minimizar problemas com terminações de linhas mistas, verifique se os arquivos de texto estão declarados como tais .

Veja também É possível que o git-merge ignore as diferenças de final de linha? no estouro de pilha.

Gilles 'SO- parar de ser mau'
fonte
Existe alguma configuração para sempre usar o sinalizador -w com culpa do git?
Thayne
@ Thayne Não que eu saiba. Você pode definir um alias como, bl = blame -wmas não pode redefinir o nome dos comandos internos e não vejo uma opção de configuração para torná-lo o padrão. Mas eu não sou um especialista em git.
Gilles 'SO- stop be evil'
para git status?
Ejaz