【问题标题】:/bin and /usr/bin both being mounted to same location in Git Bash/bin 和 /usr/bin 都被挂载到 Git Bash 中的相同位置
【发布时间】:2019-03-17 22:48:55
【问题描述】:

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

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

【问题讨论】:

  • 我想指出,到目前为止还没有人回答这个问题。
  • 请使用git --version而不是bash --version来描述您正在使用的git-bash的版本号。

标签: windows git-bash


【解决方案1】:

确保在调用 bash 之前将您的 %PATH% (Windows CMD PATH) 设置为:

set G=c:\path\to\latest\git
set PATH=%G%\bin;%G%\usr\bin;%G%\mingw64\bin
set PATH=%PATH%;C:\windows\system32;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\

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

  • /usr/bin 设置为%G%\usr\bin%G%\mingw64\bin 的全部内容
  • /bin 只显示%G%\bin 加上builtin commands only

即:

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

support of MingW2 in 2015 开始,然后是 mingw-w64 项目。

然而,/bin 被挂载到 %G%\usr\bin

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

是的:/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 只安装一次:到 .

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

由于/ 挂载到%G%/usr/bin 也是%G%\usr\bin 的引用(不是挂载)。

Git 2.5.2.2(2015 年 9 月)通过 issue 405commit bf980fd 说明了这一点。 (另见PR 79)。

【讨论】:

  • 从多个方向解决此问题后,这似乎不起作用。我尝试通过控制面板中的环境变量对话框添加到用户的路径。我尝试通过 AutoStart cmd 文件添加它,并尝试从 cmd 手动设置。我可以确认 %PATH% 变量是正确的,但是 /bin 目录仍然挂载到 C:\Program Files\Git\usr\bin 路径(如 /proc/mounts 中所示)。我似乎记得不久前的一个配置文件,但已经很久了。我也希望 bash 能够选择 PATH,无论它是如何打开的。
  • @drz 同意。我已经编辑了答案。并添加了配置文件。
  • 当我第一次开始尝试解决这个问题时,我查看了 /etc/mtab 文件。它符号链接到 /proc/mounts,而 /proc/mounts 又链接到 /proc/self/mounts。 /proc/self 链接到 /proc 下的编号目录,运行 ps 显示该目录是 bash 实例的 PID。每个新的 bash 实例都会获得一个新的 PID,从而在 /proc 下获得一个新文件夹。 cat 对挂载点确实显示了已挂载的内容,但该文件不可编辑。由于 stat 总是显示创建时间等于现在,大小为 0,并且 chmod 不适用于此文件,我不得不假设它实际上是由 bash 创建的。
【解决方案2】:

/bin 链接到/usr/bin 是现在许多 linux 和 unix 发行版上正在做的事情。你可以在这里阅读原因:https://www.freedesktop.org/wiki/Software/systemd/TheCaseForTheUsrMerge/

【讨论】:

  • 我同意这可能是他们试图做的事情(cygwin 做了类似的事情,但方向相反),但是,除非明确 $GITPATH/bin(我的系统上的/c/Program Files/Git/bin)添加到路径中,gitbash 实际上不可用。对我来说,这表明 Mingw64 上的实现被破坏了,因为 /usr/bin 和 /bin 没有正确统一。它仍然没有回答是否可以改变这种行为的问题,或者是否有来自 Mingw64/git for windows 的文档,解释为什么做出这个决定的项目。
猜你喜欢
  • 2013-11-17
  • 2019-04-05
  • 2021-05-21
  • 1970-01-01
  • 2014-03-03
  • 2013-04-22
  • 2023-03-05
  • 1970-01-01
相关资源
最近更新 更多