挿入されたチャンクを正しく表示するには、diff(またはgit diff)を取得します。

挿入されたチャンクを正しく表示するには、diff(またはgit diff)を取得します。

2つのファイルがあるとしましょう。最初の内容は次のとおりです。

line 1
foo
line 2

line 1
bar
line 2

2つ目は途中に新しいセクションを挿入するので、次のようになります。

line 1
foo
line 2

line 1
new text
line 2

line 1
bar
line 2

「diff -u」を実行すると、次のような出力が表示されます。

--- file1   2013-06-25 16:27:43.170231844 -0500
+++ file2   2013-06-25 16:27:59.218757056 -0500
@@ -1,7 +1,11 @@
line 1
foo
line 2

line 1
+new text
+line 2
+
+line 1
bar
line 2

これは挿入された中間セクションを正しく反映しません。代わりに、2番目のセクションが変更され、新しいセクションが最後に追加されたように見えます(アルゴリズムが最初の行とは異なる行から始まるため)。

この出力を表示するためにdiff(単独またはgit diffを使用)を取得する方法はありますか?

--- file1   2013-06-25 16:27:43.170231844 -0500
+++ file2   2013-06-25 16:27:59.218757056 -0500
@@ -1,7 +1,11 @@
line 1
foo
line 2
+
+line 1
+new text
+line 2

line 1
bar
line 2

これは、誰かがレビューできるようにパッチを作成する際に主に問題になります。デフォルトの動作は、発生した実際の変更を反映しません。

ベストアンサー1

Git 2.9は今年初めにリリースされ、コマンド--compaction-heuristicに実験的なフラグが含まれていましたgit diff

2.9では、Gitのdiffエンジンは新しい経験的方法を学びました。つまり、空行のブロック境界を維持しようとし、空行に達するまでブロックの下部が前のコンテキストの下部と一致する限り、ブロックを「上に」移動します。

GitHubがプルリクエストと比較のためにWeb UIでdiffを有効にしたようではありませんが、ローカルで実行できます。--word-diffこのレベルの粒度が必要な場合は、それらを組み合わせて使用​​することをお勧めします。

詳細については、GitHubブログをご覧ください。https://github.com/blog/2188-git-2-9-has-been-released

おすすめ記事