힘내 : 병합 도구 및 diff 도구로 KDiff3를 구성하는 방법


219

최근에 GitExtension 2.46을 사용하고 있었지만 동일한 Git 버전은 1.9.4.msysgit.2입니다. Git 명령 만 사용하기 위해 GitExtension을 제거하고 GitKDiff3 의 최신 버전을 설치했습니다 .

병합하고 충돌이 발생하면 다음 명령을 실행합니다.

$ git mergetool

그런 다음 메시지가 나타납니다.

병합 도구 kdiff3은 'kdiff3'으로 사용할 수 없습니다.

나는 그것이 KDiff3 경로에 있어야한다고 생각합니다.

환경

  • 운영체제 : Windows 10
  • 힘내 2.6.1.windows.1
  • KDiff3 0.9.98 (64 비트)

질문 :

  • 충돌 파일의 LOCAL , REMOTE , BASEMERGED$ git mergetool 버전으로 KDiff3 GUI를 열려면 .gitconfig 파일에서 무엇을 구성해야 합니까?

  • diff-tool을 사용하도록 어떻게 구성합니까?


관련 포스트- 일반적으로 Git에서 diff 도구구성하는 방법 .
RBT

답변:


375

이 사이트는 mergetooldifftool 거의 도움이되었습니다 . 전역 구성을 사용했지만 문제없이 리포지토리에서 사용할 수 있습니다. 다음 명령 만 실행하면됩니다.

git config --global merge.tool kdiff3
git config --global mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global mergetool.kdiff3.trustExitCode false

git config --global diff.guitool kdiff3
git config --global difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global difftool.kdiff3.trustExitCode false

의 사용 trustExitCode옵션을 사용하면 DIFF 도구를 반환 수행하려는 작업에 따라 달라집니다. 에서 문서 :

git-difftool 은 각 파일에서 diff 도구를 개별적으로 호출합니다. diff 도구로보고 된 오류는 기본적으로 무시됩니다. 호출 된 diff 도구가 0이 아닌 종료 코드를 반환 할 때 git-difftool을 종료 하려면 --trust-exit-code 를 사용하십시오 .


5
여전히 kdiff3이 실패하면 왜 git-difftool이 종료되지 않게 하시겠습니까?
David Torres

9
Visual Studio 2015에서 diff 도구를 인식하게하려면이 줄 git config --global --add diff.guitool kdiff3 을 다음과 같이 변경 해야합니다. git config --global --add diff.tool kdiff3
Guillaume Raymond

2
@DavidTorres 아마도 0이 아닌 코드로 종료되는 Windows 도구가 제대로 작동하지 않아 모든 사람이 그것을 망칠 수 있기 때문일 것입니다.
Matthew Flaschen

2
참조 된 문서에 따르면 trustExitCode를 false로 설정하는 것은 불필요합니다. 기본값은 어쨌든 무시하는 것입니다.
matt wilkie 15

7
AFAIK --add는 여러 번 호출 될 때 두 번째 또는 세 번째 항목을 추가합니다. 로 간단히 제거 할 수 없기 때문에 나중에 수정하기가 어렵습니다 --remove. 값을 설정하지 않아도 --add괜찮습니다.
토마스 웰러

58

@Joseph의 답변 을 확장 하려면 다음을 수행하십시오 .

이 명령을 적용하면 전역 .gitconfig파일에 다음 줄이 표시됩니다 (프로세스 속도를 높이기 위해 파일로 복사하면됩니다) .

[merge]
    tool = kdiff3
[mergetool "kdiff3"]
    path = C:/Program Files/KDiff3/kdiff3.exe
    trustExitCode = false
[diff]
    guitool = kdiff3
[difftool "kdiff3"]
    path = C:/Program Files/KDiff3/kdiff3.exe
    trustExitCode = false

@ Alex78191, 내 대답은 요셉의 대답을 반영 하며이 설정에 대한 자세한 내용을 찾을 수 있습니다.
Igor Kustov

5
이것을 올바르게하는 데 시간이 오래 걸렸습니다. 두 가지로 나를 잘못 인도했습니다. (1) .gitconfig편집 중인 파일 이 사용중인 파일이 아닙니다 . 로드되는 것을 식별하려면 stackoverflow.com/questions/2114111/… 를 참조하십시오 . (2) 혼합 및 일치하지 마십시오 cmd =path =, TL을 gitconfig에서, DR : 삭제 cmd를 그냥 사용 경로
매트 윌키

1
이제 git bash에서 .... git difftool <filename> 또는 간단한 git difftool을 사용하여 방금 설정 한 diff gui kdiff3을 실행하십시오.
Vivek

32

Mac 사용자

다음은 @Joseph의 대답이지만 기본 Mac 설치 경로는 다음과 같습니다. kdiff3

(복사하여 붙여 넣어 한 번에 실행할 수 있습니다.)

git config --global --add merge.tool kdiff3 
git config --global --add mergetool.kdiff3.path  "/Applications/kdiff3.app/Contents/MacOS/kdiff3" 
git config --global --add mergetool.kdiff3.trustExitCode false

git config --global --add diff.guitool kdiff3
git config --global --add difftool.kdiff3.path "/Applications/kdiff3.app/Contents/MacOS/kdiff3"
git config --global --add difftool.kdiff3.trustExitCode false

4
--add명령을 두 번 실행하면 2 개의 구성 항목이 생성 될 수 있으므로 사용하지 마십시오 . 더 이상 단일 항목을 삭제할 수 없기 때문에 이것을 정리하는 것은 엉망입니다. 참조 git-scm.com/docs/git-config를 : "여러 라인을 옵션에 추가 할 수 있습니다"
토마스 웰러

11

문제는 Git이 % PATH %에서 KDiff3을 찾을 수 없다는 것입니다.

전형적인 유닉스 설치 모든 실행은 여러 공지 사항 (상주 /bin/, /usr/bin/, /usr/local/bin/, 등) 중 하나는 단순히 (예를 들어 쉘 프로세서에 이름을 입력하여 프로그램을 호출 할 수있다 cmd.exe:).

Microsoft Windows에서 프로그램은 일반적으로 전용 경로에 설치되므로 세션을 입력 kdiff3하고 cmdKDiff3을 실행할 수 없습니다 .

어려운 해결책 : Git에 전체 경로를 지정하여 KDiff3을 찾을 위치를 알려야합니다 kdiff3.exe. 불행히도, Git은 설정에서 경로 지정의 공백을 좋아하지 않으므로 마지막으로 이것을 필요로 할 때 고대 "C : \ Progra ~ 1 ... \ kdiff3.exe"가 늦었 던 것처럼 끝났습니다. 1990 년대 :)

간단한 해결책 : 컴퓨터 설정을 편집하고 % PATH %에 kdiff3.exe가있는 디렉토리를 포함하십시오. 그런 다음 cmd.exe에서 이름으로 호출하고 Git을 실행할 수 있는지 테스트하십시오.


8

커맨드 라인 매개 변수를 추가해야하거나 KDiff3이 파일없이 열리고 기본, 로컬 및 원격을 요구합니다. TortoiseHg 와 함께 제공된 버전을 사용했습니다 .

또한 좋은 오래된 DOS 8.3 파일 이름을 사용해야했습니다.

[merge]
    tool = kdiff3

[mergetool "kdiff3"]
    cmd = /c/Progra~1/TortoiseHg/lib/kdiff3.exe $BASE $LOCAL $REMOTE -o $MERGED

그러나 이제는 올바르게 작동합니다.


6

Git 2.20 (Q4 2018)부터 kris ' 답변 을 수정하려면 올바른 명령 git mergetool은 다음과 같습니다.

git config --global merge.guitool kdiff3 

" git mergetool" --[no-]gui처럼 " git difftool" 옵션 을 사용하는 법을 배웠기 때문 입니다.

참조 c217b93 커밋 , 57ba181 커밋 , 063f2bd 커밋 에 의해 (2018년 10월 24일) 덴튼 리우 ( Denton-L) .
( Junio ​​C gitsterHamano 에 의해 병합 - 커밋 87c15d1 , 2018 년 10 월 30 일)

mergetool: -g/--[no-]gui인수로 수락

옵션을 difftool허용하는 방법에 따라 변수를 사용하여 대신 기본 mergetool을 찾으려면 동일한 옵션을 사용하십시오 .-g/--[no-]guimergetoolmerge.guitoolmerge.tool


5

(WSL git에서 kdiff3을 사용하는 방법을 찾으려고 할 때 여기에 도착하여 최종 조각을 얻었으므로 다른 사람을 위해 내 솔루션을 게시 할 것입니다.

kdiff3을 WSL git의 diff / merge 도구로 사용하는 방법

Windows 업데이트 1903을 사용하면 훨씬 쉽습니다. wslpath를 사용하면 Windows 측에서 \ wsl $를 통해 WSL 파일 시스템에 액세스 할 수 있으므로 Windows에서 WSL로 TMP를 공유 할 필요가 없습니다.

[merge]
    renormalize = true
    guitool = kdiff3
[diff]
    tool = kdiff3
[difftool]
    prompt = false
[difftool "kdiff3"]
    # Unix style paths must be converted to windows path style
    cmd = kdiff3.exe \"`wslpath -w $LOCAL`\" \"`wslpath -w $REMOTE`\"
    trustExitCode = false
[mergetool]
    keepBackup = false
    prompt = false
[mergetool "kdiff3"]
    path = kdiff3.exe
    trustExitCode = false

Windows 업데이트 1903 이전

WSL에서 git 용 diff / merge 도구로 Windows 10에 설치된 kdiff3을 사용하는 단계 :

  1. kdiff3 설치 디렉토리를 Windows 경로에 추가하십시오.
  2. WSLENV Windows 환경 변수에 TMP를 추가하십시오 (WSLENV = TMP / up). TMP 디렉토리는 git에서 이전 버전의 파일과 같은 임시 파일을 위해 사용되므로 경로가 Windows 파일 시스템에 있어야 경로가 작동합니다.
  3. .bashrc에서 TMPDIR을 TMP로 설정하십시오.
# If TMP is passed via WSLENV then use it as TMPDIR
[[ ! -z "$WSLENV" && ! -z "$TMP" ]] && export TMPDIR=$TMP
  1. kdiff3를 호출 할 때 unix-path를 windows-path로 변환하십시오. 내 .gitconfig 샘플 :
[merge]
    renormalize = true
    guitool = kdiff3
[diff]
    tool = kdiff3
[difftool]
    prompt = false
[difftool "kdiff3"]
    #path = kdiff3.exe
    # Unix style paths must be converted to windows path style by changing '/mnt/c/' or '/c/' to 'c:/'
    cmd = kdiff3.exe \"`echo $LOCAL | sed 's_^\\(/mnt\\)\\?/\\([a-z]\\)/_\\2:/_'`\" \"`echo $REMOTE | sed 's_^\\(/mnt\\)\\?/\\([a-z]\\)/_\\2:/_'`\"
    trustExitCode = false
[mergetool]
    keepBackup = false
    prompt = false
[mergetool "kdiff3"]
    path = kdiff3.exe
    trustExitCode = false
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.