/bin 和 /usr/bin 都挂载到 Git Bash 中的同一位置



Git Bash for Windows (v 4.4.19( 将"C:/Program Files/Git"挂载为"/"并将"C:/Program Files/Git/usr/bin"挂载为"/bin">

这意味着/usr/bin/bin将装载到完全相同的底层 Windows 文件夹。 这会产生问题,因为除非我直接/c/Program Files/git/cmd添加到我的 PATH 中,否则无法识别bashgit

有配置文件可以更改此设置吗? 为什么同一个文件夹被挂载两次?

/bin链接到/usr/bin现在也在许多Linux和Unix发行版上完成。你可以在这里阅读理由:https://www.freedesktop.org/wiki/Software/systemd/TheCaseForTheUsrMerge/

在调用 bash 之前,请确保将%PATH%(Windows CMD PATH(设置为:

set G=c:pathtolatestgit
set PATH=%G%bin;%G%usrbin;%G%mingw64bin
set PATH=%PATH%;C:windowssystem32;C:windowsSystem32Wbem;C:windowsSystem32WindowsPowerShellv1.0

然后,您将在 bash 中看到以下会话:

  • /usr/bin设置为%G%usrbin%G%mingw64bin的完整内容
  • /bin仅显示%G%bin以及内置命令

那是:

vonc@vonc:/$ ls /usr/bin|wc -l
1160
vonc@vonc:/$ ls /bin|wc -l
149

这始于2015年MingW2的支持,后来是mingw-w64项目。

然而,/bin被安装到%G%usrbin.

有配置文件可以更改此设置吗?

是:/etc/mtab

$ cat /etc/mtab
D:/prgs/git/latest / ntfs binary,noacl,auto 1 1
D:/prgs/git/latest/usr/bin /bin ntfs binary,noacl,auto 1 1
C:/Users/vonc/AppData/Local/Temp /tmp ntfs binary,noacl,posix=0,usertemp 1 1

所以/bin只挂载一次:to .

为什么同一个文件夹被挂载两次?

由于/被挂载到%G%/usr/bin也是%G%usrbin的参照(不是挂载(。

Git 2.5.2.2(2015 年 9 月(通过问题 405 和提交 bf980fd 说明了这一点。(另见PR 79(。

我自己在Windows上使用Conda时遇到了这个问题。我相信答案在 Cygwin 安装表文档中给出。默认情况下,Cygwin会自动将{cygwin-prefix}bin挂载到/usr/bin。但是,如果您的/etc/fstab中有一个条目将其他内容挂载到/usr/bin,则可以覆盖此行为。GitHub 上的这段代码看起来像该逻辑的实现。

现在精明的读者会注意到这是倒退!在最初的问题中,以及我对康达的经验,{cygwin-prefix}usrbin被安装到/bin.这是因为MSYS2使用Cygwin的分支作为运行时,切换了前缀模式。

无论哪种方式,如果您可以 编辑您的/etc/fstab,您可以避免该问题。对于我在 IE Edge Windows 10 VM 中的 Mambaforge 安装,以下行添加了一个冗余的装载,但会阻止阴影:

C:/Users/IEUser/mambaforge/Library/bin /bin whatever binary,posix=0,noacl,user 0 0

我认为,在前两项中添加/usr将适合股票Cygwin设置。

PS:至少在Conda安装中,我应该注意,虽然此解决方案在技术上是正确的,但我发现它无法可靠地工作,因为软件包更新将覆盖您的/etc/fstab文件。gitm2-filesystem包都提供(略有不同,叹息(文件的版本。我还没有尝试过,但有可能/etc/fstab.d中特定于用户的文件 ,如上面链接的 Cygwin 文档所述,可能会提供一种避免此问题的方法。但我只是用我的$PATH摸索。

最新更新