如何配置Git以使用其他工具与.gitconfig文件进行比较?
我的.gitconfig中有这个:
[diff]
tool = git-chdiff #also tried /bin/git-chdiff
这是行不通的; 它只是打开常规命令行差异。当我做
export GIT_EXTERNAL_DIFF=git-chdiff
然后git diff
将打开外部差异工具(所以我知道外部差异工具脚本可以正常工作)。diff工具的.gitconfig配置是否出现问题?
如何配置Git以使用其他工具与.gitconfig文件进行比较?
我的.gitconfig中有这个:
[diff]
tool = git-chdiff #also tried /bin/git-chdiff
这是行不通的; 它只是打开常规命令行差异。当我做
export GIT_EXTERNAL_DIFF=git-chdiff
然后git diff
将打开外部差异工具(所以我知道外部差异工具脚本可以正常工作)。diff工具的.gitconfig配置是否出现问题?
Answers:
Git提供了一系列预先配置好的difftools(kdiff3,kompare,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,diffuse,opendiff,p4merge和araxis),并且允许您指定自己的。要使用预配置的difftools之一(例如“ vimdiff”),请将以下行添加到您的~/.gitconfig
:
[diff]
tool = vimdiff
现在,您将能够运行“ git difftool”并使用您选择的工具。
另一方面,指定您自己的difftool会花费更多的工作,请参阅如何使用首选的diff工具/查看器查看“ git diff”输出?
另一种方式(从命令行):
git config --global diff.tool tkdiff
git config --global merge.tool tkdiff
git config --global --add difftool.prompt false
前两行将difftool和mergetool设置为tkdiff
-根据您的偏好进行更改。第三行禁用烦人的提示,因此,每当您单击git difftool
它时,它将自动启动difftool。
git config --global diff.tool diffmerge
但是当我照做时,git diff myfile.txt
它仍然给了我默认的unix diff
其他人对此做出了99%的答案,但是还差一个步骤。(我的答案将来自OS X,因此您必须相应地更改文件路径。)
您对以下内容进行了更改~/.gitconfig
:
[diff]
tool = diffmerge
[difftool "diffmerge"]
cmd = /Applications/Diffmerge.app/Contents/MacOS/diffmerge $LOCAL $REMOTE
这将修复差异工具。您还~/.gitconfig
可以通过从终端输入以下命令来解决此问题,而无需直接编辑:
git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd "/Applications/DiffMerge.appContents/MacOS/diffmerge \$LOCAL \$REMOTE"
其他人没有提到的1%是使用此功能时您不能只是运行git diff myfile.txt
;你需要跑步git difftool myfile.txt
。
git config --global --add difftool.prompt false
。;)
这是我的〜/ .gitconfig的一部分,在这里我配置了diff和merge工具。我喜欢SourceGear的diffmerge。(事实上,我非常喜欢它)。
[merge]
tool = diffmerge
[mergetool "diffmerge"]
cmd = "diffmerge --merge --result=\"$MERGED\" \"$LOCAL\" \"$(if test -f \"$BASE\"; then echo \"$BASE\"; else echo \"$LOCAL\"; fi)\" \"$REMOTE\""
trustExitCode = false
[diff]
tool = diffmerge
[difftool "diffmerge"]
cmd = diffmerge \"$LOCAL\" \"$REMOTE\"
因此,您会看到,您正在该[difftool "diffmerge"]
行中定义一个名为“ diffmerge”的工具。然后,在该[diff] tool =
部分中将工具“ diffmerge”设置为默认值。
显然,我的路径中有“ diffmerge”命令。否则,我需要提供可执行文件的完整路径。
diffmerge --merge --result="$MERGED" "$LOCAL" "$(if test -f "$BASE"; then echo "$BASE"; else echo "$LOCAL"; fi)" "$REMOTE"
diffmerge --merge --result="$MERGED" "$LOCAL" "$BASE" "$REMOTE"
ln-s <pathtodiffmerge>/sgdm_cygwin.sh /usr/local/bin/diffmerge
并且都准备使用上述配置。以及diffmerge
直接从cygwin命令行使用cygwin路径。
sgdm.exe
今天
再现来自我的回答这个线程中更特定于设置,而不是作为Git的比较工具进行比较。一般而言,我共享的所有细节对于任何差异工具都同样有用,因此请在此处共享:
我们运行的第一个命令如下:
git config --global diff.tool bc3
上面的命令.gitconfig
在%userprofile%
目录中找到以下条目:
[diff]
tool = bc3
然后,您运行以下命令(在此特殊情况下,运行此命令是多余的,仅在某些特殊情况下才需要。很快就会知道):
git config --global difftool.bc3.path "c:/program files/beyond compare 3/bcomp.exe"
上述命令在.gitconfig
文件中创建以下条目:
[difftool "bc3"]
path = c:/program files/Beyond Compare 3/bcomp.exe
这里要知道的是关键bc3
。这是git的众所周知的键,它对应于市场上可用的已知比较工具的特定版本(bc3
对应于Beyond Compare工具的第3版)。如果要查看所有预定义的键,只需git difftool --tool-help
在git bash上运行命令。它返回以下列表:
vimdiff
vimdiff2
vimdiff3
araxis
bc
bc3
codecompare
deltawalker
diffmerge
diffuse
ecmerge
emerge
examdiff
gvimdiff
gvimdiff2
gvimdiff3
kdiff3
kompare
meld
opendiff
p4merge
tkdiff
winmerge
xxdiff
您可以使用上述任何键,也可以定义自己的自定义键。如果您想完全设置一个新工具(或新发布的知名工具版本),而该工具不映射到上面列出的任何键,则可以随意将其映射到上面列出的任何键或新的自己的自定义密钥。
如果必须设置一个比较工具怎么办?
要么
就像我的情况一样,我已经安装了超越比较4。超出比较是git的知名工具,但默认情况下其版本4发行版未映射到任何现有键。因此,您可以采用以下任何一种方法:
我可以将超出比较4工具映射到bc3
对应于超出比较3版本的现有键。我没有比计算机上的版本3更强大的功能,因此我不在乎。如果需要的话,也可以将其映射到上面列表中的任何预定义键上examdiff
。
如果将众所周知的工具版本映射到适当的已经存在/已知的键,那么您将不需要运行第二个命令,因为git已经知道它们的安装路径。
例如,如果我在包装盒上安装了无法比较的版本3,那么在.gitconfig
文件中进行以下配置就足够了:
[diff]
tool = bc3
但是,如果您想更改默认的关联工具,则最终要path
单独提及该属性,以便git知道必须从何处启动新工具的exe的路径。这是欺骗git而不是比较4启动的条目。注意exe文件的路径:
[difftool "bc3"]
path = c:/program files/Beyond Compare 4/bcomp.exe
最干净的方法是为新的比较工具或知名工具的新版本完全定义新的键。就像我的情况一样,我定义了一个新密钥,bc4
以便于记忆。在这种情况下,您必须全部运行两个命令,但第二个命令将不会设置新工具可执行文件的路径。相反,您必须cmd
为新工具设置属性,如下所示:
git config --global diff.tool bc4
git config --global difftool.bc4.cmd "\"C:\\Program Files\\Beyond Compare 4\\bcomp.exe\" -s \"\$LOCAL\" -d \"\$REMOTE\""
运行以上命令会在.gitconfig
文件中创建以下条目:
[diff]
tool = bc4
[difftool "bc4"]
cmd = \"C:\\Program Files\\Beyond Compare 4\\bcomp.exe\" -s \"$LOCAL\" -d \"$REMOTE\"
我强烈建议您遵循方法2,以免将来对自己造成任何混淆。
添加下面的块之一对我来说可以在Windows和Linux开发环境中使用KDiff3。它提供了一个很好的一致的跨平台差异和合并工具。
[difftool "kdiff3"]
path = /usr/bin/kdiff3
trustExitCode = false
[difftool]
prompt = false
[diff]
tool = kdiff3
[mergetool "kdiff3"]
path = /usr/bin/kdiff3
trustExitCode = false
[mergetool]
keepBackup = false
[merge]
tool = kdiff3
[difftool "kdiff3"]
path = C:/Progra~1/KDiff3/kdiff3.exe
trustExitCode = false
[difftool]
prompt = false
[diff]
tool = kdiff3
[mergetool "kdiff3"]
path = C:/Progra~1/KDiff3/kdiff3.exe
trustExitCode = false
[mergetool]
keepBackup = false
[merge]
tool = kdiff3
trustExitCode = false
会导致git询问您合并是否成功,而不是依靠该工具是否以正确或错误的状态退出。
请参阅Microsoft vscode-tips-and-tricks。只需在终端中运行以下命令:
git config --global merge.tool code
在Windows中,我们需要运行$git difftool --tool-help
命令来查看各种选项,例如:
'git difftool --tool=<tool>' may be set to one of the following:
vimdiff
vimdiff2
vimdiff3
The following tools are valid, but not currently available:
araxis
bc
bc3
codecompare
deltawalker
diffmerge
diffuse
ecmerge
emerge
examdiff
gvimdiff
gvimdiff2
gvimdiff3
kdiff3
kompare
meld
opendiff
p4merge
tkdiff
winmerge
xxdiff
Some of the tools listed above only work in a windowed
environment. If run in a terminal-only session, they will fail.
我们可以添加其中的任何一个(例如winmerge),例如
$ git difftool --tool=winmerge
要配置notepad ++在提交之前查看文件:
git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"
和使用$ git commit
将在记事本++中打开提交信息