Visual Studio Code를 Git MergeTool의 기본 편집기로 사용하는 방법


121

오늘 저는 git mergetoolWindows 명령 프롬프트에서 를 사용하려고했고 기본적으로 Vim 을 사용한다는 것을 깨달았습니다. 이것은 멋지지만 VS Code를 선호합니다 .

Git에 대한 병합 충돌을 처리하기위한 GUI로 Visual Studio Code 기능을 사용하려면 어떻게해야 합니까?

답변:


240

현재 비주얼 스튜디오 코드 1.13 나은 병합 비주얼 스튜디오 코드의 핵심에 통합되었다.

이들을 함께 연결하는 방법은 수정하는 .gitconfig것이며 두 가지 옵션이 있습니다 .

  1. 명령 줄 항목이 작업을 수행하려면 다음의 각을 입력합니다 (참고 : 교체 "'윈도우 힘내 배쉬, 맥 OS 및 Linux에서 이즈 톡 델핀과 e4rache에 의해 명확히로)

    1. git config --global merge.tool vscode
    2. git config --global mergetool.vscode.cmd "code --wait $MERGED"
    3. git config --global diff.tool vscode
    4. git config --global difftool.vscode.cmd "code --wait --diff $LOCAL $REMOTE"
  2. 이렇게하려면 .gitconfig Visual Studio Code 를 사용하여에 몇 줄을 붙여 넣습니다 .

    • 실행 git config --global core.editor "code --wait"명령 줄에서.
    • 여기에서 명령을 입력 할 수 있습니다 git config --global -e. 아래의 "추가 블록"에 코드를 붙여 넣으십시오.

      [user]
          name = EricDJohnson
          email = cool-email@neat.org
      [gui]
          recentrepo = E:/src/gitlab/App-Custom/Some-App
      # Comment: You just added this via 'git config --global core.editor "code --wait"'
      [core]
          editor = code --wait
      # Comment: Start of "Extra Block"
      # Comment: This is to unlock Visual Studio Code as your Git diff and Git merge tool
      [merge]
          tool = vscode
      [mergetool "vscode"]
          cmd = code --wait $MERGED
      [diff]
          tool = vscode
      [difftool "vscode"]
          cmd = code --wait --diff $LOCAL $REMOTE
      # Comment: End of "Extra Block"
      

이제 충돌이 실행 된 Git 디렉터리 내 git mergetool에서 병합 충돌을 처리하는 데 도움이되는 Visual Studio Code가 있습니다! ( Visual Studio Code를 닫기 전에 파일저장해야합니다 .)

들어오는 변경 사항을 수락 하시겠습니까?

code명령 줄 에서 시작 하는 방법 에 대한 자세한 내용 은 이 설명서를 참조하십시오 .

자세한 내용은 이 문서git mergetool확인하십시오 .


3
<<<< 헤드 위에 "현재 변경 사항 수락 | 들어오는 변경 사항 수락 | 두 변경 사항 수락 | 변경 사항 비교"옵션을 나열하는 줄이 삽입되며 파일에서 감지 된 변경 사항의 각 섹션에이 내용을 삽입한다고 생각합니다. . 그러나 섹션 내에서이 부분과 손으로 일부를 사용자 지정 병합하려면 로컬에서 변경 한 다음 "현재 변경 사항 수락"옵션을 선택합니다. 따라서 작업 흐름은 한 걸음 앞으로 나아 가기 위해 한 발 뒤로 물러서 게합니다. 다른 사람들이 다른 방식으로이 문제를 해결하면 우리 교육을 위해 여기에 게시하시기 바랍니다
에릭 D. 존슨

3
오류가 발생했습니다 unknown tool: vscode... code대신 사용해야 하는 명령 줄에서 VsCode를 호출 할 것입니다vscode
Kolob Canyon

19
또한 이것은 나를 위해 작동하지 않습니다. 그냥 개방 VsCode 팝 아무 파일은 이제까지 제기하지 않습니다
계산법 캐년

1
내가하고 싶은 것은 "giff difftool mybranch master"이고 변경된 모든 파일의 diff로 VS 코드를 열어 두는 것입니다. 지금은 하나만 열리고 닫을 때까지 기다립니다.
Pluc

1
아, 알아요.하지만 두 커밋이나 두 가지 브랜치 사이의 차이를 얻는 것과 같은 유연성이 없습니다. 그리고 만약 그렇다면, 대 코드에서 git을 탐색하는 것은 제 생각에 상당히 끔찍합니다. 나는 그들의 diff 및 merge UI를 좋아합니다. 나는 가서 git difftool -d디렉토리 차이를 보았다 . 내일 어떻게 작동하는지 확인하겠습니다.
Pluc

23

큰 따옴표를 간단한 따옴표로 바꿔야했습니다.

  git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL $REMOTE'

제대로 작동하려면 (큰 따옴표를 사용하면 $ LOCAL 및 $ REMOTE가 해당 값으로 대체됩니다).

Windows 명령 프롬프트 대신 Windows 용 Git Bash 를 사용하는 경우 필요합니다 .


1
나를 위해. Windows에서 명령 프롬프트를 사용하여이 작업을 수행했습니다. 아마도 당신은 다른 것을 사용하고 있습니까? 그렇다면 동일한 환경을 가진 다른 사람들이이 변경을해야한다는 것을 알 수 있도록 사용중인 환경을 추가하는 것이 좋습니다.
Todesengel

1
@ e4rache 및 @ Iztok-Delfin 여기에 나열한 내용은 유용한 콘텐츠이지만 실제로 댓글 일 때 실수로 답을 만들었습니다. 나는 당신이 의견을 제시 할 수있는 50 점이 없었기 때문에 문제가 발생했다고 확신합니다. 이것은 조사해야 할 사이트 작업 흐름 문제의 일종입니다. 어쨌든 기여해 주셔서 감사 드리며 위의 답변에 팁을 추가했습니다. 나중에 와서 사람들을 도와 주셔서 감사합니다 힘내 배쉬를 사용하는:^)
에릭 D. 존슨에게

@ eric-d-johnson 저는 답장 대신 댓글을 남기려고했습니다. (미안해, 나는이 사이트를 처음 접했다) 그리고 btw 나는 리눅스에서 bash를 사용하고 있었다. 이 답변을 댓글로 변환하는 방법이 있습니까?
e4rache

@ e4rache 댓글을 달 수있는 방법은 모르겠지만 운영자가이를보고 몇 가지 팁 (힌트, 힌트)을 제공 할 것입니다. 50 점을 받았다면 수락 된 답변에 대해 댓글을 달고이 답변을 삭제할 수 있으므로 수많은 포인트를 가진 SO 록 스타가되면 여기로 돌아와서 집안일이 당신을 행복하게하고 다시 가져 오는 모든 일을 할 수 있습니다. 모든 것이 어떻게 시작되었는지에 대한 좋은 추억.
Eric D. Johnson

1
@mohamedghonemi 좋은 의견입니다. 이제 macOS 및 Linux의 상단에있는 설명을 업데이트하여 작은 따옴표 ( 's) 를 사용해야합니다 .
Eric D. Johnson

2

누군가 Visual Studio에서 문제를 해결하려는 경우 다른 옵션은 Visual Studio를 통해 해결하는 것입니다. 팀 탐색기-> 홈 아이콘 클릭 => 설정 버튼 => Git 섹션 확장 => 전역 설정 클릭

여기에 이미지 설명 입력 여기에 이미지 설명 입력 여기에 이미지 설명 입력


Visual Studio는 Visual Studio Code와 동일하지 않습니다. 이와 같은 설정이 수행되는 방식은 상당히 다릅니다. 차이점 은 stackoverflow.com/a/33798601 을 참조하십시오
jwd630

1
@ jwd630 VS 코드가 VS와 다르다는 것을 알고 있습니다. VS 에서이 문제가 있었지만 해결책을 찾을 수 없었기 때문에 누군가 가이 문제를 설명하는 경우 게시하는 것이 좋습니다. 다운 투표 할 필요가 없습니다.
Daniel B

2

우수한 기존 답변 위에 -n명령 줄 에 추가 하여 새 창에서 VS Code를 열어야 합니다.

그래서 당신 git config --global --edit은 이렇게 생겼습니다.

[merge]
        tool = vscode
[mergetool "vscode"]
        cmd = code -n --wait $MERGED
[diff]
        tool = vscode
[difftool "vscode"]
        cmd = code -n --wait --diff $LOCAL $REMOTE                                                    

1

매뉴얼을 사용하면 흥미로운 주장을 찾을 수 있습니다.

git difftool --help 
-x <command>, --extcmd=<command>
       Specify a custom command for viewing diffs.  git-difftool ignores the configured defaults and runs $command $LOCAL $REMOTE when this option is specified.
       Additionally, $BASE is set in the environment.

이 정보를 사용하면 git 구성을 건드리지 않고도 다음 명령을 쉽게 사용할 수 있습니다.

git difftool -x "code --wait --diff" 

여기에 비슷한 질문

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.