Ignorer les changements d'espaces blancs dans toutes les commandes git

26

J'ai trouvé des tonnes de sites qui expliquent comment git vous avertit lorsque vous modifiez des fins de ligne, ou diverses autres techniques pour vous empêcher de gâcher un fichier entier. Supposons qu'il soit trop tard pour cela - l'arborescence a déjà des validations qui basculent les fins de ligne des fichiers, git diffmontre donc la soustraction de l'ancien fichier suivie de l'ajout d'un nouveau fichier avec le même contenu

Je cherche une option de configuration git ou un indicateur de ligne de commande qui dit diffde simplement ignorer ceux-ci - si deux lignes ne diffèrent que par des espaces, faites comme si elles étaient les mêmes. J'ai besoin de cette option de configuration / drapeau travail pour tout ce qui repose sur les différences de fichiers - diff, blamemême merge/ rebaseidéalement - Je veux gitignorer complètement les espaces de fin, en particulier les fins de ligne. Comment puis je faire ça?

Michael Mrozek
la source

Réponses:

14

Pour diff, il y a git diff --ignore-space-at-eol, ce qui devrait être assez bon. Pour diff et blâme, vous pouvez ignorer tous les changements d'espaces avec -w: git diff -w, git blame -w.

Pour git applyet git rebase, la documentation mentionne --ignore-whitespace.

Pour la fusion, il semble que vous devez utiliser un outil de fusion externe. Vous pouvez utiliser ce script wrapper (non testé), où favorite-mergetoolest votre outil de fusion préféré ; courir git -c mergetool.nocr.cmd=/path/to/wrapper/script merge. Le résultat de la fusion sera au format Unix; si vous préférez un autre format, convertissez tout dans ce format différent ou convertissez-le $MERGEDaprès la fusion.

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

Pour minimiser les problèmes avec les fins de ligne mixtes, assurez-vous que les fichiers texte sont déclarés comme tels .

Voir aussi Est-il possible pour git-merge d'ignorer les différences de fin de ligne? sur Stack Overflow.

Gilles 'SO- arrête d'être méchant'
la source
Existe-t-il une configuration pour toujours utiliser l'indicateur -w avec git blame?
Thayne
@Thayne Pas que je sache. Vous pouvez définir un alias comme bl = blame -wmais vous ne pouvez pas redéfinir le nom des commandes intégrées et je ne vois pas d'option de configuration pour en faire la valeur par défaut. Mais je ne suis pas un expert git.
Gilles 'SO- arrête d'être méchant'
pour git status?
Ejaz