PowerShell 第 2 轮中的 Git 配置双引号

问题描述

我重新发布这个,因为它不是重复的。请看我的编辑。

这被问到 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

不确定这是否有帮助,但是,试一试

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...