.gitconfig를 사용하여 diff 도구 구성


159

.gitconfig 파일과의 차이점을 위해 다른 도구를 사용하도록 Git을 어떻게 구성합니까?

내 .gitconfig에 있습니다.

[diff]
    tool = git-chdiff #also tried /bin/git-chdiff

작동하지 않습니다; 그냥 일반 명령 줄 diff를 엽니 다. 내가 할 때

export GIT_EXTERNAL_DIFF=git-chdiff

그런 다음 git diff외부 diffing 도구를 엽니 다 (따라서 외부 diff 도구 스크립트가 올바르게 작동한다는 것을 알고 있습니다). diff 도구의 .gitconfig 구성에 문제가 있습니까?


1
stackoverflow.com/questions/255202/…를 참조하십시오 (아마도 이것을 복제본으로 닫으십시오)
Stein G. Strindhaug

답변:


140

Git은 미리 정의 된 다양한 "디폴트"(kdiff3, kompare, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge, spread, opendiff, p4merge 및 araxis)를 제공하며, 자신을 지정합니다. 사전 구성된 difftools 중 하나 (예 : "vimdiff")를 사용하려면 다음 행을 추가하십시오 ~/.gitconfig.

[diff]
    tool = vimdiff

이제 "git difftool"을 실행하고 원하는 도구를 사용할 수 있습니다.

반면에 자신의 difftool을 지정하면 조금 더 많은 작업이 필요합니다. 선호하는 diff 도구 / 뷰어로 'git diff'출력을 보려면 어떻게합니까?를 참조하십시오 .


첫 번째 링크가 끊어졌습니다. 도메인이에서 (으) .com로 변경된 것 같습니다 .org. jeetworks.org/software
RBT

1
사전 구성된 "기본 제공"difftool의 의미는 무엇입니까? 목록에없는 외부 diff 도구 "winMerge"를 설정하려면 게시물에서 언급 한 것과 동일한 설정을 수행해야했으며 추가 구성없이 모든 것이 작동하기 시작했습니다. 즉, git은 "winMerge"를 지원한다는 것을 의미합니다. 포스트에서 이해할 수있는 한도 밖에서 지원되지 않는 diff 도구를 설정하려면 추가 작업 / 설정 / 구성이 필요하기 때문입니다. git에 의해 상자.
RBT

169

이를 수행하는 추가 방법 (명령 행에서) :

git config --global diff.tool tkdiff
git config --global merge.tool tkdiff
git config --global --add difftool.prompt false

처음 두 줄은 difftool과 mergetool을 설정하여 원하는 tkdiff대로 변경합니다. 세 번째 줄은 성가신 프롬프트를 비활성화하므로 때릴 때마다 git difftooldifftool이 자동으로 시작됩니다.


11
나는 git config --global diff.tool diffmerge그러나 내가 그것을 했을 때 git diff myfile.txt아직도 나에게 기본 유닉스 diff를 줬다
양서류

다른 diff 도구를 정의하는 로컬 구성이 있습니까?
Omer Dagan 14

1
아마 당신은 diffmerge에 올바른 매개 변수를 전달해야합니다 :이 링크는 meld를 위해 그것을 수행하는 방법을 설명합니다 : link : nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy
rptr

5
@ amphibient : 도구 를 사용하려면 git diff tool myfile.txt를 사용해보십시오 .
JBRWilkinson

72

다른 사람들은 이것에 대해 99 %의 대답을했지만 한 단계는 빠졌습니다. (제 답변은 OS X에서 나올 것이므로 파일 경로를 적절히 변경해야합니다.)

다음과 같이 변경하십시오 ~/.gitconfig.

[diff]
    tool = diffmerge
[difftool "diffmerge"]
    cmd = /Applications/Diffmerge.app/Contents/MacOS/diffmerge $LOCAL $REMOTE

이것은 diff 도구를 수정합니다. ~/.gitconfig터미널에서 다음 명령을 입력 하여 직접 편집하지 않고이 문제를 해결할 수도 있습니다 .

git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd "/Applications/DiffMerge.appContents/MacOS/diffmerge \$LOCAL \$REMOTE"

다른 사람들이 언급하지 않은 1 %는 이것을 사용할 때 실행할 수 없습니다 git diff myfile.txt. 당신은 실행해야합니다 git difftool myfile.txt.


23
마지막 1 %에 대해 찬성했습니다. 완전히 망치로 못을 박는만큼 만족스러운 것은 없습니다.)
Titou

1
기본 도구로 만드는 방법이 있습니까?
math0ne

6
git config --global --add difftool.prompt false그래도 단계가 빠졌습니다 . ;)
Suma

36

다음은 diff 및 병합 도구를 구성하는 ~ / .gitconfig 부분입니다. 나는 SourceGear의 diffmerge를 좋아합니다. (사실상 매우 마음에 듭니다).

[merge]
        tool = diffmerge
[mergetool "diffmerge"]
        cmd = "diffmerge --merge --result=\"$MERGED\" \"$LOCAL\" \"$(if test -f \"$BASE\"; then echo \"$BASE\"; else echo \"$LOCAL\"; fi)\" \"$REMOTE\""
        trustExitCode = false
[diff]
        tool = diffmerge
[difftool "diffmerge"]
        cmd = diffmerge \"$LOCAL\" \"$REMOTE\"

따라서, "diffmerge"라는 도구를 정의하고 [difftool "diffmerge"]있습니다. 그런 다음 도구 "diffmerge"를 기본값으로 설정합니다[diff] tool = 섹션 .

분명히 내 경로에 "diffmerge"명령이 있습니다. 그렇지 않으면 실행 파일의 전체 경로를 제공해야합니다.


모든 백 슬래시 탈출없이 :diffmerge --merge --result="$MERGED" "$LOCAL" "$(if test -f "$BASE"; then echo "$BASE"; else echo "$LOCAL"; fi)" "$REMOTE"
Tim Lovell-Smith

1
더 간단하게하겠습니다diffmerge --merge --result="$MERGED" "$LOCAL" "$BASE" "$REMOTE"
Tim Lovell-Smith

Cygwin에서 Windows 버전을 쉽게 사용할 수 있도록 편리한 'sgdm_cygwin.sh'스크립트가 있습니다.
thoni56

그래서 당신은 할 수 ln-s <pathtodiffmerge>/sgdm_cygwin.sh /usr/local/bin/diffmerge있고 당신은 위의 설정을 사용하도록 설정되었습니다. 뿐만 아니라 diffmerge직접 Cygwin에서 경로와 Cygwin에서 명령 줄에서.
thoni56

그것은 것 sgdm.exe요즘
kzu

22

스레드 에서 내 대답을 재현 하여 Git의 diff 도구로 비교할 수없는 설정에 더 구체적이었습니다. 내가 공유 한 모든 세부 사항은 일반적으로 모든 diff 도구에 똑같이 유용하므로 여기에서 공유하십시오.

우리가 실행하는 첫 번째 명령은 다음과 같습니다.

git config --global diff.tool bc3

위의 명령에서 항목 아래에 생성 .gitconfig에서 발견 된 %userprofile%디렉토리

[diff]
    tool = bc3

그런 다음 아래 명령을 실행하십시오 ( 이 특별한 경우에는이 명령을 실행하는 것이 불필요하며 일부 특수한 경우에만 필요합니다. 잠시 후에 알게 될 것입니다 ).

git config --global difftool.bc3.path "c:/program files/beyond compare 3/bcomp.exe"

위의 명령은 .gitconfig파일 에서 아래 항목을 만듭니다 .

[difftool "bc3"]
    path = c:/program files/Beyond Compare 3/bcomp.exe

여기서 알아야 할 것은 열쇠 bc3입니다. 이것은 시중에서 구할 수있는 특정 버전의 잘 알려진 비교 도구에 해당하는 잘 알려진 git 키 bc3입니다 (Beyond Compare 도구의 세 번째 버전에 해당). 미리 정의 된 모든 키를 보려면 git difftool --tool-helpgit bash 에서 명령을 실행하십시오 . 아래 목록을 반환합니다.

vimdiff
vimdiff2
vimdiff3
araxis
bc
bc3
codecompare
deltawalker
diffmerge
diffuse
ecmerge
emerge
examdiff
gvimdiff
gvimdiff2
gvimdiff3
kdiff3
kompare
meld
opendiff
p4merge
tkdiff
winmerge
xxdiff

위의 키를 사용하거나 사용자 정의 키를 정의 할 수 있습니다. 위에 나열된 키로 매핑되지 않는 새 도구 (또는 새로 출시 된 잘 알려진 도구 버전)를 설정하려는 경우 위에 나열된 키 또는 키로 자유롭게 매핑 할 수 있습니다. 자신 만의 맞춤 키.

비교 도구를 설정해야하는 경우

  • 시장에서 완전히 새로운

또는

  • 기존의 잘 알려진 도구의 새 버전이 출시되었으며 git ?

필자의 경우와 마찬가지로 비교 4 이상을 설치했습니다. 넘어 비교는 잘 알려진 도구이지만 git 4 버전은 기본적으로 기존 키에 매핑되지 않습니다. 따라서 아래 방법 중 하나를 수행 할 수 있습니다.

  1. 비교 4 도구 bc3를 넘어 비교 3 버전을 초과하는 기존 키에 매핑 할 수 있습니다 . 내 컴퓨터에서 버전 3을 비교할 수 없었으므로 신경 쓰지 않았습니다. 원하는 경우 위 목록의 사전 정의 된 키에도 매핑 할 수있었습니다 (예 :) examdiff.

    잘 알려진 버전의 도구를 이미 기존 / 잘 알려진 키에 매핑하면 설치 경로가 이미 git이므로 두 번째 명령을 실행할 필요가 없습니다 .

    예를 들어 상자에 비교 버전 3 이상을 설치 한 경우 .gitconfig파일에 아래 구성 이 있으면 충분합니다.

    [diff]
    tool = bc3
    

    그러나 기본 관련 도구를 변경하려면 pathgit이 새 도구의 exe를 시작 해야하는 경로를 알 수 있도록 속성을 별도로 언급 하게됩니다. 다음은 비교 4 이상으로 시작하는 여우 자식 항목입니다. exe의 경로를 참고하십시오.

    [difftool "bc3"]
    path = c:/program files/Beyond Compare 4/bcomp.exe
    
  2. 가장 깨끗한 방법 은 새로운 비교 도구 또는 잘 알려진 도구의 새 버전에 대한 새 키를 모두 정의하는 것입니다. 필자의 경우처럼 bc4기억하기 쉽도록 새 키를 정의했습니다 . 이 경우 두 명령을 모두 실행해야하며 두 번째 명령은 새 도구 실행 파일의 경로를 설정하지 않습니다. 대신 cmd아래와 같이 새 도구의 속성 을 설정해야 합니다.

    git config --global diff.tool bc4
    
    git config --global difftool.bc4.cmd "\"C:\\Program Files\\Beyond Compare 4\\bcomp.exe\" -s \"\$LOCAL\" -d \"\$REMOTE\""
    

    위의 명령을 실행하면 .gitconfig파일에 아래 항목이 작성됩니다 .

    [diff]
    tool = bc4
    [difftool "bc4"]
    cmd = \"C:\\Program Files\\Beyond Compare 4\\bcomp.exe\" -s \"$LOCAL\" -d \"$REMOTE\"
    

앞으로 혼동을 피하기 위해 접근법 # 2를 따르는 것이 좋습니다.


16

아래 블록 중 하나를 추가하면 KDiff3 을 사용할 수 있습니다. Windows 및 Linux 개발 환경에 있습니다. 일관된 크로스 플랫폼 차이 및 병합 도구를 만듭니다.

리눅스

[difftool "kdiff3"]
    path = /usr/bin/kdiff3
    trustExitCode = false
[difftool]
    prompt = false
[diff]
    tool = kdiff3
[mergetool "kdiff3"]
    path = /usr/bin/kdiff3
    trustExitCode = false
[mergetool]
    keepBackup = false
[merge]
    tool = kdiff3

윈도우

[difftool "kdiff3"]
    path = C:/Progra~1/KDiff3/kdiff3.exe
    trustExitCode = false
[difftool]
    prompt = false
[diff]
    tool = kdiff3
[mergetool "kdiff3"]
    path = C:/Progra~1/KDiff3/kdiff3.exe
    trustExitCode = false
[mergetool]
    keepBackup = false
[merge]
    tool = kdiff3

Linux와 Windows 모두에 대해 조건부로 올바른 경로를 지정하는 단일 크로스 플랫폼 .gitconfig 파일을 만드는 방법을 찾았습니까?
Jerry Asher

1
솔직히, 나는 모든 곳에서 멜로로 전환했고 그것이 효과가있는 것 같습니다.
moodboom

trustExitCode = false를 설정해야하는 이유가 있습니까? false가 설정되면 내 이해에서 git은 도구에서 0이 아닌 종료 코드를 무시합니다. 따라서 도구 crush git이 실수로 병합이 성공했다고 생각하면. 허위로 설정 한 이유가있을 수 있으므로 설명해주세요.
apollo

trustExitCode = false도구가 true 또는 false 상태로 종료되었는지 여부에 의존하지 않고 git이 병합 성공 여부를 묻게 할 것이라고 믿습니다 .
moodboom

4

여러 diff 도구를 사용하는 옵션을 원한다면 .gitconfig에 별명을 추가하십시오.

[alias]
    kdiff = difftool --tool kdiff3

--tool옵션 을 언급하기 위해 . 감사합니다
itMaxence

0

Microsoft vscode-tips-and-tricks를 참조하십시오 . 터미널에서 다음 명령을 실행하십시오.

git config --global merge.tool code

그러나 먼저 codePATH에 add 명령 이 필요합니다 . 여기에 이미지 설명을 입력하십시오


0

Windows에서는 다음 $git difftool --tool-help과 같은 다양한 옵션을 보려면 명령 을 실행해야합니다 .

    'git difftool --tool=<tool>' may be set to one of the following:
                    vimdiff
                    vimdiff2
                    vimdiff3

    The following tools are valid, but not currently available:
                    araxis
                    bc
                    bc3
                    codecompare
                    deltawalker
                    diffmerge
                    diffuse
                    ecmerge
                    emerge
                    examdiff
                    gvimdiff
                    gvimdiff2
                    gvimdiff3
                    kdiff3
                    kompare
                    meld
                    opendiff
                    p4merge
                    tkdiff
                    winmerge
                    xxdiff
Some of the tools listed above only work in a windowed
environment. If run in a terminal-only session, they will fail.

그리고 우리는 그들 중 하나를 추가 할 수 있습니다 (예 : winmerge)

$  git difftool --tool=winmerge

커밋하기 전에 파일을 볼 수 있도록 notepad ++를 구성하는 경우 :

 git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

를 사용 $ git commit하면 커밋 정보가 메모장에서 열립니다. ++

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