인내 알고리즘은 기본 알고리즘과 어떻게 다르며 git diff
언제 사용하고 싶습니까?
--histogram
"... 낮은 발생 공통 요소를 지원하기 위해 인내 알고리즘을 확장하는"매개 변수 도 있습니다. git-scm.com/docs/git-diff.html
인내 알고리즘은 기본 알고리즘과 어떻게 다르며 git diff
언제 사용하고 싶습니까?
--histogram
"... 낮은 발생 공통 요소를 지원하기 위해 인내 알고리즘을 확장하는"매개 변수 도 있습니다. git-scm.com/docs/git-diff.html
답변:
인내심 diff 알고리즘의 저자 인 Bram Cohen의 게시물을 읽을 수 있지만 인내심 diff 알고리즘을 잘 요약 한이 블로그 게시물 을 찾았 습니다 .
Patience Diff는 대신 텍스트에서 중요한 콘텐츠의 마커 또는 서명 역할을하는 저주파 고 콘텐츠 라인에 에너지를 집중시킵니다. 여전히 핵심은 LCS 기반의 차이점이지만, 시그니처 라인의 가장 긴 공통 하위 시퀀스 만 고려하므로 중요한 차이점이 있습니다.
양쪽에서 정확히 한 번만 나타나는 모든 줄을 찾은 다음 해당 줄에서 가장 긴 공통 하위 시퀀스를 수행하여 일치시킵니다.
언제 인내심 을 사용해야 합니까? 브람에 따르면, 인내심 차이는이 상황에 좋습니다 :
정말 나쁜 경우는 두 가지 버전이 급격히 확산되고 개발자가 패치 크기를 제어하지 않도록주의하지 않는 경우입니다. 이러한 상황에서 diff 알고리즘은 중괄호의 긴 섹션을 함께 일치한다는 점에서 때때로 '잘못된 정렬'이 될 수 있지만 한 버전의 함수 중괄호와 다른 버전의 다음 함수의 중괄호를 상관시킵니다. 이 상황은 매우 추악 하며, 그러한 것들이 가장 일관성있게 제시되어야하는 상황에서 완전히 사용할 수없는 충돌 파일이 발생할 수 있습니다.
인내 diff 알고리즘은 경우에 따라 더 나은 결과를 보여주는 느린 diff 알고리즘입니다.
다음 파일을 git에 체크인했다고 가정하십시오.
.foo1 {
margin: 0;
}
.bar {
margin: 0;
}
이제 섹션을 재정렬하고 새 줄을 추가하십시오.
.bar {
margin: 0;
}
.foo1 {
margin: 0;
color: green;
}
기본 diff 알고리즘은 섹션 제목이 변경되었다고 주장합니다.
$ git diff --diff-algorithm=myers
diff --git a/example.css b/example.css
index 7f1bd1e..6a64c6f 100755
--- a/example.css
+++ b/example.css
@@ -1,7 +1,8 @@
-.foo1 {
+.bar {
margin: 0;
}
-.bar {
+.foo1 {
margin: 0;
+ color: green;
}
인내심 차이가 더 직관적 인 결과를 보여주는 반면 :
$ git diff --diff-algorithm=patience
diff --git a/example.css b/example.css
index 7f1bd1e..6a64c6f 100755
--- a/example.css
+++ b/example.css
@@ -1,7 +1,8 @@
-.foo1 {
- margin: 0;
-}
-
.bar {
margin: 0;
}
+
+.foo1 {
+ margin: 0;
+ color: green;
+}
거기에 주관적 DIFF 품질의 좋은 토론은 여기 , 그리고 2.11 더 DIFF 휴리스틱을 모색하고있다 이눔 아 .