标题是不言自明的。这是我迄今为止尝试过的:
function Git {
$cmd = $args[0]
for ($i = 1; $i -lt $args.count; $i++) {
$cmd = $cmd + " " + $args[$i]
}
echo $(wsl git $cmd)
}
然而调用 eggit clone <clone URL>
给了我git: 'clone <clone URL>' is not a git command. See 'git --help'.
所以看起来好像 PowerShell 正在将一个带引号的字符串传递给git
命令,这导致它失败......或者我的代码是否存在其他一些我遗漏的问题?
希望这些信息足以让任何 PowerShell 专家为我指明正确的方向……尽管要了解我的实际核心问题以及我为尝试修复它所做的工作,请继续阅读……
我正在尝试将git
在 PowerShell 或 CMD 窗口中键入的所有命令重定向到 WSL,因为这是我唯一git
安装的地方,我想保持这种方式。当我已经在 WSL 中安装了我需要的所有东西时,我认为安装适用于 Windows 的 Git 或任何其他大型第三方工具是没有意义的。
唯一的缺点是:
wsl git...
,每次我想克隆、拉、推等时都打字变得很麻烦而且很快就会很累。对于这些问题,我尝试了两种现有的解决方案,即https://github.com/hangxingliu/wslgit和https://github.com/andy-5/wslgit,但它们都给了我相同的错误消息:
PS C:\Users\Kenny> git --version
/usr/bin/wslgit.sh: line 83: cd: C:\Users\Kenny: No such file or directory
fatal: can not cd to C:\Users\Kenny (C:\Users\Kenny)
有关更多信息,另请参阅前 repo 中这个看似相关的 GitHub 问题。
我正在运行 Windows 10.0.19042.0,即 Windows 10 Home 的最新稳定版本。此版本或先前版本中肯定有一些重大更改,因为前 repo 的所有者在链接问题页面上的评论中引用了这一点:
我已经更新了 wslgit.dev.sh 一点。首先
mount -t drvfs
=> 什么都不返回,它发生在更新到 2004 年之后。所以我更新了 wslgit.dev.sh 文件......现在它对我有用。之后,生成新的wslgit.sh
并更改旧的。
我已经尝试过他们的建议,但它似乎对我或问题的 OP 都没有帮助。因此,我深入研究了编写自定义 PowerShell 函数以实现类似结果的整个兔子洞。
我现在已经浪费了一整天来尝试解决这个看似简单的问题(整个上午都在尝试使现有解决方案正常工作,其余时间都在 PowerShell 解决方法上)。因此,我非常感谢:
args
直接传递数组似乎对我有用,如:
function Git {
echo $(wsl git $args)
}
至少对于您提到的简单克隆案例(和一个简单的Git status
)。
虽然听起来这主要是您所需要的,但未来的读者应该意识到,对于更复杂的用例,这可能会失败,例如需要用户输入的任何 git 命令、使用本地 Windows 路径作为目标,或者在 UNC 路径上(包括\\WSL$\
)在执行时。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句