문제

저는 Cygwin에서 msysGit과 Git을 사용해 보았습니다.둘 다 그 자체로 잘 작동하며 둘 다 gitk와 git-gui를 완벽하게 실행합니다.

이제 병합 도구를 어떻게 구성합니까?(Vimdiff는 Cygwin에서 작동하지만 Windows를 좋아하는 동료들에게 좀 더 사용자 친화적인 것을 원합니다.)

도움이 되었습니까?

해결책

Charles Bailey의 답변에 대한 후속 조치를 위해 여기에 사용중인 GIT 설정이 있습니다. p4merge (무료 크로스 플랫폼 3 웨이 병합 도구); MSYS GIT (Windows)에서 테스트 : 설치 :

git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"'

또는 Windows CMD.Exe Shell에서 두 번째 줄은 다음과 같습니다.

git config --global mergetool.p4merge.cmd "p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""

변경 (Charles Bailey와 관련하여) :

  • Global Git 구성에 추가, 즉 현재 프로젝트뿐만 아니라 모든 GIT 프로젝트에 유효합니다.
  • 사용자 정의 도구 구성 값은 "Mergetool. [Tool] .cmd"에 있습니다.
  • 모든 파일 이름에 대한 이중 인용문이 추가되어 공백이있는 파일이 여전히 Merge 도구에서 찾을 수 있습니다 (PowerShell에서 MSYS GIT에서 테스트했습니다).
  • 기본적으로 Perforce는 PATH에 설치 DIR를 추가하므로 명령에서 P4Merge 로의 전체 경로를 지정할 필요가 없습니다.

다운로드 : http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools


편집하다 (2014 년 2 월)

지적한대로 @Gregory Pakosz, 최신 msys git 이제 "기본적으로"지원합니다 p4merge (테스트 1.8.5.2.msysgit.0).

실행하여 지원되는 도구 목록을 표시 할 수 있습니다.

git mergetool --tool-help

넌 봐야 해 p4merge 어느 쪽이든 사용 가능 또는 유효한 목록. 그렇지 않은 경우 git을 업데이트하십시오.

만약에 p4merge 로 표시되었습니다 사용 가능, 그것은 당신의 안에 있습니다 그리고 당신은 단지 설정하면됩니다 merge.tool:

git config --global merge.tool p4merge

그것이 나열된 경우 유효한, 당신은 정의해야합니다 grgetool.p4merge.path 에 추가 merge.tool:

git config --global mergetool.p4merge.path c:/Users/my-login/AppData/Local/Perforce/p4merge.exe
  • 위는 시스템 전체가 아닌 현재 사용자를 위해 P4Merge를 설치 한 예제 경로입니다 (관리 권한 또는 UAC 고도가 필요하지 않음)
  • 하지만 ~ 현재 사용자의 홈 디렉토리로 확장해야합니다 (이론적으로 경로는 ~/AppData/Local/Perforce/p4merge.exe), 이것은 나를 위해 효과가 없었습니다
  • 더 나은 환경 변수를 활용하는 것이 더 좋았을 것입니다 (예 : $LOCALAPPDATA/Perforce/p4merge.exe), git은 경로에 대한 환경 변수를 확장하지 않는 것 같습니다 (이 작업을 수행하는 방법을 알고 있다면이 답변을 알려 주거나 업데이트하십시오).

다른 팁

GIT가 P4Merge를 지원하기 시작한 이후 grgetool.p4merge.cmd 설정은 더 이상 작동하지 않습니다. libexec/git-core/git-mergetool (lib.-lib)을 참조하십시오.

git config --global mergetool.p4merge.path 'C:\Program Files\Perforce\p4merge.exe'
git config --global merge.tool p4merge

그러면 작동합니다.

나는 WinXP에서 휴대용 git을 사용하고 있으며 (치료를합니다!) 분기에서 나온 갈등을 해결해야했습니다. 내가 확인한 모든 GUI 중 KDIFF3 사용하기 가장 투명한 것으로 판명되었습니다.

하지만 창에서 작동하는 데 필요한 지침을 찾았습니다. 이 블로그 게시물, 여기에 나열된 다른 접근법과 약간 다른 지침. 기본적 으로이 라인을 추가로 추가했습니다 .gitconfig 파일:

[merge]
    tool = kdiff3

[mergetool "kdiff3"]
    path = C:/YourPathToBinaryHere/KDiff3/kdiff3.exe
    keepBackup = false
    trustExitCode = false

지금 잘 작동합니다!

Cygwin에서 나를 위해 일한 것은 다음과 같습니다.

git config --global merge.tool myp4merge
git config --global mergetool.myp4merge.cmd 'p4merge.exe "$(cygpath -wla $BASE)" "$(cygpath -wla $LOCAL)" "$(cygpath -wla $REMOTE)" "$(cygpath -wla $MERGED)"'
git config --global diff.tool myp4diff
git config --global difftool.myp4diff.cmd 'p4merge.exe "$(cygpath -wla $LOCAL)" "$(cygpath -wla $REMOTE)"'

또한 Difftool의 프롬프트 메시지를 끄고 싶습니다.

git config --global difftool.prompt false

git mergetool 완전히 구성 가능하므로 좋아하는 도구를 거의 선택할 수 있습니다.

전체 문서는 다음과 같습니다. http://www.kernel.org/pub/software/scm/git/docs/git-mergetool.html

간단히 말하면, 사용자 구성 변수를 설정하여 기본 gregetool을 설정할 수 있습니다. merge.tool.

병합 도구가 기본적으로 지원되는 도구 중 하나 인 경우 mergetool.<tool>.path 도구의 전체 경로로 (교체 <tool> 당신이 구성한 것에 의해 merge.tool 되려고.

그렇지 않으면 설정할 수 있습니다 mergetool.<tool>.cmd 쉘 변수로 런타임에 평가할 약간의 쉘에 $BASE, $LOCAL, $REMOTE, $MERGED 적절한 파일로 설정하십시오. 구성 파일을 직접 편집하거나 변수를 git config 명령.

이와 같은 것은 당신이 할 수있는 일의 맛을 주어야합니다 ( 'Mymerge'는 가상의 도구입니다).

git config merge.tool mymerge
git config merge.mymerge.cmd 'mymerge.exe --base "$BASE" "$LOCAL" "$REMOTE" -o "$MERGED"'

좋아하는 병합 도구를 설정하면 단순히 실행 문제입니다. git mergetool 해결해야 할 충돌이있을 때마다.

Perforce의 P4Merge 도구는 매우 훌륭한 독립형 병합 도구입니다.

Windows 7에서 비교할 수 없습니다

git config --global merge.tool bc3
git config --global mergetool.bc3.path "C:\Program Files (x86)\Beyond Compare 3\BCompare.exe"

최신 GIT 버전은 P4Merge를 직접 지원하는 것 같습니다.

git config --global merge.tool p4merge

p4merge.exe가 당신의 길에 있다면 필요한 전부가되어야합니다. CMD 또는 경로를 설정할 필요가 없습니다.

이미 여기에 대답 한 것처럼 (및 여기 그리고 여기), gregetool은 이것을 구성하는 명령입니다. 멋진 그래픽 프론트 엔드를 위해 추천합니다 KDIFF3 (GPL).

Windows 7에서 MSYSGIT를 사용하여 추가 인용문을 삭제해야했는데 이유는 확실하지 않습니다.

git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED'

Cygwin을 통해이 작업을 수행하는 경우 Cygpath를 사용해야 할 수도 있습니다.

git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge `cygpath -w $BASE` `cygpath -w $LOCAL` `cygpath -w $REMOTE` `cygpath -w $MERGED`'

바, 이건 마지막으로 저를 위해 일했습니다 (Windows 7 + Cygwin + Tortoisemerge) :

.git/config :

cmd = TortoiseMerge.exe /base:$(cygpath -d \"$BASE\") /theirs:$(cygpath -d \"$REMOTE\") /mine:$(cygpath -d \"$LOCAL\") /merged:$(cygpath -d \"$MERGED\")

Cygpath를 사용하기위한 팁의 이전 포스터에 감사드립니다!

나는 Winmerge라는 앱을 사용합니다 ( http://winmerge.org/ ) 매뉴얼의 정보 ( http://manual.winmerge.org/commandline.html )

이것은 내가 사용하는 bash 스크립트입니다 mergetool 지시서를 통해 .gitconfig

#!/bin/sh
# using winmerge with git
# replaces unix style null files with a newly created empty windows temp file

file1=$1
if [ "$file1" == '/dev/null' ] || [ "$file1" == '\\.\nul' ] || [ ! -e "$file1" ]
    then 
       file1="/tmp/gitnull"
       `echo "">$file1`
fi
file2=$2
if [ "$file2" == '/dev/null' ] || [ "$file2" == '\\.\nul' ] || [ ! -e "$file2" ]
    then 
       file2="/tmp/gitnull"
       `echo "">$file2`
fi
echo diff : $1 -- $2
"C:\Program files (x86)\WinMerge\WinMergeU.exe" -e -ub -dl "Base" -dr "Mine" "$file1" "$file2"

기본적으로 BASH는 빈 파일의 Diff 결과를 설명하고 올바른 위치에 새 온도 파일을 만듭니다.

구성하는 두 가지 방법을 찾았습니다. "Source -Gear Diffmerge"Github Wind

명령 프롬프트 창의 다음 명령은 .gitConfig를 업데이트하여 GIT 사용 Diffmerge를 구성합니다.

git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd 'C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe  \"$LOCAL\" \"$REMOTE\"'

git config --global merge.tool diffmerge
git config --global mergetool.diffmerge.cmd  'C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe  -merge  -result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"'

[또는]

.gitconfig에 다음 줄을 추가하십시오. 이 파일은 C : Users username의 홈 디렉토리에 있어야합니다.

[diff]
    tool = diffmerge
[difftool "diffmerge"]
    cmd = C:/Program\\ Files/SourceGear/Common/DiffMerge/sgdm.exe \"$LOCAL\" \"$REMOTE\"

[merge]
    tool = diffmerge
[mergetool "diffmerge"]
    trustExitCode = true
    cmd = C:/Program\\ Files/SourceGear/Common/DiffMerge/sgdm.exe -merge -result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"

이 옵션도 추가 할 수도 있습니다.

git config --global merge.tool p4mergetool
git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED'
git config --global mergetool.p4mergetool.trustExitCode false
git config --global mergetool.keepBackup false

또한, 나는 왜 그런지 모르겠지만 밀라노 가디안의 대답에서 인용하고 슬래시가 나를 위해 일을 망쳤다.

누구나 GVIM을 Tortoisegit에서 Diff 도구로 사용하려면 외부 Diff 도구로가는 경로에 대한 텍스트 입력을 입력 해야하는 것입니다.

path\to\gvim.exe -f -d -c "wincmd R" -c "wincmd R" -c "wincmd h" -c "wincmd J"

Windows Environment에서 3 방향 git grgetool 구성 (Community Edition)의 경우 (Community Edition)~/.gitconfig)

Cygwin

[mergetool "ideamerge"]
     cmd = C:/Program\\ Files\\ \\(x86\\)/JetBrains/IntelliJ\\ IDEA\\ Community\\ Edition\\ 14.1.3/bin/idea.exe merge `cygpath -wa $LOCAL` `cygpath -wa $REMOTE` `cygpath -wa $BASE` `cygpath -wa $MERGED`
[merge]
     tool = ideamerge

MSYS

[mergetool "ideamerge"]
cmd = "/c/Program\\ Files\\ \\(x86\\)/JetBrains/IntelliJ\\ IDEA\\ Community\\ Edition\\ 14.1.3/bin/idea.exe" merge `~/winpath.sh $LOCAL` `~/winpath.sh $REMOTE` `~/winpath.sh $BASE` `~/winpath.sh $MERGED`
[merge]
 tool = ideamerge

~/winpath.sh는 경로를 MSYS의 Windows로 변환하는 것이며 stackoverflow에서 MSYS 경로 변환 질문

#! /bin/sh                                                               

function wpath {                                                         
    if [ -z "$1" ]; then                                                 
        echo "$@"                                                        
    else                                                                 
        if [ -f "$1" ]; then                                             
            local dir=$(dirname "$1")                                    
            local fn=$(basename "$1")                                    
            echo "$(cd "$dir"; echo "$(pwd -W)/$fn")" | sed 's|/|\\|g';  
        else                                                             
            if [ -d "$1" ]; then                                         
                echo "$(cd "$1"; pwd -W)" | sed 's|/|\\|g';              
            else                                                         
                echo "$1" | sed 's|^/\(.\)/|\1:\\|g; s|/|\\|g';          
            fi                                                           
        fi                                                               
    fi                                                                   
}                                                                        

wpath "$@" 

P4Merge를 설정하려면 병합 및 diff를 위해 Windows에 초콜릿을 사용하여 설치하려면 여기를 살펴보십시오.https://gist.github.com/camw/88e95ea8d9f0786d746a

SourceTree에서 p4merge를 여는 데 문제가 있는 경우 다음 이름의 로컬 구성 파일을 찾으십시오. 구성 MyRepo.git에서 병합 구성을 삭제하세요.내 경우에는 방금 제거한 Meld를 ​​열려고 했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top