KDIFF 병합에서 A, B 및 C는 무엇입니까?


78

내 코드와 다른 사람의 코드를 병합 할 때 왜 세 가지 선택이 주어 집니까? 내 코드, 다른 사람의 코드 및 아래 출력이 있어야하지 않습니까? KDIFF 문서는 이해하는 데 도움이되지 않습니다.

답변:


35

3 방향 병합을 수행하는 것처럼 들리 므로 A는 B와 C가 기반으로하는 기본 개정이어야하며 B는 그들의 것이고 C는 당신의 것입니다 (나는 믿습니다; B와 C는 반대 일 수 있습니다).


2
기본 개정은 무엇입니까? 어떤 경우에는 도움이됩니까?
smuggledPancakes

6
@ user464095 : KDiff의 경우 B와 C가 모두 수정하는 개정판이라고 생각합니다. 따라서 B를베이스 (A), C를베이스 (A), B와 C의 변화를 서로 비교할 수 있습니다. 이렇게하면 B 또는 C의 변경 사항을 사용하거나 원본 (A)으로 되돌려 충돌을 해결할 수 있습니다.
eldarerathis

2
아직도 이해가 안되는데 좀 더 자세히 설명해 주 시겠어요?
smuggledPancakes

12
글쎄, 당신과 다른 개발자가 동일한 코드에 대해 충돌하는 변경을하는 경우를 고려하십시오. 일반적으로 원본 파일의 컨텍스트를 파악하는 것이 도움이되므로 둘 중 하나가 이전 기능을 중단하는지 알 수 있습니다. 파일을 다른 개발자의 파일과 비교하고 충돌을 해결 한 다음 원본과 비교해도되지만 3 방향 비교는 더 적은 단계로 동일한 기능을 수행합니다.
eldarerathis

@gbarry 가이 관련 SO 스레드 에서 설명했듯이 BASE 개정은 적어도 Subversion을 사용하여 저장소에서 마지막으로 다운로드 한 것입니다. 그는 또한 편집 충돌과 이것이 BASE 및 HEAD 개정에 미치는 영향에 대해 이야기합니다.
hotshot309

75

A 는 병합 대상이 기반으로하는 버전을 나타냅니다. 지점에서 트렁크로 병합하면 'A'가 이전 트렁크 버전이됩니다.

B 는 로컬 변경 사항을 포함하여 현재 로컬 트렁크 폴더에있는 것입니다.

C 는 B 위에 병합하려는 버전입니다.


B는 숨김 적용 전 또는 숨김 적용 후를 의미합니까?
기분이 좋고 프로그래밍

3
병합 중에는 숨김 변경 사항이 적용되지 않습니다. 명시 적으로 해제 될 때까지 숨겨져 있습니다.
Th 00 mÄ s jul.

13

A는 B와 C를 자식으로하는 부모 개정판 입니다.
즉, B에는 user1 / repo1에 의해 A에서 수행 된 변경 사항이 포함 되고 C에도 A에 대한 변경 사항이 포함되지만 다른 사용자 ( user2 / repo2 )

kdiff는 b 또는 c (또는 둘 다 가져 오기)에서 수정을 선택하거나 부모에서 'A'를 선택할 수있는 옵션을 제공합니다.


11

(BASE) ‐‐> 현재 원격 저장소에있는 원본 파일.
B (로컬) ‐‐> 파일. A.
C (REMOTE) ‐‐> 해당 파일 과 비교 한 변경 사항 만 표시됩니다 . 이것은 A에 비해 그들의 변화만을 보여줍니다.

변경 사항이 다른 코드 라인에있는 경우 B와 C 모두에서 가져옵니다. 변경 사항이 동일한 코드 라인에있는 경우 (충돌) B 또는 C에서 가져옵니다.


3

내가했다면 git rebase내 관찰은 다음과 같습니다. C- 로컬 에서 my_branch에 있는 것입니다 (즉, 리베이스가 시작되고 충돌이 발생하기 전에 내 편집기에서 보였습니다). B는 - 지점 나는 리베이스했다 my_branch를 (예를 들어 마스터 예를 들어 지점) (A)의 상단에 - B & C의 기준 개정 (안했던 문제가 나에게 너무 많은이 경우)


예, B & C가 병합과 리베이스 사이에 반전 된 것 같습니다
pdem
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.