我如何配置git以p4merge用作我的mergetool?
接下来是我现在的情况:
$ git --version
git version 1.8.3.msysgit.0
$ git mergetool
This message is displayed because 'merge.tool' is not configured.
See 'git mergetool --tool-help' or 'git help config' for more details.
'git mergetool' will now attempt to use one of the following tools:
tortoisemerge emerge vimdiff
No known merge tool is available.
Run Code Online (Sandbox Code Playgroud) 我想检查我的git设置的合并工具 - 我只是不记得名字.我知道我可以等到下一个合并机会来运行它git merge tool并查看它是什么,但我想输入类似于git mergetool status查看工具的内容(例如,版本是什么).
我配置我的git来解决与Sublimerge的合并冲突.为此,我跑了:
git config --global merge.tool sublimerge
git config --global mergetool.sublimerge.cmd 'subl -n --wait \"$REMOTE\" \"$BASE\" \"$LOCAL\" \"$MERGED\" --command \"sublimerge_diff_views\"'
git config --global mergetool.sublimerge.trustExitCode 'false'
git config --global diff.tool sublimerge
git config --global difftool.sublimerge.cmd 'subl -n --wait \"$REMOTE\" \"$LOCAL\" --command \"sublimerge_diff_views {\\\"left_read_only\\\": true, \\\"right_read_only\\\": true}\"'
Run Code Online (Sandbox Code Playgroud)
当我运行git mergetool时,Sublime将打开四列:.remote,.base,.local和当前文件.但是,所有列都是空的.
并且所有列名都有一个"在文件扩展名之后,如:file.php.REMOTE.44625.php",file.php.BASE.44625.php",file.php.LOCAL.44625.php"和file.php "那我就不能编辑冲突了.
有人可以帮帮我吗?
我正在使用 CLI 合并工具vimdiff,而不是逐行输入:diffg RE每个更改来选择远程版本,有没有办法可以将整个文件的远程版本作为目标合并?
我已经阅读了关于这个主题的大量问答,并遵循了该信的所有指示.但是我仍然头疼,试图将Git设置为使用WinMerge进行差异和合并.
我使用Git终端采取了以下步骤:
git config --global diff.tool winmerge
git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false
Run Code Online (Sandbox Code Playgroud)
我还在我的PATH变量中包含的目录中设置了一个脚本:
#!/bin/sh
echo Launching WinMergeU.exe: $1 $2
"C:/Program Files/WinMerge/WinMergeU.exe" git /e /u /dl "Base" /dr "Mine" "$1" "$2""
Run Code Online (Sandbox Code Playgroud)
当我执行
git mergetool
Run Code Online (Sandbox Code Playgroud)
在Git终端中,我看到:
Merging:
first.txt
Normal merge conflict for 'first.txt':
{local}: modified
{remote}: modified
Launching WinMergeU.exe:
Run Code Online (Sandbox Code Playgroud)
因此在我看来,$LOCAL和$REMOTE变量并没有将任何内容传递给winmerge.sh脚本.我在这做错了什么?我必须在配置部分中假设它.
在Mercurial中,可以为外部差异和合并工具定义模式(以便仅为匹配指定模式的文件调用它们):
[diff-patterns]
**.ext = difftool
[merge-patterns]
**.ext = mergetool
Run Code Online (Sandbox Code Playgroud)
如何在Git中定义这样的模式?
git-config(1)中的[mergetool]部分未提及任何模式,掩码或任何类似的模式.
编辑:
这是我的.git/config的相关部分:
[diff]
tool = difftool
[difftool "difftool"]
cmd = difftool.git.sh "$LOCAL" "$REMOTE" "$BASE"
[merge]
tool = mergetool
[mergetool "mergetool"]
cmd = mergetool.git.sh "$LOCAL" "$REMOTE" "$BASE" "$MERGED"
Run Code Online (Sandbox Code Playgroud)
现在它适用于所有文件.
我希望只为名称以.结尾的文件调用difftool和mergetool.ext
编辑:
我添加了一个文件.git/info/attributes,其中包含以下内容:
*.ext diff=difftool
*.ext merge=mergetool
Run Code Online (Sandbox Code Playgroud)
我还补充道
[diff "difftool"]
name = my custom diff driver
driver = difftool.git.sh %A %B %O
[merge "mergetool"]
name = my custom merge driver
driver = mergetool.git.sh %A %B %O …Run Code Online (Sandbox Code Playgroud) 合并后,我想使用git mergetool来解决问题,但它失败了我指定的任何工具:
git mergetool
merge tool candidates: opendiff kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff diffuse ecmerge p4merge araxis bc3 vimdiff emerge
Merging:
main.c
Normal merge conflict for 'main.c':
{local}: modified file
{remote}: modified file
Hit return to start merge resolution tool (kdiff3):
merge of main.c failed
我指定的工具似乎根本没有启动.
输出
git config --list
merge.tool=kdiff3 core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true
Git要求点击返回按钮逐个打开每个冲突文件的mergetool:
> git mergetool
Normal merge conflict for '...':
{local}: modified file
{remote}: modified file
Hit return to start merge resolution tool (opendiff):
Run Code Online (Sandbox Code Playgroud)
如何避免项目的命中返回步骤并自动打开配置的合并工具?
git mergetool很棒(就我而言,我使用 kdiff3)。但是,无法使用它来解决来自git am或git apply(甚至与patch命令)的冲突。实际上,mergetool 在git am使用修改版本和补丁时需要 3 个文件才能工作(基本版本和两个修改版本)。
你知道一种git mergetool用于与产生的冲突的方法git am吗?
我认为有必要从修改版本和补丁中猜测基本文件。如果单独考虑每个块,看起来很棘手,但并非不可能。
如何解决KDiff在解决合并冲突时添加额外空行的问题?将设置中的结束行和编码更改为任何其他内容都没有帮助。
如果在运行 git mergetool 之前我们有:
line1
line2
line3
Run Code Online (Sandbox Code Playgroud)
然后在开始并解决冲突后:
line1
line2
line3
Run Code Online (Sandbox Code Playgroud)