实际上,您可以将 git bin 文件夹中的单个可执行文件添加到路径中,方法是将它们符号链接到路径变量中包含的文件夹中。
我也想在 powershell 中使用一些 git 工具,但我不想每次我想使用其中一个工具时都将 git-bin-folder 加载到路径中,而且我也不想覆盖类似的工具cp
,find
,ls
等等……
- 创建一个可以添加到路径的文件夹。我创建了我的
C:\dev\bin
并将其添加到路径变量中。
- 然后,您需要将 git bin 文件夹中的所有 dll 文件符号链接到新的 bin 文件夹,因为您将链接的工具需要它们在同一目录中(运行路径不是 git-bin-dir,而是新的 bin -目录)。我将在下面添加一个脚本来执行此操作。
- 最后,您只需要为您想在 powershell 中使用的所有工具创建符号链接(提示:ssh.exe 非常适合在 powershell 中使用;))
这是我的 powershell 函数,可以帮助您使用 git 中的所有好工具设置新的 bin 文件夹:
# generic symlink function
function Create-Symlink {
param(
[string]$link,
[string]$target
)
& cmd.exe /c mklink "$link" "$target"
}
# symlink all teh git dlls
function Create-GitDllSymlinks {
param(
[string]$newBinDir='C:\dev\bin',
[string]$gitBinDir='C:\Program Files (x86)\Git\bin'
)
$dlls = gci $gitBinDir -Filter *.dll
$dlls | foreach {
Create-Symlink -link (join-path $newBinDir $_.Name) -target $_.FullName
}
}
# to easily link your git tools
function Create-GitSymlink {
param(
[string]$executable,
[string]$newBinDir='C:\dev\bin',
[string]$gitBinDir='C:\Program Files (x86)\Git\bin'
)
if (-not $executable.EndsWith('.exe')) {
$executable = ($executable + '.exe')
}
Create-Symlink -link (join-path $newBinDir $executable) -target (join-path $gitBinDir $executable)
}
# create all dll symlinks needed
Create-GitDllSymlinks
# link ssh and ssh-keygen to use in powershell
Create-GitSymlink -executable ssh-keygen
Create-GitSymlink -executable ssh
另一个不错的事情是:
编辑:
几天前我重新安装了我的电脑(使用 Win 10)并在上面的解决方案中遇到了一些问题。显然,git 和/或 git 中的 cygwin 环境已经更新,cygwin 应用程序现在以不同的方式搜索它们的 unix-environment-paths。
比如ssh
总是说找不到我的home路径:
Could not create directory '/home/myuser/.ssh'.
The authenticity of host 'hostx (IP)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxx.
Are you sure you want to continue connecting (yes/no)?
使用procmon
我发现,它正在寻找c:\etc
和c:\home\myuser
. 设置像 HOME 或 USERPROFILE 这样的环境变量不起作用,所以我只做了两个额外的符号链接来满足我的 cygwin 工具:
PS bin # cmd /c mklink /D C:\etc "C:\Program Files\Git\etc"
symbolic link created for C:\etc <<===>> C:\Program Files\Git\etc
PS bin # cmd /c mklink /D C:\home "C:\Users"
symbolic link created for C:\home <<===>> C:\Users