moe*_*oey 15 git configuration
我建立了我的混帐使用P4Merge作为比较工具,如所描述这里.所以,git diff会触发P4Merge.
但是,有时我发现使用UNIX diff更快更有效(因为没有涉及GUI).如何设置git以便我可以轻松选择我想要触发的差异工具?这可能吗?例如:
$ git diff # to trigger P4Merge
$ git difftool # to trigger UNIX diff
Run Code Online (Sandbox Code Playgroud)
我的git config --list:
code.editor=vi
merge.tool=p4merge
mergetool.extMerge.cmd=extMerge $BASE $LOCAL $REMOTE $MERGED
mergetool.extMerge.trustexitcode=false
diff.external=extDiff
mergetool.prompt=false
mergetool.keepbackup=false
mergetool.p4merge.path=/usr/local/bin/p4merge
Run Code Online (Sandbox Code Playgroud)
您可以明确指出要使用哪个 difftool。我有这个~/.gitconfig:
[diff]
tool = vimdiff
[difftool "winmerge"]
name = WinMerge
trustExitCode = true
cmd = "/c/Users/rkasten/Google\\ Drive/Apps/WinMerge/WinMergeU.exe" -u -e $LOCAL $REMOTE
Run Code Online (Sandbox Code Playgroud)
然后我有以下别名设置:
alias gdt='git difftool'
alias gdtw='git difftool --tool=winmerge'
Run Code Online (Sandbox Code Playgroud)
使用 masukomi 的示例,您可以将以下内容添加到您的 gitconfig 中:
[difftool "Kaleidoscope"]
cmd = ksdiff --whatevs
Run Code Online (Sandbox Code Playgroud)
并用于alias gdtk='git difftool --tool=Kaleidoscope'使用万花筒。
所有这些都适用于 git 2.7。
更新:
如果你想要git difftool调用默认的diff功能而不是外部工具,那么这个答案结尾处的简单版本就可以了.但是,如果您只想要多个diff工具,我更喜欢和推荐的方法是.sitconfig文件方法,如DrStrangeprok的答案中所述.
您可以将以下bash脚本设置为外部编辑工具.
(即:用它替换extDiff的内容)
它不像git diif1/git diff2那么简单,但它有效.
编辑:请参阅底部以获得更简单的版本
#!/bin/bash
# Parameters from git:
# 1 2 3 4 5 6 7
# path old-file old-hex old-mode new-file new-hex new-mode
CONTINUE=1
while [ $CONTINUE == 1 ]
do
# Present Options
echo "1. P4Merge"
echo "2. Unix diff"
echo "3. Cancel"
echo -n "Choose diff tool[1]: "
# Read in user choice
read -n 1 OPTION
# move down a line
echo ""
# if user didn't enter a choice default to 1
if [[ $OPTION == "" ]] ; then
OPTION="1"
fi
# Launch diff tool based on OPTION
case $OPTION in
1) /Applications/p4merge.app/Contents/MacOS/p4merge "$2" "$5" ; CONTINUE=0 ;;
2) diff "$2" "$5" ; CONTINUE=0 ;;
3) exit ;;
*) echo "\"$OPTION\" is not valid " ;;
esac
# This sleep has two purposes
# 1) on an invalid choice it delays the menu just a hair
# 2) keeps this script alive long enough that git will not just move onto the next file
# instantly if diffing multiple files.
sleep 1
done
Run Code Online (Sandbox Code Playgroud)
没有菜单的简单版本
将此函数添加到.bashrc如果使用'git difftool'则会使用默认的diff
function git {
if [[ $1 == "difftool" ]] ; then
git config --global --unset diff.external
command git diff
git config --global diff.external extDiff
else
command git "$@"
fi
}
Run Code Online (Sandbox Code Playgroud)
Git可以轻松管理视觉差异和命令行差异。无需花哨的调整
git diff(默认情况下)使用unix diff
如果您还想使用视觉差异工具来设置它,则正确的方法是在~/.gitconfig文件中包含以下部分:
[difftool "Kaleidoscope"]
cmd = ksdiff --partial-changeset --relative-path \"$MERGED\" -- \"$LOCAL\" \"$REMOTE\"
Run Code Online (Sandbox Code Playgroud)
之后的cmd =内容特定于您的特定视觉差异应用程序。
这是不是标准的做法,操纵git diff发送内容到可视版本比较的应用程序。因此,该问题寻求的答案比内置功能落后100%。
有关更多详细信息,请参见git-difftool手册页。