1. ホーム
  2. git

[解決済み] ホワイトスペースの競合を回避したマージ

2022-02-18 11:38:31

質問

行末の空白を削除し、タブの前の空白を削除する、約1000行のコードを変更する大きなコミットがあるのですが、問題があります。

また、このプロジェクトには約50のプルリクエストがあり、私のコミットがマージされると、これらすべてが競合することになります。将来のコミットをマージするときに、空白の変更だけのコンフリクトを無視するようにgitを設定する方法はありますか?

git自体の改造やサードパーティツールの使用は不可能ですが、フックを使用するのは問題ありません。

どのように解決するのですか?

 git merge -Xignore-all-space

または(より正確には)

 git merge -Xignore-space-change

は、マージ中にスペースに関連するすべてのコンフリクトを無視するのに十分であるべきです。

参照 git diff :

--ignore-space-change

空白の量の変化を無視する。
これは、行末の空白を無視し、それ以外の1文字以上の空白の連続をすべて等価と見なします。

--ignore-all-space

行の比較時に空白を無視する。
これは、一方の行に空白があり、他方の行には空白がない場合でも、その差を無視します。

ks1322 は、コメントで良いアドバイスをしています。

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


OP カルム・マクレー によると、この場合、マージは中断されずに進行し、プルリクエストパッチに含まれる末尾のスペースがローカルファイルに適用されるとのことです。
しかし、OPはpre-commit hookを使用し、このtrailing spaceを処理します。
(と少し似ていると思います。 これ また こちらをご覧ください ).


OPのコミット前フックは こちらをご参照ください :

末尾の空白を削除するだけでなく、タブの前に1~3個のスペースを削除し(私はタブ幅を4に設定しています)、EOLを追加しています。
EOLを追加するコードは、Windowsでファイルを削除するという報告を受けたことがありますが、再現できていません。