Windows에서 Git : mergetool을 어떻게 설정합니까?
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와 관련) :
- 전역 자식 설정에 추가, 즉 현재 자식 프로젝트뿐만 아니라 모든 자식 프로젝트에 유효
- 사용자 정의 도구 구성 값은 "merge. [tool] .cmd"가 아닌 "mergetool. [tool] .cmd"에 있습니다.
- 공백이있는 파일을 병합 도구로 여전히 찾을 수 있도록 모든 파일 이름에 큰 따옴표를 추가했습니다 (Powershell의 msys Git에서 이것을 테스트했습니다)
- 기본적으로 Perforce는 설치 디렉토리를 PATH에 추가하므로 명령에서 p4merge의 전체 경로를 지정할 필요가 없습니다.
다운로드 : 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
- 위는 시스템 전체가 아닌 현재 사용자에 대해 p4merge를 설치할 때의 경로 예입니다 (관리자 권한이나 UAC 권한 상승이 필요하지 않음)
~
현재 사용자의 홈 디렉토리로 확장해야 하지만 (이론적으로 경로는 있어야 함~/AppData/Local/Perforce/p4merge.exe
), 이것은 나를 위해 작동하지 않았습니다- 환경 변수 (예
$LOCALAPPDATA/Perforce/p4merge.exe
:)를 활용하는 것이 더 낫습니다 .git은 경로에 대한 환경 변수를 확장하지 않는 것 같습니다 (이 작업을 수행하는 방법을 알고 있다면이 답변을 알려주거나 업데이트하십시오)
Git이 p4merge를 지원하기 시작한 이후 mergetool.p4merge.cmd 설정은 더 이상 작동하지 않습니다. libexec / git-core / git-mergetool--lib를 참조하십시오. 따라서 git의 mergetool 경로를 지정하면됩니다 (예 : p4merge)
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
지금 잘 작동합니다!
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 도구는 상당히 좋은 독립형 병합 도구입니다.
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 또는 경로를 설정할 필요가 없습니다.
here ( here 및 here )에서 이미 대답했듯이 mergetool은 이것을 구성하는 명령입니다. 멋진 그래픽 프론트 엔드를 위해 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`'
Bah, 이것은 마침내 나를 위해 일했습니다 (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를 사용하는 팁에 대한 이전 포스터 덕분에!
매뉴얼 ( 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의 답변에서 인용과 슬래시가 문제를 일으켰습니다.
TortoiseGit에서 gvim을 diff 도구로 사용하려면 다음과 같이 외부 diff 도구 경로의 텍스트 입력에 입력해야합니다.
path\to\gvim.exe -f -d -c "wincmd R" -c "wincmd R" -c "wincmd h" -c "wincmd J"
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
SourceTree에서 p4merge를 여는 데 문제가있는 경우 MyRepo.git에서 config 라는 로컬 구성 파일을 찾아 병합 구성을 삭제하십시오. 내 경우에는 방금 제거한 Meld를 열려고했습니다.
참고 URL : https://stackoverflow.com/questions/426026/git-on-windows-how-do-you-set-up-a-mergetool
'Programming' 카테고리의 다른 글
vim에서 탭을 공백으로 바꿉니다. (0) | 2020.03.04 |
---|---|
내 응용 프로그램에 "암호화가 포함되어 있습니까?" (0) | 2020.03.04 |
애플리케이션에서 개인 API 키를 저장하고 보호하는 모범 사례 (0) | 2020.03.04 |
"스레드 안전"코드 란 무엇입니까? (0) | 2020.03.04 |
파이썬에서 숫자의 목록을 합치십시오 (0) | 2020.03.04 |