问题描述
我重新发布这个,因为它不是重复的。请看我的编辑。
这被问到 here,但没有为 PowerShell 提供解决方案。给出的解决方案不适用于 PowerShell(特别是 VSCode 中的 PowerShell 5.1)。
我试过了
git config --global mergetool.vscode.cmd '"code --wait $MERGED"'
但我丢失了双引号(即相应的 .gitconfig
文件中没有双引号)。仅供参考,单引号是将 $MERGED
作为字符串文字传递而不是让 PowerShell 尝试扩展它所必需的。
我也试过
echo '"code --wait $MERGED"' | git config --global mergetool.vscode.cmd
git config --global mergetool.vscode.cmd '`"code --wait $MERGED`"'
git config --global mergetool.vscode.cmd @'
code --wait $MERGED
'@
但没有任何效果。有没有办法在 PowerShell 中执行此操作?
另外,我研究了this question,以及
的解决方案git config --global mergetool.vscode.cmd '\"code --wait $MERGED\"'
也没有
git config --global mergetool.vscode.cmd "\"code --wait $MERGED\""
也没有
git config --global mergetool.vscode.cmd ('"code --wait $MERGED"' -replace '"','\"')
也不起作用。 (我不使用 PowerShell Core、v7 或其任何跨平台变体)。
解决方法
这不是一个答案,而是一些可以尝试的想法。我无法通过调用 git 所涉及的所有引号,所以我作弊并将 GIT 目录放在我的路径中以使其工作。这不是一个持久的变化,但它足以玩弄一下。
$ENV:Path+=";C:\Program Files\Git\cmd"
完成后,我创建了一个包含命令的 PS 变量并使用 Invoke-Expression 运行它。这允许使用诸如 $merged 之类的变量动态创建命令。
$myCMD = "GIT Status"
Invoke-Expression $CMD
就您而言,看看这是否有助于拉近您的距离。使用 PS 变量将允许将 $merged 作为命令的一部分进行扩展。我不知道 $merged 是什么,所以我使用了一个虚拟值。
$Merged = "FooBar"
$Command = "GIT Config --global mergetool.vscode.cmd --wait $Merged"
Invoke-Expression $Command
不确定这是否有帮助,但是,试一试