IT story

`git diff --patience`는 무엇입니까?

hot-time 2020. 4. 30. 07:32
반응형

`git diff --patience`는 무엇입니까?


인내 알고리즘은 기본 알고리즘과 어떻게 다르며 git diff언제 사용하고 싶습니까?


인내심 diff 알고리즘의 저자 인 Bram Cohen의 게시물을 읽을 수 있지만 인내심 diff 알고리즘을 잘 요약 한이 블로그 게시물찾았 습니다 .

Patience Diff는 대신 텍스트에서 중요한 콘텐츠의 마커 또는 서명 역할을하는 저주파 고 콘텐츠 라인에 에너지를 집중시킵니다. 여전히 핵심은 LCS 기반의 차이점이지만, 시그니처 라인의 가장 긴 공통 하위 시퀀스 만 고려하므로 중요한 차이점이 있습니다.

양쪽에서 정확히 한 번만 나타나는 모든 줄을 찾은 다음 해당 줄에서 가장 긴 공통 하위 시퀀스를 수행하여 일치시킵니다.

언제 인내심 사용해야 합니까? 브람에 따르면, 인내심 차이는이 상황에 좋습니다 :

정말 나쁜 경우는 두 가지 버전이 급격히 확산되고 개발자가 패치 크기를 제어하지 않도록주의하지 않는 경우입니다. 이러한 상황에서 diff 알고리즘은 긴 괄호의 긴 섹션을 ​​함께 일치한다는 점에서 때때로 '잘못된 정렬'이 될 수 있지만 한 버전의 함수 중괄호와 다른 버전의 다음 함수의 중괄호를 상관시킵니다. 이 상황은 매우 추악 하며, 그러한 것들이 가장 일관성있게 제시되어야하는 상황에서 완전히 사용할 수없는 충돌 파일이 발생할 수 있습니다.


병합에도 사용할 수 있습니다 (XML 충돌에 대해서는 실제로 잘 작동했습니다).

git merge --strategy-option=patience ...

인내 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 휴리스틱을 모색하고있다 이눔 아 .

참고 것이 인내심은 diff 알고리즘은 여전히 몇 가지 알려진 병적 인 경우가 있습니다 .

참고 URL : https://stackoverflow.com/questions/4045017/what-is-git-diff-patience-for

반응형