2009-04-23 9 views
21

난 그냥 힘내을 사용하기 시작했습니다 그리고 내가 뭔가 확실한보고 싶었어요 가능하지만, 여기 간다 :msysgit/gitk를 사용하여 DiffMerge를 어떻게 설정합니까?

  • 내가 msysgit 1.6.2.2을 사용하고 있습니다를 설치하는 동안, 내가 옵션 1을 집어
  • Windows XP에서 "Use Git Bash only"

DiffMerge로 작성된 git diff를 대체하는 데 사용할 수있는 래퍼 스크립트를 작성하려고합니다. 다음과 같이 내가 % GIT_INSTALL %/cmd를 아래에 박쥐 파일을 배치

@echo off 
REM ---- Switch forward slashes to back slashes ---- 
set oldW=%2 
set oldW=%oldW:/=\% 
set newW=%5 
set newW=%newW:/=\% 

REM ---- Launch DiffMerge ---- 
"C:/Programs/SourceGear/DiffMerge/DiffMerge.exe" /title1="Old Version" %oldW% /title2="New Version" %newW% 

내 .gitconfig 파일을 편집 : SO에 this thread을 바탕으로, 나는 다음과 같은 배치 파일을 생성

[diff] 
external = C:/Programs/git/cmd/git-diff-wrapper.bat 

내가 시작하면 힘내 배쉬 및 실행 자식 diff 머리말 ~ - myfile

나는 메시지가 나타납니다 File (\dev\null) not found - 나는 윈도우에서 놀랍지 않다.

을 눌러서 gitk를 시작하고 편집> 환경 설정에서 동일한 래퍼 스크립트를 선택했습니다. 특정 파일에 대한 "외부 비교"옵션을 사용하면 암호 오류 메시지가 표시됩니다. Unknown Option "

분명히, 나는 어떤 도움이 될지 잘 모릅니다.

+0

"DiffMerge"특정 요소를 사용하여 요청한대로 답변을 완료했습니다. – VonC

답변

9

방금 ​​setting Notepad++ as my external editor with msysgit1.6.2.2과 비슷한 경험을했습니다.

핵심은 래퍼가 DOS 스크립트가 아니라/bin/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:/Programs/SourceGear/DiffMerge/DiffMerge.exe" /title1="Old Version" "$2" /title2="New Version" "$5" | cat 

을 모두 '\'을 만들기에 대해 걱정하지 마십시오 go '/': 그것은 외부 diff 도구를 호출하는 Git 스크립트에 의해 수행됩니다.

DiffMerge로 테스트하지는 않았지만 WinMerge를 사용하면 DOS 세션이나 Git 쉘에서 정상적으로 작동합니다.

#!/bin/sh 
"C:/Program Files/WinMerge/WinMergeU.exe" -e -ub "$2" "$5" | cat 

합니다 (' -e'옵션을 사용하여, 나는은 diff 도구 닫고 종료합니다 ' ESC'에 불과 하다며 ​​유형이 있습니다! 좋은 작품)


alt textaverage_geek이 코멘트에 추가 :

'/bin/sh'헤더를 추가하고 git diff를 다시 실행 해 보았습니다.
오류가이 시간 : 내가 git diff를 호출 할 때 매개 변수가 전달지고있는 것을 볼 수있는 방법은
Unexpected parameter 'C:/Docume~/avggeek/LOCALS~1/Temp/.diff_b08444
있습니까?

1/실제로 매개 변수가 전달되는 것을 확인하는 방법이 있습니다.
C:\Program Files\Git\libexec\git-core\git-sh-setup 파일에 다음 줄을 추가합니다 :

git_editor() { 
    : "${GIT_EDITOR:=$(git config core.editor)}" 
    : "${GIT_EDITOR:=${VISUAL:-${EDITOR}}}" 
    case "$GIT_EDITOR,$TERM" in 
    ,dumb) 
     echo >&2 "No editor specified in GIT_EDITOR, core.editor, VISUAL," 
     echo >&2 "or EDITOR. Tried to fall back to vi but terminal is dumb." 
     echo >&2 "Please set one of these variables to an appropriate" 
     echo >&2 "editor or run $0 with options that will not cause an" 
     echo >&2 "editor to be invoked (e.g., -m or -F for git-commit)." 
     exit 1 
     ;; 
    esac 
#### ADD THIS LINE BELOW 
    echo >&2 "editor is ${GIT_EDITOR:=vi} [email protected]" 
#### END ADDITION ABOVE 
    eval "${GIT_EDITOR:=vi}" '"[email protected]"' 
} 

당신은 호출되는 것을 편집기가 나타납니다, 어떤 매개 변수. 은 "예기치 않은 매개 변수"부분에 대한 지금

:
내가 대신 "-e -ub"의 "/e /ub"로 WinMergeU.exe라고, 그래서 첫 번째 질문이 때이 오류의 같은 종류를 가지고 있었다 :
당신에게 확실 "/title1"비트를 "-title1"또는 "-t1"또는 "--title1"또는 "--t1"으로 사용할 수 없습니까? 그것이 chapter 9 "Command Lines Arguments" of the pdf documentation of DiffMerge에서 볼 수있는 것입니다.
그렇지 않은 경우, 다른 매개 변수를 올바르게 구분하기 위해 일부 큰 따옴표가 사용됩니다. 같은 뭔가 :

"/title1="Old Version"" "$2" "/title2="New Version"" "$5" 
or 
"/title1=\"Old Version\"" "$2" "/title2=\"New Version\"" "$5" 

하지만 내 돈이 아니라 "-title1"또는 "-t1"양식에 다음과 같습니다

-t1="Old Version" "$2" -t2="New Version" "$5" 

는 잘 작동합니다.

+0

'/ bin/sh' 헤더를 추가하고 git diff를 다시 실행 해 보았습니다. 이번에는 오류가 있습니다 : 예기치 않은 매개 변수 'C : /Docume~'/avggeek/LOCALS~1/Temp/.diff_b08444 'git diff '를 호출 할 때 매개 변수가 전달되는 것을 볼 수있는 방법이 있습니까? –

+0

"래퍼가 DOS 스크립트가 아니라/bin/sh 스크립트라는 것을 깨닫는 것이 핵심이었습니다." "Use Git Bash only"옵션을 활성화하지 않은 사용자의 경우 Windows 스크립트 (.cmd는 더 세련된 것이어야합니다.)와 같아야합니다. $ 2 대신 % 2를 사용하는 것과 같습니다. – PhiLho

4

VonC - -t1 및 -t2로 전환하면 오류가 수정되었습니다. Diffmerge가 git bash에서 작동합니다.

the gitk patch에서 외부 Diff 지원을 추가 한 후, 두 개의 파일을 외부 Diff 프로그램으로 직접 호출하는 것으로 나타났습니다. 그래서 난 gitk이> 편집> 환경 설정을 수정하고, 외부 DIFF 도구 옵션에 직접 다음 명령을 넣어 :

"C:/Programs/SourceGear/DiffMerge/DiffMerge.exe" -t1="Old Version" -t2="New Version" 

지금 내가 DiffMerge 너무 :-) gitk이 일하고있다

+0

굉장합니다! gitk에 대한 피드백에 감사드립니다. +1 – VonC

+0

최신 Diffmerge 경로가 "C :/Program Files/SourceGear/Common/DiffMerge/sgdm.exe"일 가능성이 높고 -t1/-t2가 더 이상 작동하지 않습니다. 당신이 그것을 비우면 최소한 비교 창을 얻으십시오 – Ghita

8

이 다음과 같이 나를 위해 작동 :

~/.gitconfig에서 :

[merge] 
tool = diffmerge 
[mergetool "diffmerge"] 
cmd = \"C:/Program Files/git/cmd/git-diffmerge-merge.sh\" \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\" 
trustExitCode = false 

C:\Program Files\Git\cmd\git-diffmerge-merge.sh에서 :

신용의
#!/bin/sh 

localPath="$2" 
basePath="$1" 
remotePath="$3" 
resultPath="$4" 

if [ ! -f $basePath ] 
then 
    basePath="~/diffmerge-empty" 
fi 

"C:/Program Files/SourceGear/DiffMerge/DiffMerge.exe" --merge --result="$resultPath" "$localPath" "$basePath" "$remotePath" --title1="Mine" --title2="Merged: $4" --title3="Theirs" 

일부는 http://therightstuff.de/2009/01/28/Setting-Up-SourceGear-DiffMerge-With-Git.aspx로 이동)

+0

고마워요. 이걸로 나를 구해 줬어. – Andrei

14

내가 모든이에 대한 답변을 인터넷을 통해 보았다. 나는 위와 다른 모든 해결책을 시도했다. 병합 부분을 diff 부분이 아닌 병합 부분으로 가져올 수 있습니다. 그래서 결국 내가 해킹 한 것은 내 자신을 간단한 솔루션에서 정보를 얻었습니다. 일반적으로 다음 디렉토리에있는 .gitconfig을 편집하는 스크립트가 필요하지 않습니다. C:\Documents and Settings\[username] DiffMerge 프로그램이 이미 설치되어 있어야합니다.

.gitconfig 파일의 관련 추출물입니다. 귀하의 버전이 DiffMerge 인 경로를 편집하면됩니다. 이전 DOS 8을 사용한 참고.경로 3 형식은

[diff] 
    tool = diffm 
[difftool "diffm"] 
    cmd = "H:/PROGRA~1/SourceGear/DiffMerge/DiffMerge.exe $LOCAL $REMOTE" 
    prompt = false 

[merge] 
    tool = diffmerge 
[mergetool "diffmerge"] 
    cmd = "H:/PROGRA~1/SourceGear/DiffMerge/DiffMerge.exe --merge --result=$MERGED $LOCAL $BASE $REMOTE" 
    trustExitCode = false 
    keepBackup = false 

또한 git config --replace --global [options] 당신이 만약 소원 그래서 명령을 사용하여 설정할 수 있습니다.


이 간단한 솔루션은 나를 위해 완벽하게 작동합니다. DiffMerge (3.3.1)의 최신 버전에서는 다음과 같이 명령 경로를 변경해야합니다.

cmd = "C:/PROGRA~1/SourceGear/Common/DiffMerge/sgdm.exe ...etc..." 
+0

그냥 의미있는 간단한 솔루션을위한 소품입니다. – Bnjmn

+0

@Bnjmn이 말했듯이 +1은 .gitconfig 만 편집하면되는 간단한 해결책입니다. – JeffH

+0

나를위한 열쇠는'.../merge/replace = ...'를'... --merge --replace = '로 바꿨습니다. ..'; [SourceGear의 문서] (https://sourcegear.com/diffmerge/webhelp/sec__git__windows__msysgit.html)가 잘못되었습니다. –

관련 문제