Windows에서 Git:병합 도구는 어떻게 설정합니까?
저는 MsysGit과 Giton Cygwin을 시도해 보았습니다.둘 다 그들 자신과 그 자체로 잘 작동하고 둘 다 기트와 기트귀를 완벽하게 작동합니다.
이제 병합 도구를 구성하려면 어떻게 해야 합니까?(Vimdiff는 Cygwin에서 작업하지만, Windows를 좋아하는 일부 동료들을 위해 좀 더 사용하기 쉬운 것을 원합니다.)
Charles Bailey의 답변에 대한 후속 조치로, 다음은 p4merge(무료 교차 플랫폼 3방향 병합 도구)를 사용하는 내 Git 설정이며, msys Git(Windows) 설치에서 테스트되었습니다.
git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"'
또는 윈도우즈 cmd.exe 셸에서 두 번째 줄은 다음과 같습니다.
git config --global mergetool.p4merge.cmd "p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
변경 사항(Charles Bailey 대비):
- 글로벌 git 구성에 추가됨. 즉, 현재 git 프로젝트뿐만 아니라 모든 git 프로젝트에 유효함
- 사용자 지정 도구 구성 값은 "merge tool"에 있습니다.[tool].java", "java"가 아닙니다.[tool.tool]." (실례지만, Git이 존재하지 않는 툴에 대해 계속 불평하는 이유를 해결하는 데 한 시간이 걸렸습니다.)
- 병합 도구에서 공백이 있는 파일을 계속 찾을 수 있도록 모든 파일 이름에 대한 큰따옴표를 추가했습니다(Powershell의 msys Git에서 테스트했습니다).
- 기본적으로 Perforce는 PATH에 설치 dir를 추가하므로 명령에서 p4merge에 대한 전체 경로를 지정할 필요가 없습니다.
다운로드: http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools
편집(2014년 2월)
@Gregory Pakosz가 지적한 바와 같이, 최신 msysgit는 이제 "기본적으로" p4merge를 지원합니다(1.8.5.2.msysgit.0에서 테스트됨).
다음을 실행하여 지원되는 도구 목록을 표시할 수 있습니다.
git mergetool --tool-help
사용 가능한 목록 또는 유효한 목록에 p4merge가 표시됩니다.그렇지 않으면 Git를 업데이트하십시오.
p4merge가 사용 가능한 것으로 나열된 경우 PATH에 있으며 merge만 설정하면 됩니다.도구:
git config --global merge.tool p4merge
유효한 것으로 나열된 경우 mergetool.p4merge를 정의해야 합니다.병합에 추가된 경로입니다.도구:
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가 p4 모듈을 지원하려고 시도하기 시작했기 때문에 mergetool.p4dll 설정이 더 이상 작동하지 않습니다. libexec/git-core/git-mergetool--lib.so 을 참조하십시오. 예를 들어, 다음과 같이 git에 대한 mergetool 경로를 지정하면 됩니다.
git config --global mergetool.p4merge.path 'C:\Program Files\Perforce\p4merge.exe'
git config --global merge.tool p4merge
그러면 효과가 있을 겁니다.
저는 휴대용 Git on WinXP를 사용하고 있는데, 분기에서 발생한 충돌을 해결해야 했습니다.제가 확인한 모든 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)"'
또한 diff 도구에 대한 프롬프트 메시지를 해제합니다.
git config --global difftool.prompt false
git mergetool
완전히 구성할 수 있으므로 즐겨찾는 도구를 거의 선택할 수 있습니다.
전체 설명서는 다음과 같습니다. http://www.kernel.org/pub/software/scm/git/docs/git-mergetool.html
요약하면 사용자 구성 변수를 설정하여 기본 병합 도구를 설정할 수 있습니다.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의 p4 병합 도구는 매우 좋은 독립형 병합 도구입니다.
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
p4가 필요하다면, 당신이 필요로 하는 모든 것입니다.exe가 당신의 길에 있습니다.cmd 또는 경로를 설정할 필요가 없습니다.
"SourceGear DiffMerge"를 허브 Windows에서 diff 툴과 merge 툴로 구성하는 두 가지 방법을 찾았습니다.
명령 프롬프트 창의 다음 명령은 GIT 사용 DiffMerge를 구성하도록 .gitconfig를 업데이트합니다.
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\"'
[OR]
다음 행을 .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\"
여기(및 여기와 여기)에서 이미 답변했듯이 병합 도구는 이를 구성하는 명령입니다.그래픽 프론트엔드가 좋다면 kdiff3(GPL)를 추천합니다.
윈도우 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 + Tortoo Merge).
.git/config에서:
cmd = TortoiseMerge.exe /base:$(cygpath -d \"$BASE\") /theirs:$(cygpath -d \"$REMOTE\") /mine:$(cygpath -d \"$LOCAL\") /merged:$(cygpath -d \"$MERGED\")
사이패스를 사용하는 팁에 대한 이전 포스터 덕분입니다!
저는 매뉴얼(http://manual.winmerge.org/CommandLine.html )에서 WinMerge(http://winmerge.org/ ) 정보라는 앱을 사용합니다.
이것은 내가 사용하는 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의 결과를 설명하고 올바른 위치에 새 temp 파일을 만듭니다.
다음 옵션도 추가할 수 있습니다.
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
또한, 왜 그런지는 모르겠지만 밀란 가르디안의 답변에서 나온 인용문과 슬래시는 저를 위해 일을 망쳤습니다.
ToroiseGit에서 gvim을 diff 도구로 사용하려는 사람이 있다면 외부 diff 도구로의 경로에 대한 텍스트 입력에 입력해야 하는 내용은 다음과 같습니다.
path\to\gvim.exe -f -d -c "wincmd R" -c "wincmd R" -c "wincmd h" -c "wincmd J"
IDEA Edition) 도구 의 경우(Windows에서는 IntelliJ IDEA(Community Edition) 3가지 버전이 있습니다.~/.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
미스
[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의 경로를 윈도우즈로 변환하는 것이며 스택 오버플로의 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 "$@"
kdiff3의 경우 다음을 사용할 수 있습니다.
git config --global merge.tool kdiff3
git config --global mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global mergetool.kdiff3.trustExitCode false
git config --global diff.guitool kdiff3
git config --global difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global difftool.kdiff3.trustExitCode false
병합 및 디프 모두에 대해 창에 초콜릿을 사용하여 설치된 p4 모듈을 설정하려면 여기를 보십시오. https://gist.github.com/CamW/88e95ea8d9f0786d746a
소스 트리에서 p4 병합을 여는 데 문제가 있으면 MyRepo.git에서 config라는 로컬 구성 파일을 찾고 병합 구성을 삭제합니다.제 경우에는 방금 제거한 멜드를 열려고 했습니다.
언급URL : https://stackoverflow.com/questions/426026/git-on-windows-how-do-you-set-up-a-mergetool
'programing' 카테고리의 다른 글
Bash에서 문자열에 하위 문자열이 포함되어 있는지 확인하는 방법 (0) | 2023.05.16 |
---|---|
가변 길이 어레이가 C++ 표준의 일부가 아닌 이유는 무엇입니까? (0) | 2023.05.16 |
윈도우즈 cmd stdout 및 stderr을 단일 파일로 리디렉션하는 방법은 무엇입니까? (0) | 2023.05.16 |
"위드..."와 동등함C#의 "끝"? (0) | 2023.05.16 |
Process.start: 출력을 얻는 방법은 무엇입니까? (0) | 2023.05.16 |