vimdiff 및 병합 충돌


14

소스 제어 하에서 브랜치를 병합 할 때 종종 다른 개발자와의 병합 충돌 문제가 있습니다.

내가 알고 우리가 소스 제어에 대한 DIFF 코드 변경에 vimdiff 사용할 수 있습니다 뿐만 아니라, 우리가 도움을 해결 병합 충돌 충돌이 vimdiff 사용할 수있는 방법이있다.

개인적으로 나는 자식에 더 관심이 있지만 다른 소스 제어 도구 / 시스템에 대한 플러그인 / 기술이 있는지 이해하는 것이 유용 할 것입니다.


Meld 에게 시도해 본 적이 있습니까?
Eric Sabelhaus

1
@EricSabelhaus : 충돌을 해결하는 데 vimdiff보다 낫습니까? 이 사이트는 vim에 대한 질문 / 답변에 관한 것입니다.
Martin York

내가 생각하는 유스 케이스에 달려 있습니다. 원격으로 사는 코드를 작업하고 있다면 vimdiff를 사용하는 것이 가장 확실합니다. 개발자 컴퓨터에서 로컬로 작업하는 경우 개발자가 복잡한 3 방향 병합을 수행하는 데 도움이되는 풍부한 기능의 UI를 제공하므로 Meld를 ​​사용합니다.
에릭 사벨 하우스

1
@EricSabelhaus : 나에게이 용어 feature rich UI는 오해의 소지가 있습니다. vimdiff에는 멋진 UI가 없을 수 있지만 기능이 풍부합니다. 또한 vim이 내가 사용한 모든 GUI 편집기보다 훨씬 생산적인 환경을 찾았습니다 (그러나 오랫동안 사용해 왔으며 가파른 학습 곡선이었습니다). Meld이 vim이하지 않는 일을하더라도보고있는 동안 가치가있는 것이 더 궁금합니다.
Martin York

더 강력한 기능 세트가 있는지 여부를 구체적으로 말할 수는 없지만 vimdiff와 동일한 영역에 있습니다.
에릭 사벨 하우스

답변:


18

나는 보통 커맨드 라인에서 git을 사용한다.

그러나 병합 충돌이 발생하면 Vim을 사용하여 문제를 해결합니다 (개인적으로 도망자 플러그인으로 수행). 참고 : 도망자는 Vim 내에서 많은 자식 조작에 좋습니다. 내가 가장 좋아하는 기능은 병합 충돌의 3 가지 방법입니다.

git은 git mergetool을 통해 vimdiff에서 이것을 지원합니다. 도망자를 설치했지만 수동으로 설정할 수 있습니다 (감사합니다 @Jay Thompson).

수동 설정 :

git config --global merge.tool vimdiff
git mergetool <file with conflicts>

출력은 아래에 설명 된 것과 약간 다릅니다 (개인적으로 이것을 사용하지는 않았습니다). 그러나 원칙은 동일하지만 결과를 포함하는 맨 아래에 네 번째 창이 있습니다.

여기에 이미지 설명을 입력하십시오

도망자로 설정

vim-fugitiveVim 용 git wrapper / integration 플러그인입니다. 그것은 많은 일을 할 수 있으며 갈등을 해결하는 것 중 하나입니다.

<Install the Fugitive Plugin>
vim <file with conflicts>
:Gdiff
  1. 보기 2 (왼쪽) : 지점에 있던 코드입니다.
  2. 보기 1 (중간) : 병합 된 코드 (충돌)
  3. 보기 3 (오른쪽) : 코드에 병합 된 코드입니다.

이제 다른 두 개의 뷰에서 중앙 뷰로 텍스트를 가져 와서 가져올 수 있습니다 (모든 수동 수정 사항이 포함됨). 모든 충돌을 수동으로 해결하면 vimdiff를 종료하십시오.

여기에 이미지 설명을 입력하십시오

뷰 사이에서 물건을 사용 :diffget <view number>하고 :diffput <view number>당기고 밀 수 있습니다. 개인적으로 그다지 유용하지 않습니다. 모든 코드는 이미 중간 뷰에 있습니다. 따라서 충돌이 해결 될 때까지 해당보기를 수동으로 편집하고 싶습니다. 내 편집기 창의 양쪽에서 두 버전의 코드를 모두 볼 수 있다는 것은 매우 유용합니다.

또한 여기에서 사용하는 아주 좋은 데모


1
어떤 이유로 든 Fugitive를 사용하거나 설치하지 않으려는 경우 diff 모드에서 vim을 시작하도록 간단하게 설정 git config --global merge.tool vimdiff하고 실행할 수도 git mergetool있습니다.
Jay Thompson

"병합 된 공통 조상"이 표시되는 "diff3"스타일의 병합 충돌을 지원합니까?
alxndr

@ alxndr : 이전에 diff3에 대해 들어 본 적이 없습니다. 그러나 빠른 구글 후에. git (및 내가 사용한 다른 소스 컨트롤)에서 병합 충돌의 출력은와 같습니다 diff3 -E. 따라서 위의 이미지는 이러한 마커가있는 파일에서 생성됩니다.
Martin York

자세히 살펴보면 첫 번째 스크린 샷은 diff3 스타일의 병합을 보여줍니다. 가운데 상단 창 "BASE"는 공통 조상이며 왼쪽과 오른쪽 창이 서로 다릅니다.
alxndr

1
이 4 가지 뷰 각각은 단지 버퍼라는 것을 기억하는 것이 중요합니다. 즉, 다른 탭을 열거 나 동일한 창에 머무를 수 있으며 특정 시점에서 보려는 버퍼 만 선택할 수 있습니다. 4 개의 창을 모두 사용하지 않는 경우 한 번에 4 개의 창을 모두 열어 둘 이유가 없습니다.
코디 폴
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.