2017-08-14 55 views
1

我使用Windows 10 Ubuntu bash。我想为git使用一个视觉差异/合并工具。我安装在Windows p4merge(遵循这个artice)和配置的GIT中.gitconfig文件用下面的方式(I调节的路径是可访问从Windows 10 Ubuntu的bash)的:如何在Windows 10上使用difftool和mergetool Ubuntu bash

[merge] 
    tool = p4merge 
[mergetool "p4merge"] 
    path = /mnt/c/Program Files/Perforce/p4merge.exe 
[mergetool] 
    prompt = false 
[diff] 
    tool = p4merge 
[difftool "p4merge"] 
    path = /mnt/c/Program Files/Perforce/p4merge.exe 
[difftool] 
    prompt = false 

此外,添加以下的文件夹在.bashrc在bash PATH变量,使其可调用从任何地方:

export PATH=$PATH:"/mnt/c/Program Files/Perforce" 

所以我的问题是,如果我在bash中调用git difftool - 调查与p4merge的变化 - 我得到了以下信息

  • in bash:Unable to translate current working directory. Using C:\Windows\system32
  • p4merge应用程序在通话后立即启动,但发出以下消息:Error: ... point to an invalid file

如果我的理解对不对,这个问题或许在于发出一个Windows程序(即p4merge)无法找到与Linux的文件路径(例如/mnt/c/..)引用的文件。

有没有办法解决这类问题? (也许这是一个更普遍的问题:使用从Windows应用程序的Linux路径。)

无论如何,我不坚持使用p4merge,但任何类似的可视化工具来比较差异,并使合并成为可能。

任何信息,你可以提供我将不胜感激。

回答

1

创建文件p4mergebash.sh并设置$PATH

mkdir -p ~/bin 
touch ~/bin/p4mergebash.sh 
chmod +x ~/bin/p4mergebash.sh 
echo 'export PATH=$PATH:/mnt/c/Program\ Files/Perforce' >> ~/.bashrc 
source ~/.bashrc 

p4mergebash.sh内容:

#!/bin/sh 

LOCAL="$1" 
REMOTE="$2" 

case "$LOCAL" 
in 
     *) 
     L=$(echo "C:/Users/<username>/AppData/Local/lxss/rootfs${LOCAL}" | sed 's,/,\\\\,g') 
       ;; 
esac 

case "$REMOTE" 
in 
     *) 
       R=$(echo `git rev-parse --show-toplevel`/"$REMOTE" | sed 's,/mnt/c/,C:/,g' | sed 's,/,\\\\,g') 
       ;; 
esac 

echo "$L" 
echo "$R" 
p4merge.exe "$L" "$R" 

上面的脚本假定您的AppData和你的git回购是C:驱动器上。将您的用户名插入尖括号(即<username>)。

注意:确保没有CRLF的在p4mergebash.sh

然后设置GIT中配置:

git config --global diff.tool p4mergebash 
git config --global difftool.p4mergebash.cmd '~/bin/p4mergebash.sh $LOCAL $REMOTE' 
git config --global difftool.prompt false 
相关问题