삽입된 청크를 올바르게 표시하려면 diff(또는 git diff)를 가져오세요.

삽입된 청크를 올바르게 표시하려면 diff(또는 git diff)를 가져오세요.

두 개의 파일이 있다고 가정 해 보겠습니다. 첫 번째 내용은 다음과 같습니다.

line 1
foo
line 2

line 1
bar
line 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

이는 삽입된 중간 섹션을 올바르게 반영하지 않습니다. 대신 두 번째 섹션이 변경되고 새 섹션이 끝에 추가된 것처럼 보입니다(알고리즘이 첫 번째 줄과 다른 줄에서 시작하기 때문입니다).

이 출력을 표시하기 위해 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가 끌어오기 요청 및 비교를 위해 웹 UI에서 diff를 활성화한 것 같지는 않지만 로컬에서 수행할 수는 있습니다. --word-diff이 수준의 세분성이 필요한 경우 이를 조합하여 사용하는 것이 좋습니다.

자세한 내용을 보려면 GitHub 블로그를 방문하세요.https://github.com/blog/2188-git-2-9-has-been-released

답변2

환자 차이 알고리즘( git diff --patience)은 보다 자연스러운 결과를 제공할 수 있지만 모든 경우에 해당되는 것은 아닙니다.

답변3

경우에 따라 명령 git diff --word-diff(또는 --color-words)을 사용하면 더 나은 결과를 얻을 수 있습니다.

관련 정보