[英]How to use difftool and mergetool on Windows 10 Ubuntu bash (WSL)
我使用 Windows Subsystem for Linux 提供的 Windows 10 Ubuntu bash。 我想為 git 使用可視化差異/合並工具。 我在 Windows 上安裝了p4merge (按照這篇文章)並使用以下方式配置了 git .gitconfig
文件(我調整了可從 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
此外,我將以下文件夾添加到.bashrc
中的 bash PATH
變量中,以使其可從任何地方調用:
export PATH=$PATH:"/mnt/c/Program Files/Perforce"
所以我的問題是,如果我在 bash 中調用git difftool
- 使用p4merge
調查更改 - 我會收到以下消息
Unable to translate current working directory. Using C:\\Windows\\system32
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
,而是使用任何類似的可視化工具來比較差異並使合並成為可能。
您可以提供給我的任何信息將不勝感激。
由於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
對於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)"
創建文件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>
)。
注意:確保p4mergebash.sh
中沒有CRLF
。
然后設置git配置:
git config --global diff.tool p4mergebash
git config --global difftool.p4mergebash.cmd '~/bin/p4mergebash.sh $LOCAL $REMOTE'
git config --global difftool.prompt false
這是我用於 p4merge 合並和差異工具的 .gitconfig 行。 還要使用 VS 代碼作為提交消息編輯器:
[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 -le unix \"$(wslpath -aw $BASE)\" \"$(wslpath -aw $LOCAL)\" \"$(wslpath -aw $REMOTE)\" \"$(wslpath -aw $MERGED)\"
trustexitcode = false
keepBackup = false
[core]
editor = code -w
我更喜歡 BeyondCompare 的 3 路合並,但我認為p4merge是最好的免費選擇。 要讓 VS Code 使用 wsl,請參閱本教程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.