web-dev-qa-db-ja.com

空白の競合のないマージ

約1000行のコードを変更し、行末から空白を削除し、タブの前にスペースを削除する大規模なコミットが発生するという問題があります。

また、このプロジェクトには約50のプルリクエストがあり、コミットがマージされるとすべて競合します。 gitをセットアップして、将来のコミットをマージするときに、そのうちの1つが単なる空白の変更である競合を無視する方法はありますか?

Git自体を変更したり、サードパーティのツールを使用したりすることはできませんが、フックを使用することは問題ありません。

163
callumacrae
 git merge -Xignore-all-space

または(より正確に)

 git merge -Xignore-space-change

マージ中にすべてのスペース関連の競合を無視するのに十分なはずです。

git diff を参照してください:

--ignore-space-change

空白の量の変化を無視します。
これは、行末の空白を無視し、1つ以上の空白文字の他のすべてのシーケンスを同等と見なします。

--ignore-all-space

行を比較するときに空白を無視します。
これは、ある行に空白があり、他の行に空白がない場合でも、違いを無視します。

ks1322 は、コメントに適切なアドバイスを追加します。

--no-commitとマージし、実際のコミットの前にマージを確認する価値があります


OP Callum Macrae は、その場合、マージが中断せずに進行し、プルリクエストパッチに含まれる末尾のスペースがローカルファイルに適用されることを報告します。
ただし、OPは、後続のスペースを処理する事前コミットフックを使用します。
this oneこちらを参照 に似ていると思います)。


OPの事前コミットフックは ここで参照

末尾の空白を削除することに加えて、タブの前に1〜3個のスペースを削除し(タブ幅を4に設定しています)、EOLを追加します。
EOLを追加するコードがWindowsのファイルを削除するという報告がありましたが、複製することができませんでした。

222
VonC