2012-12-20 1 views
3

Subversion에서 작업 할 때 나는 항상 전에 svn update을 수행합니다. 충돌이있는 경우 업데이트를 수행 할 때 경고 메시지가 표시됩니다. 그런 다음 내 작업 디렉토리에서 filename.java, filename.java.mine, filename.java.r10filename.java.r13이 표시됩니다. 이러한 파일을 기반으로 충돌을 해결하고 해결 된 것으로 표시하고 커밋하는 방법을 파악합니다.Git에서 병합 충돌이 Subversion의 병합 충돌과 어떻게 비교됩니까?

나는 Git에 비교적 익숙하다. 그래서 나는 위의 워크 플로우와 동등한 것이 git을위한 것이라고 생각하고있다. git 명령으로 병합 충돌이 발생할 수 있습니까? 내 작업 디렉토리에 나타날 위의 파일과 동일한 파일이 있습니까?

답변

2

merge (그리고 pull 본질적 merge 다음 fetch 이후), cherry-pick, rebase 등을 포함하여 병합 충돌이 발생할 수 있습니다 git 하위 명령을 사용할 수 있습니다. git은 근본적으로 다른 방식으로 병합 충돌을 처리합니다. 서로 다른 버전의 개별 파일을 만드는 대신 세 가지 방식으로 병합 방정식의 어느 부분이 왔는지를 나타내는 구분 기호가 표시된 섹션이있는 단일 파일을 만듭니다. 따라서 충돌하는 파일을 편집하고 원하지 않는 섹션과 구분 기호를 제거하거나 어느 쪽이 맞지 않으면 적절한 수동으로 병합 된 하이브리드로 바꾸십시오. git addgit commit.

<<<<<<< 
stuff from your version of the file 
||||||| 
stuff from the common ancestor of the two 
======= 
stuff from the version you're merging in 
>>>>>>> 

당신이 diff3 -styled 충돌을 사용하지 않는 경우 : 다음과 같이 보일 문자 (당신이 diff3 형식으로 구성되어있는 경우, 때로는 |) 분리 문자는 7 <, =>의 순서입니다 마커의 경우 | 구분 기호와 공통 조상 행이 없습니다.

git help merge을 입력하면 자세한 내용을 볼 수 있습니다.

+0

차갑고, 나는 diff3 설정에 대해 몰랐습니다. 그럼이 파일은 내 작업 디렉토리의 파일을 덮어 씁니까? 커밋되지 않은 변경 사항은 어떻게됩니까? – mkasberg

+0

IIRC를 사용하면 커밋되지 않은 변경 사항이있을 때 병합 할 수 없습니다. 먼저 숨긴 다음 병합해야합니다. – jszakmeister

+0

@jszakmeister 그건 사실이 아니야. 병합 재료와 충돌하지 않는 커밋되지 않은 변경 사항이 있으면 성공합니다. 커밋되지 않은 변경 사항과의 충돌로 인해 병합이 실패 할 것이라고 생각합니다. – twalberg