programing

KDiff3를 git에 대한 병합 도구 및 diff 도구로 구성하려면 어떻게 해야 합니까?

magicmemo 2023. 5. 31. 15:48
반응형

KDiff3를 git에 대한 병합 도구 및 diff 도구로 구성하려면 어떻게 해야 합니까?

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

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

git mergetool

그러면 다음과 같은 메시지가 표시됩니다.

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

KDiff3 길로 가야 할 것 같습니다.

환경

  • OS: 윈도우 10
  • Git 2.6.1.windows.1
  • KDiff30.9.98(64비트)

질문:

  • 에서 .gitconfig 해야 할 은 입니까?git mergetool충돌된 파일의 LOCAL, REMOTE, BASE 및 MERGED 버전을 사용하여 KDiff3 GUI를 여시겠습니까?

  • Diff 도구로 사용하도록 구성하려면 어떻게 해야 합니까?

이 사이트들은 거의 합병 도구와 다른 도구에 매우 도움이 되었습니다.글로벌 구성을 사용했지만 리포지토리에서 문제 없이 사용할 수 있습니다.다음 명령만 실행하면 됩니다.

git config --global merge.tool kdiff3
git config --global mergetool.kdiff3.path "C:/Program Files/KDiff3/bin/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/bin/kdiff3.exe"
git config --global difftool.kdiff3.trustExitCode false

최신 버전 kdiff3는 실행 파일을 응용 프로그램 폴더 C:/Program Files/KDIf3의 루트에서 응용 프로그램 폴더 내의 bin/폴더로 이동했습니다.이전 버전을 사용하는 경우 위의 경로에서 "bin/"을 제거합니다.

옵션의 사용은 diff 도구가 반환될 때 수행할 작업에 따라 달라집니다.설명서에서:

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

@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

Mac 사용자의 경우

인 @Joseph @Joseph의 Mac 경로 위치입니다.kdiff3

(이 파일을 복사하여 붙여넣고 한 번에 실행할 수 있습니다.)

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

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

2021년 업데이트:

3분기) 에서는 Git 2.33 (2021년 3분기) 윈도우.mergetool▁find니▁▁to▁has를 찾는 방법을 배웠습니다.kdiff3.exe이 발견한 winmerge.exe.

git config --global merge.tool kdiff3충분합니다.

마이클 쉰들러()michaelcompressconsult의 커밋 47eb4c6(2021년 6월 7일)을 참조하십시오.
(주니오 C 하마노에 의해 합병 -- -- commit b7bd70d, 2021년 7월 8일)

Windows에서도 kdiff3가 작동하도록 mergetools/kdiff3합니다.

사인 오프 바이: 마이클 쉰들러 michael@compressconsult.com

원주민kdiff3 mergetoolWindows에서 를 찾을 수 없습니다.
메시지 "The merge tool kdiff3 is not available as 'kdiff3'가 표시됩니다.

바이너리 이름을 번역하여 WinMerge 검색 경로에서 찾듯이 kdiff3도 마찬가지로 검색합니다.


2018:

Kris답변을 수정하려면 Git 2.20(Q4 2018)부터 시작하여 다음에 대한 적절한 명령입니다.git mergetool될 것이다

git config --global merge.guitool kdiff3 

그것은 " 때문입니다.git mergetool시험을 보는 법을 배웠습니다.--[no-]gui"와 같은 옵션git difftool합니다.

commit c217b93, commit 57ba181, commit 063f2bd (2018년 10월 24일) by Denton Denton-LLiu ()를 참조하십시오.
(주니오 C 하마노에 의해 합병 -- -- 87c15d1, 2018년 10월 30일 커밋)

mergetool수락-g/--[no-]gui의론으로서

방법에 따라difftool을 받아들입니다.-g/--[no-]gui옵션, 만들기mergetool동일한 옵션을 사용합니다.merge.guitool변수 대신 기본 병합 도구를 찾습니다.merge.tool.

문제는 Git가 %PATH%에서 KDIf3를 찾을 수 없다는 것입니다.

일반적인 유닉스 설치에서 모든 실행 파일은 여러 잘 알려진 위치에 있습니다./bin/,/usr/bin/,/usr/local/bin/예를 들어, 셸 프로세서에 프로그램 이름을 입력하면 프로그램을 호출할 수 있습니다.cmd.exe:) ).

Microsoft Windows에서 프로그램은 일반적으로 전용 경로에 설치되므로 단순히 입력할 수 없습니다.kdiff3순식간에cmd세션을 수행하고 KDIf3를 실행합니다.

하드 솔루션: KDIf3의 전체 경로를 지정하여 Git에 KDIf3를 찾을 수 있는 위치를 알려주어야 합니다.kdiff3.exe불행하게도 Git는 구성의 경로 사양에 공백이 있는 것을 좋아하지 않기 때문에 마지막으로 이것이 필요했을 때, 저는 그 오래된 "C:"를 갖게 되었습니다.\Progra~1...\kdiff3.exe" 1990년대 후반인 것처럼 :)

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

명령줄 매개 변수를 추가해야 했습니다. 그렇지 않으면 KDIf3가 파일 없이 열리고 기본, 로컬 및 원격을 입력하라는 메시지가 나타납니다.저는 TorothyHg와 함께 제공된 버전을 사용했습니다.

또한 이전의 DOS 8.3 파일 이름을 사용해야 했습니다.

[merge]
    tool = kdiff3

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

하지만 지금은 올바르게 작동합니다.

(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 이전 버전

Windows 10에 설치된 kdiff3를 WSL의 git에 대한 diff/merge 도구로 사용하는 단계:

  1. kdiff3 설치 디렉토리를 윈도우즈 경로에 추가합니다.
  2. WSLENV Windows 환경 변수(WSLENV=TMP/up)에 TMP를 추가합니다.TMP dir는 이전 버전의 파일과 같이 임시 파일에 대해 git에 의해 사용되므로 이 작업이 수행되려면 경로가 윈도우즈 파일 시스템에 있어야 합니다.
  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

승인된 답변과 동일하지만 복사/붙여넣기가 용이한 새로운 설치 경로:

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

언급URL : https://stackoverflow.com/questions/33308482/how-can-i-configure-kdiff3-as-a-merge-tool-and-diff-tool-for-git

반응형