gitの違いの色付け

gitの違いの色付け

設定

マージの前後のdiffを表示して、マージコミットが正常に解決されたことを確認するスクリプトを作成しました。たとえば、私の記録が次のような場合:

* 5c8cb0d2 merge result
|\
| * 3685c2ea branch2 commit b
| * 556dcd25 branch2 commit a
* | bb72182a branch1 commit
|/
* 45d827a3 common ancestor

45d827a3 common ancestorまずbb72182a branch1 commit(branch1に元の変更を適用)と比較し、次に(branch2がBranch1によってどのように「強化」されるかを示します)3685c2ea branch2 commit bと比較します。5c8cb0d2 merge result

理想的には、2つのdiffは同じでなければなりませんが、競合がある場合(たとえば、ブランチ2がブランチ1で使用される関数の名前が変更された場合)、マージコミットでこれを解決する必要があります。マージコミットでこれらの問題が正しく解決され、誤って問題が発生しないことを確認するには、次の手順を実行します。これら2つについて比較してみました

質問

結果の違いの色はあまり良くありません。たとえば、ブランチ2に追加された行を誤って削除すると、元のdiffにはこれらの行は含まれていませんが、新しいdiffには含まれているため緑色で表示されます。つまり、行の先頭に基づいて次の表を適用する必要があります。

  • ++=緑(新しいdiffによって行が追加されましたが、古いdiffでは変更されませんでした)
  • +-=赤(新しいdiffでは行は削除されましたが、古いdiffでは変更されませんでした)
  • -+=赤(新しいdiffでは行は変更されていませんが、古いdiffでは追加されました)
  • --=緑(行は新しいdiffでは変更されていませんが、古いdiffでは削除されました)
  • +=白(新しいコンテキスト行のみ)
  • -=白(以前のコンテキスト行のみ)

部分的な解決策

を使用して1つのルールを実装できますが、sedすべてのルールを一度に適用する方法がわかりません。たとえば、ルールを実装すると、次のようになります-+

git diff ... | { esc=$(printf '\033'); sed -E "s/(^\-\+.*)/${esc}[0;31m\1${esc}[0m/"; }

ベストアンサー1

おすすめ記事