web-dev-qa-db-ja.com

すべてのgitコマンドで空白の変更を無視する

行末を変更しているときにgitが警告する方法や、ファイル全体をめちゃくちゃにしないようにするためのその他のテクニックを説明しているサイトがたくさんあります。それでは遅すぎると仮定します-ツリーにはすでにファイルの行末を切り替えるコミットがあるので、git diffは、古いファイルを差し引いた後、同じ内容の新しいファイルを追加することを示しています。

Git構成オプションまたはdiffにそれらを無視するように指示するコマンドラインフラグを探しています。2つの行が空白文字のみ異なる場合は、それらが同じであると偽ってください。ファイルの違いに依存するものすべてで機能するために、この構成オプション/フラグが必要です-diffblame、さらにはmerge/rebaseも理想的には-I gitに、末尾の空白、特に行末を完全に無視させたい。どうやってやるの?

26
Michael Mrozek

Diffにはgit diff --ignore-space-at-eolがあり、これで十分です。 diffとblameの場合、-wgit diff -wgit 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が行末の違いを無視することは可能ですか? .