asz*_*oke 5 windows git bash p4merge
我使用Windows 10 Ubuntu bash。我想为git使用可视化差异/合并工具。我在Windows上安装了p4merge(遵循此artice),.gitconfig并通过以下方式配置了git 文件(我将路径调整为可从Windows 10 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
Run Code Online (Sandbox Code Playgroud)
此外,我在bash PATH变量中添加了以下文件夹,.bashrc以使其可从任何地方调用:
export PATH=$PATH:"/mnt/c/Program Files/Perforce"
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,如果我致电git difftoolbash-调查更改p4merge-我收到以下消息
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任何类似的可视化工具来比较差异并使合并成为可能。
您能提供给我的任何信息将不胜感激。
Nee*_*arg 18
由于Windows 10 版本 1903更新,现在可以从 Windows 10 访问 Linux 子系统。这要容易得多。
只要确保git config --global --list有这些行。就这样!
diff.tool=p4merge
merge.tool=p4merge
difftool.p4merge.cmd=/mnt/c/Program\ Files/Perforce/p4merge.exe "$(wslpath -aw $LOCAL)" "$(wslpath -aw $REMOTE)"
mergetool.p4merge.cmd=/mnt/c/Program\ Files/Perforce/p4merge.exe "$(wslpath -aw $BASE)" "$(wslpath -aw $LOCAL)" "$(wslpath -aw $REMOTE)" "$(wslpath -aw $MERGED)"
mergetool.p4merge.trustexitcode=false
Run Code Online (Sandbox Code Playgroud)
对于Beyond Compare 4,将这些行添加到您的.gitconfig文件中:
[merge]
tool = BeyondCompare4
guitool = BeyondCompare4
[diff]
guitool = beyondcompare4
[difftool "beyondcompare4"]
cmd = /mnt/c/Program\\ Files/Beyond\\ Compare\\ 4/bcomp.exe "$(wslpath -aw $LOCAL)" "$(wslpath -aw $REMOTE)"
[mergetool "BeyondCompare4"]
cmd = /mnt/c/Program\\ Files/Beyond\\ Compare\\ 4/bcomp.exe "$(wslpath -aw $LOCAL)" "$(wslpath -aw $REMOTE)" "$(wslpath -aw $BASE)" "$(wslpath -aw $MERGED)"
Run Code Online (Sandbox Code Playgroud)
创建文件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
Run Code Online (Sandbox Code Playgroud)
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"
Run Code Online (Sandbox Code Playgroud)
上面的脚本假设您AppData和您的 git 存储库都在C:驱动器上。将您的用户名插入尖括号中(即<username>)。
注意:确保没有CRLF's in 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
Run Code Online (Sandbox Code Playgroud)