비교를 넘어서 Git Diff


111

나는 git이 Beyond Compare 3을 diff 도구로 시작하는 데 성공했지만 diff를 수행하면 비교중인 파일이로드되지 않습니다. 파일의 최신 버전 만로드되고 다른 것은로드되지 않으므로 Beyond Compare의 오른쪽 창에는 아무것도 없습니다.

Beyond Compare 3과 함께 Cygwin과 함께 git 1.6.3.1을 실행 중입니다. 웹 사이트의 지원 부분에서 다음과 같은 스크립트를 사용하여 제안한대로 비교할 수없이 설정했습니다.

#!/bin/sh  
# diff is called by git with 7 parameters:  
# path old-file old-hex old-mode new-file new-hex new-mode  
"path_to_bc3_executable" "$2" "$5" | cat

다른 사람이이 문제에 직면했고 이에 대한 해결책을 알고 있습니까?

편집 :
VonC의 제안을 따랐지만 여전히 이전과 똑같은 문제가 있습니다. 나는 Git을 처음 접했기 때문에 diff를 올바르게 사용하지 않을 것입니다.

예를 들어, 다음과 같은 명령을 사용하여 파일에서 diff를 보려고합니다.
git diff main.css

그러면 Beyond Compare가 열리고 왼쪽 창에 현재 main.css 만 표시되고 오른쪽 창에는 아무것도 표시되지 않습니다. 기본적으로 마지막으로 커밋 한 HEAD와 비교하여 왼쪽 창에서 현재 main.css를보고 싶습니다.

내 git-diff-wrapper.sh는 다음과 같습니다.

#!/bin/sh  
# diff is called by git with 7 parameters:  
# path old-file old-hex old-mode new-file new-hex new-mode  
"c:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat

내 자식 구성은 Diff에 대해 다음과 같습니다.

[diff]  
external = c:/cygwin/bin/git-diff-wrapper.sh

답변:


140

추가 래퍼 .sh 파일을 사용하지 않습니다. 내 환경은 Windows XP, cygwin의 git 1.7.1, Beyond Compare 3입니다. 다음은 내 .git / config 파일입니다.

[diff]
    tool = bc3
[difftool]
    prompt = false
[difftool "bc3"]
    #use cygpath to transform cygwin path $LOCAL (something like /tmp/U5VvP1_abc) to windows path, because bc3 is a windows software
    cmd = \"c:/program files/beyond compare 3/bcomp.exe\" "$(cygpath -w $LOCAL)" "$REMOTE"
[merge]
    tool = bc3
[mergetool]
    prompt = false
[mergetool "bc3"]
    #trustExitCode = true
    cmd = \"c:/program files/beyond compare 3/bcomp.exe\" "$LOCAL" "$REMOTE" "$BASE" "$MERGED"

그런 다음 $ git difftool 을 사용 하여 비교하고 $ git mergetool 을 사용하여 병합합니다.

trustExitCode 정보 : 사용자 지정 병합 명령의 경우 병합 명령의 종료 코드를 사용하여 병합 성공 여부를 확인할 수 있는지 여부를 지정합니다. 이것이 true로 설정되지 않은 경우 병합 대상 파일 타임 스탬프가 확인되고 파일이 업데이트 된 경우 병합이 성공한 것으로 간주됩니다. 그렇지 않으면 사용자에게 병합 성공을 표시하라는 메시지가 표시됩니다.


12
mingw git shell로 Windows 7에서 실행 중입니다. /c/program files대신 리눅스 스타일 경로를 사용해야했습니다 c:/program files. 또한 제거 "$(cygpath -w $LOCAL)"하고 방금 "$LOCAL". 그것은 속임수를 쓰는 것 같았습니다.
Landon Poch

5
@pClass가 아래에서 언급했듯이 "bc3"는 이제 최신 버전의 git에서 내부 도구입니다. 당신은 "beyondcompare3"와 같은 고유 한 이름을 사용해야합니다
스콧 웨 그너에게

4
GitHub Shell (Windows 8에서)은 bcompare: command not found도구의 이름을에서 bc3다른 것으로 변경할 때까지 (예 :) 내게 말했습니다 abc3. 내부 Github 설정이 방해를받은 것 같습니다. 또한 "$(cygpath -w $LOCAL)"부품을 제거하고 "$LOCAL". 이제 잘 작동합니다. 감사!
Felix Alcala

1
두 커밋 사이의 차이를 볼 때 이것은 버그가 많았습니다. 여기에 더 나은 솔루션은 다음과 같습니다 blog.kifaru.be/2011/07/...
balajimc55은


28

Posh-Git 의 저자 인 @dahlbyk 에게 자신의 구성을 요점으로 게시 한 것에 감사드립니다 . 구성 문제를 해결하는 데 도움이되었습니다.

[diff]
    tool = bc3
[difftool]
    prompt = false
[difftool "bc3"]
    cmd = \"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\"
[merge]
    tool = bc3
[mergetool]
    prompt = false
    keepBackup = false
[mergetool "bc3"]
    cmd = \"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"
    trustExitCode = true
[alias]
    dt = difftool
    mt = mergetool

나는이 대답을 시도했지만 비교할 수 없었습니다. 아마 내가 잘못하고있는 것 같습니다.
Epu

1
@Epu 컴퓨터에서 경로가 동일하다는 것을 확인 했습니까? 그리고 그것은 이전 v2 등이 아닌 Beyond Compare 3입니까?
닉 Josevski

경로가 동일하고 bc3임을 확인했습니다.
Epu 2012 년

1
재미있는 점은 'git difftool file.txt'와 'git mergetool file.txt'가 정상적으로 작동하므로 전환했습니다. 그러나 'git diff file.txt'는 이제 파열되었습니다 (기본 콘솔 diff를 표시하기 전에). 이제 나에게 '오류 : bc3를 생성 할 수 없음 : 해당 파일 또는 디렉터리가 없습니다. \ nexternal diff가 죽었습니다. file.txt에서
중지됨

누군가 내가했던 동일한 문제에 직면 할 경우 (편집 후 인식 할 수없는 .gitconfig) 다음과 같이 경로를 추가해야했습니다.cmd = 'C:\\Program Files\\Beyond Compare 4\\BCompare.exe' \"$LOCAL\" \"$REMOTE\"
sebagomez

20

Beyond Compare 2에 대해 다음 명령을 실행합니다.

git config --global diff.tool bc2
git config --global difftool.bc2.cmd "\"c:/program files (x86)/beyond compare 2/bc2.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false

Beyond Compare 3에 대해 다음 명령을 실행합니다.

git config --global diff.tool bc3
git config --global difftool.bc3.cmd "\"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false

그런 다음 git difftool


1
Beyond Compare 4가 지원됩니까?
Danijel

2
@Danijel @Daniel Magnussons 답변에 명시된 공식 문서Note: Use bc3 on the command line for both BC version 3 and 4
BNT


6

다음은 내 구성 파일입니다. 레슬링이 좀 필요했지만 지금은 효과가 있습니다. 나는 Windows 서버, msysgit 및 비교 3 (분명히 x86 버전)을 사용하고 있습니다. 인수를 지정할 필요가 없으며 "cmd"대신 "path"를 사용합니다.

[user]
        name = PeteW
        email = petew@petew.com
[diff]
        tool = bc3
[difftool]
        prompt = false
[difftool "bc3"]
        path = /c/Program Files (x86)/Beyond Compare 3/BComp.exe
[merge]
        tool = bc3
[mergetool]
        prompt = false
        keepBackup = false
[mergetool "bc3"]
        path = /c/Program Files (x86)/Beyond Compare 3/BComp.exe
        trustExitCode = true
[alias]
        dt = difftool
        mt = mergetool

4

너머 비교 지원 페이지가 조금 짧은 것입니다.

자세한 내용은 내 diff.external 답변 을 확인하십시오 (정확한 구문과 관련하여)

추출물:

$ git config --global diff.external <path_to_wrapper_script>

명령 프롬프트에서 " git-diff-wrapper.sh" 경로로 바꾸면 다음이 ~/.gitconfig포함됩니다.

-->8-(snip)--
[diff]
    external = <path_to_wrapper_script>
--8<-(snap)--

래퍼 스크립트 및 diff 도구에 대한 경로를 지정하려면 올바른 구문을 사용해야합니다. 즉, 백 슬래시 대신 슬래시를 사용하십시오. 제 경우에는

[diff]
    external = c:/Documents and Settings/sschuber/git-diff-wrapper.sh

에서 .gitconfig

"d:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat

래퍼 스크립트에서.


참고 : git difftool.



3

$ 2의 경로를 잘못 작성했음을 유의하십시오. Cygwin에 있지만 BC3에 있지 않기 때문에 전체 경로를 지정해야합니다. "d : / cygwin $ 2"와 같은

여기에서 내 git-diff-wrapper.sh를 참조하십시오.

$ cat ~/git-diff-wrapper.sh
#!/bin/sh
echo $2
echo $5
/cygdrive/c/Program\ Files\ \(x86\)/Beyond\ Compare\ 3/BCompare.exe "d:/programs/cygwin$2" "$5"

행운을 빕니다.


3
이를 위해 정말로 cygpath를 사용해야합니다. 예 : bcompare.exe $(cygpath -w $2). 건배.
Dan Molding

3

Windows 7 (전문가 용) 및 Windows 용 Git (v 2.15 이상)을 실행중인 경우 아래 명령을 실행하여 Windows 용 Git에서 지원하는 다른 diff 도구가 무엇인지 알아낼 수 있습니다.

git difftool --tool-help

다음과 유사한 출력이 표시됩니다.

git difftool --tool = '은 다음 중 하나로 설정할 수 있습니다.
vimdiff vimdiff2 vimdiff3

그것은 당신의 자식이 지금 difftool과 비교할 수 없을 정도로 지원하지 않는다는 것을 의미합니다.

Git이 유효한 difftool로 비교할 수없는 것을 찾으려면 려면 시스템 경로Beyond Compare 설치 디렉토리 합니다. 환경 변수 합니다. shell (cmd, git bash 또는 powershell. I am using Git Bash)에서 bcompare를 실행하여 확인할 수 있습니다. Beyond Compare가 시작되지 않으면 설치 디렉토리 (제 경우에는 C : \ Program Files \ Beyond Compare 4)를 시스템 경로 변수에 추가합니다. 그런 다음 셸을 다시 시작하십시오. Git은 가능한 difftool 옵션으로 Beyond Compare를 표시합니다. 아래 명령 중 하나를 사용하여 difftool로 비교하지 않고 실행할 수 있습니다 (예 : 로컬 파일을 다른 분기와 비교).

git difftool -t bc branchnametocomparewith -- path-to-file
or 
git difftool --tool=bc branchnametocomparewith -- path-to-file

아래 명령을 사용하여 비교를 넘어 기본 difftool로 구성 할 수 있습니다.

   git config --global diff.tool bc

추신은 위의 명령에서 bc는 Git이 경로 시스템 변수에서 찾을 수 있었던 것을 기반으로 bc3 또는 bc가 될 수 있음을 명심하십시오.


2

BC4 64 비트 용 업데이트 : Windows v.2.16.2 및 Beyond Compare 4-v.4.2.4 (64 비트 에디션) 용 Git에서 작동합니다.

사용자 루트 "C : \ Users \ MyUserName"에있는 .gitconfig 파일을 수동으로 편집하고 diff / difftool 및 merge / mergetool 태그를

[diff]
  tool = bc
[difftool "bc"]
  path = 'C:/Program Files/Beyond Compare 4/BComp.exe'
[difftool "bc"]
  cmd = \"C:/Program Files/Beyond Compare 4/BComp.exe\" \"$LOCAL\" \"$REMOTE\"
[difftool]
  prompt = false
[merge]
  tool = bc
[mergetool "bc"]
  path = 'C:/Program Files/Beyond Compare 4/BComp.exe'
[mergetool "bc"]
  cmd = \"C:/Program Files/Beyond Compare 4/BComp.exe\" \"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\"


1

차이점은 호출되는 exe에 있습니다. bcomp.exe를 호출하도록 설정하면 제대로 작동합니다. bcompare.exe를 호출하도록 환경을 구성하면 개정 시스템에서 가져온 비교 측면이 비어있게됩니다.


1

Beyond Compare 3에 대해 다음 명령을 실행합니다 (시스템에서 BCompare.exe 경로가 다른 경우 사용자에 따라 교체하십시오).

git config --global diff.tool bc3
git config --global difftool.bc3.cmd "\"c:/program files (x86)/beyond compare 3/BCompare.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false

그런 다음 git difftool


1

Windows 10, Git v2.13.2

내 .gitconfig. '\'및 ' "'에 대해 이스케이프 문자를 추가해야합니다.

[diff]
    tool = bc4
[difftool]
    prompt = false
[difftool "bc4"]
    cmd = \"C:\\Program Files\\Beyond Compare 4\\BCompare.exe\" \"$LOCAL\" \"$REMOTE\"
[merge]
    tool = bc4
[mergetool "bc4"]
    path = C:\\Program Files\\Beyond Compare 4\\BCompare.exe

git 명령을 사용하여 구성하려면 difftool비교 이외의 설정을 참조 할 수 있습니다 .


안녕하세요, 비슷한 스크립트가 있었는데 C : \\ Program Files \\ Beyond Compare 4 \\ BComp.exe로 전환 할 때까지 실패했습니다. BCompare.exe를 사용하면 비교하기 전에 임시 파일이 삭제 되었기 때문에 체크인 버전이 아닌 최신 파일 만 보았습니다.
gabriel

0

어떤 이유로 든, 나를 위해 git diff가 만든 tmp 파일은 비교할 수없이 열리기 전에 삭제되었습니다. 먼저 다른 위치로 복사해야했습니다.

cp -r $2 "/cygdrive/c/temp$2"
cygstart /cygdrive/c/Program\ Files\ \(x86\)/Beyond\ Compare\ 3/BCompare.exe "C:/temp$2" "$5"

0

많은 연구를 한 후 MAC의 경우 저에게 효과적이었습니다 ..! 1. 비교 이상을 설치하면 아래 위치에 설치됩니다.

/ Applications / Beyond \ Compare.app/Contents/MacOS/bcomp

다음 단계에 따라 bc를 git http://www.scootersoftware.com/support.php?zz=kb_mac 에서 diff / merge 도구로 만드십시오 .


0

BC2.exe가있는 git 버전 2.15.1.windows.2의 경우.

아래 구성은 마침내 내 컴퓨터에서 작동합니다.

[difftool "bc2"] cmd = \"c:/program files/beyond compare 2/bc2.exe\" ${LOCAL} ${REMOTE}

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