![diff3 병합 조건이 잘 정의되어 있는지 어떻게 알 수 있나요?](https://linux55.com/image/141880/diff3%20%EB%B3%91%ED%95%A9%20%EC%A1%B0%EA%B1%B4%EC%9D%B4%20%EC%9E%98%20%EC%A0%95%EC%9D%98%EB%90%98%EC%96%B4%20%EC%9E%88%EB%8A%94%EC%A7%80%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EC%95%8C%20%EC%88%98%20%EC%9E%88%EB%82%98%EC%9A%94%3F.png)
존재하다디퓨틸 매뉴얼
diff3 mine older yours
매개변수가 알파벳 순서로 되어 있다는 점을 참고하면 순서를 기억할 수 있습니다.
이를 자신의 결과에서 이전 결과를 빼고 그 결과를 내 결과에 추가하거나 이를 내 변경 사항에 병합하여 이전 변경 사항을 사용자의 결과에 병합하는 것으로 생각할 수 있습니다. 이 병합은 다음과 같은 경우 잘 정의됩니다.내 것은 각 변경 사항 근처의 이전 것과 일치합니다.. 이것은 사실이 아니다세 가지 입력 파일이 모두 다른 경우또는나이만 다를 때;우리는 이를 갈등이라고 부릅니다. 세 가지 입력 파일이 모두 다른 경우 충돌을 중첩이라고 합니다.
...
'-e', '-3' 및 '-x' 옵션만 선택병합되지 않은 변경사항, 즉 내 변경사항이 귀하의 변경사항과 다릅니다.;그들은 무시한다옛날 것부터 너 것까지, 나와 너의 것 똑같아, 왜냐하면 그러한 변경 사항이 이미 병합되었다고 가정하기 때문입니다.
"각 변경 사항 근처의 내 것과 오래된 일치"는 무엇을 의미합니까?
"오래된 것만 다를 때"는 내 것이 당신과 같지만 옛 것과 다르다는 뜻인가요? 합치기 쉽지 않죠? 내 것을 사용해도 되나요, 아니면 당신의 것을 사용해도 되나요? 이 경우 병합이 명확하게 정의되지 않은 이유는 무엇입니까?
세 가지 사례가 가능한 모든 상황을 다루는 방법:
"각 변화 근처에서 내 것과 오래된 것이 일치할 때"
"세 개의 입력 파일이 모두 다른 경우"
"나이만 다를 때"?
"낡은 것에서 너의 것으로 바뀐 것, 내 것도 너 것과 같다"는 것은 "낡은 것만 다를 때"와 같은 것인가?
감사해요.
답변1
"각 변경 사항 근처의 내 것과 오래된 일치"는 무엇을 의미합니까?
"이러한 모든 변경 근처에서 my and old match"는 "older"와 "your" 사이의 모든 변경을 고려할 때 변경의 컨텍스트를 "my"에서도 찾을 수 있음을 의미합니다. 즉, 모든 사람이 "old"와 "yours" 사이를 변경하는 한 "내 것"과 "old"는 동일합니다. 고려하다
mine other yours
------------------------------------------------
Some text Some text Some text
Some more text Some more test Changed text
Continues Continues Continues
Mine changes This is gone This is gone
The file ends The file ends The file ends
한 줄은 "other"와 "my" 사이에 다르며 다른 줄은 "other"와 "your" 사이에 다릅니다. "other"에서 "your"로의 변경을 살펴보면 "my"에서 동일한 컨텍스트를 찾을 수 있으므로 변경 사항이 모호함이나 충돌 없이 "my"에 적용될 수 있습니다.
"오래된 것만 다를 때"는 내 것이 당신과 같지만 옛 것과 다르다는 뜻인가요?
예.
합치기 쉽지 않죠? 내 것을 사용해도 되나요, 아니면 당신의 것을 사용해도 되나요? 이 경우 병합이 명확하게 정의되지 않은 이유는 무엇입니까?
"잘 정의된"의 정의는 "older"에서 "yours"로 변경된 컨텍스트가 "mine"의 컨텍스트와 동일하다는 것입니다. "my"와 "your"가 "old"와 동일하고 다른 경우 정의상 변경 사항이 모호합니다.
놀랍게 보일 수도 있지만 3방향 병합의 기본 원칙은 충돌로 인해 동일한 콘텐츠가 발생하더라도 사용자가 이를 식별하고 확인해야 한다는 것입니다. 예시는 없지만 "mine"과 "your"의 특정 행이 동일하지만 다른 변경 사항이 병합되면 병합된 결과의 현재 상태는 이상적이지 않습니다.
다르게 생각하면 3방향 병합의 목적은 서로 다른 두 가지 기록, 즉 "오래된"에서 "내 것"으로의 역사와 "오래된"에서 "당신의 것"으로의 역사를 조화시키는 것입니다. 두 개의 이력이 동일한 내용에 도달하더라도 맹목적으로 적용하기보다는 재평가가 필요합니다.
개발자는 , 및 옵션을 사용하여 diff3
이러한 변경 사항을 자주 적용해야 한다는 것을 알고 있습니다 .-e
-3
-x
이 세 가지 시나리오는 가능한 모든 시나리오를 어떻게 다루나요?
첫 번째 사례는 전체적인 분석을 기술하고 있지만, 나머지 두 사례는 개별 변화의 맥락에서 이해해야 한다고 생각합니다. 각 변경 사항("이전"에서 "귀하의"까지)에 대해 본 세 가지 사례를 모두 고려하면 다음과 같습니다("이전"과 "귀하의"는 다르다는 점을 기억하세요).
- "my"와 "old"는 같습니다
- "내 것"은 "오래된 것"과 다르고 "내 것"은 "당신의"와 다릅니다
- '내 것'과 '늙은 것'은 다르지만 '내 것'과 '너의 것'은 같다
진리표를 고려하십시오.
mine == older mine == yours older == yours Case
--------------------------------------------------------
Yes Yes Yes N/A
Yes Yes No Imp.
Yes No Yes N/A
Yes No No 1
No Yes Yes N/A
No Yes No 3
No No Yes N/A
No No No 2
N/A는 해당 사례가 고려되지 않음을 의미합니다. "이전"에서 "귀하의"로 변경 사항이 없습니다. 꼬마 도깨비. 이는 이러한 상황이 불가능하다는 것을 의미합니다(평등의 전이성을 통해). 이는 세 가지 시나리오가 모든 가능성을 포괄하기에 충분하다는 것을 보여줍니다.
"낡은 것에서 너의 것으로 바뀐 것, 내 것도 너 것과 같다"는 것은 "낡은 것만 다를 때"와 같은 것인가?
예.
답변2
이는 각각에 명확하게 정의되어 mine
있으며 yours
변경이므로 older
텍스트를 제거하거나 다른 위치에 텍스트를 추가하지만 동일한 텍스트는 변경하지 않습니다.
즉, 우리 모두가 동일한 것을 (다른 방식으로) 변경하거나 동일한 위치에 무언가를 추가하면 이를 어떤 순서로 배치할지 모르므로 컴퓨터는 무엇을 원하는지 알 수 없습니다.