在cygwin下使用git,会遇到路径无法直接传递给windows下的程序的情况,比如gvim, p4merge等,所以需要一个脚本,将cygwin的路径转换成windows的路径,这里用到了cygpath这个工具,具体脚本见下(脚本内容源自http://vim.wikia.com/wiki/Use_cygwin_shell)
#!/bin/bash
if [[ $1 = "bg" ]];then
BG="&"
shift
fi
if [[ $# -eq 0 ]]; then
echo "usage: $0 [bg] <progarm> [args]"
exit 0
fi
CMD="$1"
shift
while [ -n "$1" ]; do
case "$1" in
[+-]*) ARG=$1;;
*) ARG=\"`cygpath -w "$1"`\";;
esac
CMD="$CMD $ARG";
shift;
done
#echo $CMD $BG
eval $CMD $BG
在使用gvim时,在.bashrc中加入alias就可以正常使用gvim了,如下
alias gvim='win.sh bg gvim'
alias vim='win.sh vim'
但是如果使用p4merge,则没这么方便,因为git加入了p4merge的默认支持,所以我们在设置difftool和mergetool时不能使用p4merge这个名字,否则,git会将没用转换过的路径传递给p4merge,导致问题。所以我们使用另外的名字,比如perforce_merge/perforce_diff来绕过这一问题,.gitconfig的设置如下
[merge]
tool = perforce_merge
[mergetool "perforce_merge"]
cmd = win.sh p4merge \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
[diff]
tool = perforce_diff
[difftool "perforce_diff"]
cmd = win.sh p4merge \"$LOCAL\" \"$REMOTE\"