Cygwin에서 msysGit과 Git을 사용해 보았습니다. 둘 다 잘 작동하고 gitk와 git-gui를 완벽하게 실행합니다.
이제 어떻게 mergetool을 구성합니까? (Vimdiff는 Cygwin에서 작동하지만 Windows를 좋아하는 동료들에게는 좀 더 사용하기 쉬운 것이 좋습니다.)
Cygwin에서 msysGit과 Git을 사용해 보았습니다. 둘 다 잘 작동하고 gitk와 git-gui를 완벽하게 실행합니다.
이제 어떻게 mergetool을 구성합니까? (Vimdiff는 Cygwin에서 작동하지만 Windows를 좋아하는 동료들에게는 좀 더 사용하기 쉬운 것이 좋습니다.)
답변:
Charles Bailey의 답변에 대한 후속 조치를 위해 p4merge (무료 크로스 플랫폼 3way 병합 도구)를 사용하는 git 설정이 있습니다 . msys Git (Windows) 설치에서 테스트되었습니다.
git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"'
또는 Windows cmd.exe 셸에서 두 번째 줄은 다음과 같습니다.
git config --global mergetool.p4merge.cmd "p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
변경 사항 (Charles Bailey와 관련) :
다운로드 : http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools
편집하다 (2014 년 2 월)
가리키는 OUT으로 @Gregory Pakosz , 최신 MSYS 힘내 "기본적으로"지원은 지금 p4merge (테스트 1.8.5.2.msysgit.0 ).
다음을 실행하여 지원되는 도구 목록을 표시 할 수 있습니다.
git mergetool --tool-help
p4merge 가 사용 가능 하거나 유효한 목록 에 표시되어야 합니다. 그렇지 않다면 자식을 업데이트하십시오.
경우 p4merge이 나열되었다 사용할 수 , 당신에 PATH 와 만 설정해야 merge.tool :
git config --global merge.tool p4merge
유효한 것으로 표시된 경우 merge.tool 외에도 mergetool.p4merge.path 를 정의해야합니다 .
git config --global mergetool.p4merge.path c:/Users/my-login/AppData/Local/Perforce/p4merge.exe
~
현재 사용자의 홈 디렉토리로 확장해야 하지만 이론적으로 경로는~/AppData/Local/Perforce/p4merge.exe
), 이것은 나를 위해 작동하지 않았습니다$LOCALAPPDATA/Perforce/p4merge.exe
:)를 활용하는 것이 더 낫습니다 .git은 경로에 대한 환경 변수를 확장하지 않는 것 같습니다 (이 작업을 수행하는 방법을 알고 있다면이 답변을 알려주거나 업데이트하십시오)mergetool.p4merge.cmd
Git이 p4merge를 지원하기 시작했기 때문에 설정 이 더 이상 작동하지 않습니다 libexec/git-core/git-mergetool--lib
. 대신 직접 사용합니다mergetool.p4merge.path
cmd = \""c:/Program Files/TortoiseSVN/bin/TortoiseMerge.exe"\" -base:"$BASE" -theirs:"$REMOTE" -mine:"$LOCAL" -merged:"$MERGED"
git config --global mergetool.p4merge.cmd '"C:\\Program Files\\Perforce\\p4merge" $BASE $LOCAL $REMOTE $MERGED'
Windows 7 컴퓨터에서
Git이 p4merge를 지원하기 시작한 이후 mergetool.p4merge.cmd를 설정하면 더 이상 작동하지 않습니다.
git config --global mergetool.p4merge.path 'C:\Program Files\Perforce\p4merge.exe'
git config --global merge.tool p4merge
그런 다음 작동합니다.
WinXP에서 Portable Git을 사용하고 있습니다 (치료 중입니다!). 분기에서 발생하는 충돌을 해결해야했습니다. 내가 확인한 모든 GUI 중 KDiff3 가 가장 투명하게 사용되었습니다.
그러나이 블로그 게시물 에서 Windows에서 작동시키는 데 필요한 지침을 찾았습니다.이 지침 은 여기에 나열된 다른 접근 방식과 약간 다릅니다. 기본적으로 다음 줄을 내 .gitconfig
파일 에 추가했습니다 .
[merge]
tool = kdiff3
[mergetool "kdiff3"]
path = C:/YourPathToBinaryHere/KDiff3/kdiff3.exe
keepBackup = false
trustExitCode = false
지금 잘 작동합니다!
path = C:\\Program Files (x86)\\KDiff3\\kdiff3.exe
(더블 백 슬래시에 주목)
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
간단히 말해, 사용자 설정 변수를 설정하여 기본 mergetool을 설정할 수 있습니다 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 도구는 상당히 좋은 독립형 병합 도구입니다.
매뉴얼 ( http://manual.winmerge.org/CommandLine.html )의 WinMerge ( http://winmerge.org/ ) 정보 앱을 사용합니다
이것은 mergetool
지시문 에서 사용하는 bash 스크립트입니다..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 결과가 빈 파일에있을 때를 고려하여 올바른 위치에 새 임시 파일을 만듭니다.
github Windows에서 " SourceGear DiffMerge "를 difftool 및 mergetool로 구성하는 두 가지 방법을 찾았습니다 .
명령 프롬프트 창의 다음 명령은 .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
또한, 나는 왜 그런지 모르겠지만 Milan Gardian의 답변에서 인용과 슬래시가 문제를 일으켰습니다.
Windows 환경에서 IntelliJ IDEA (Community Edition) 3 방향 git mergetool 구성의 경우 ( ~/.gitconfig
)
사이 그윈
[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로 변환하는 것이며 moverr 경로 변환 질문에서 가져옵니다.
#! /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 모두에 대해 초콜릿을 사용하여 설치하십시오. https://gist.github.com/CamW/88e95ea8d9f0786d746a