it-source

git diff -- patientity는 무엇을 위한 것일까요?

criticalcode 2023. 10. 18. 22:12
반응형

git diff -- patientity는 무엇을 위한 것일까요?

인내 알고리즘이 기본값과 어떻게 다릅니까?git diff알고리즘, 그리고 언제 사용하고 싶은데요?

인내 diff 알고리즘의 저자인 Bram Cohen의 게시물을 읽을 수 있지만, 저는 인내 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;
+}

여기서 주관적 diffurious에 대한 좋은 논의가 있고 git 2.11은 diffurious를 더 탐색하고 있습니다.

인내심 차이 알고리즘에는 아직 알려진 병리학적 사례가 있습니다.

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

반응형