2017-08-14 99 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 
相關問題