行末を変更しているときにgitが警告する方法や、ファイル全体をめちゃくちゃにしないようにするためのその他のテクニックを説明しているサイトがたくさんあります。それでは遅すぎると仮定します-ツリーにはすでにファイルの行末を切り替えるコミットがあるので、git diff
は、古いファイルを差し引いた後、同じ内容の新しいファイルを追加することを示しています。
Git構成オプションまたはdiff
にそれらを無視するように指示するコマンドラインフラグを探しています。2つの行が空白文字のみ異なる場合は、それらが同じであると偽ってください。ファイルの違いに依存するものすべてで機能するために、この構成オプション/フラグが必要です-diff
、blame
、さらにはmerge
/rebase
も理想的には-I git
に、末尾の空白、特に行末を完全に無視させたい。どうやってやるの?
Diffにはgit diff --ignore-space-at-eol
があり、これで十分です。 diffとblameの場合、-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 "$@"
行末が混在する問題を最小限に抑えるには、 テキストファイルがそのように宣言されている であることを確認してください。