什么是 Windows 版 Git Bash?

gen*_*ama 92 windows bash rsync mingw

我很高兴使用来自https://git-scm.com/ 的Git 和 Git Bash 。这里有一个包含更多信息的页面:https : //git-for-windows.github.io/

昨天我遇到了一个问题rsync,我开始深入研究适用于 Windows 的 Git Bash。我意识到我什至不确定 Bash 程序的名称,因为它只是与 git-scm 下载捆绑在一起。我称之为 Windows 版 Git Bash,这似乎很合理。

在寻找到“什么是Git的打击”我读到Cygwin的不同的东西叫msys2,这似乎是有关msysGit,我看到引用MinGW。但是,然后我在 FAQ 中看到mintty是 Git Bash 的默认终端。

似乎 Bash 应用程序实际上是一个特别策划的捆绑其他东西(主要在上面列出),这些东西可以独立使用。

从根本上说,我想知道那是什么使得像* nix命令的基础上sshscpcat,和ls工作的Git的Bash为Windows?

(我认为一个好的答案会帮助人们大致理解这些组件如何组合在一起并理解组件的正确用语,但我不想打破 SO 问题/答案格式。)

Pab*_*bru 99

概括

你是对的,Git Bash for Windows不仅仅是bash为 Windows 编译的。它的包,其中包含bash(这是一个命令行shell)和其他独立的* nix的公用事业喜欢收藏sshscpcatfind和其他人(其中运行使用shell),编译Windows和一个新的命令行界面终端窗口称为mintty.

简而言之

在 Windows 上,您可能会运行类似ipconfig /allformat G:使用cmd.exe. 这些命令是 下的实际可执行文件C:\Windows\system32,存储为ipconfig.exeformat.com文件。cmd.exe与两者分开,并根据用户的请求加载并运行它们。

sshscpcatfind使用运行bash在完全相同的方式。它们通常存储在*nix 系统下/usr/bin而不是存储在C:\Windows\system32*nix 系统中,因为 Windows 和 *nix 的系统文件结构不同。

对于 Windows 版 Git Bash,这些程序位于 Git 安装文件夹中:C:\Program Files\Git\usr\bin,也可以在模拟的 Linux 环境中找到/usr/bin

就像只能cmd.exe在 *nix 上运行不允许你在没有其他系统实用程序的情况下做很多事情一样,仅仅能够在 Windows 上运行 Bash 也不是很有用。这意味着所有这些额外的命令都必须与 Bash 捆绑在一起才能创建一个可用的软件包。

详细信息:Windows 上的 POSIX 应用程序

通常这些额外的命令可以在 *nix 系统上找到,而不是在 Windows 上,因为它们是针对 POSIX 编程 API(这是 *nix 使用的)而不是 Win32 API(这是 Windows 使用的)进行编程的。POSIX API 文档是公开可用的,因此有些人已将其移植到其他系统,包括 Windows。POSIX API/库的 Windows 实现由Cygwin和提供MSYS

这有点类似于Wine 项目所做的,但它转换 POSIX->Windows 而不是像 Wine 那样转换 Windows->POSIX。

薄荷味

mintty包含在内是因为cmd.exe默认的 Windows 命令行窗口缺少一些通常在大多数 *nix 系统上可用的重要功能。在大多数情况下,mintty是运行命令的更好选择(当然对于 Windows 版 Git Bash 包附带的实用程序),但有时 Windows 系统应用程序可能会更好地使用cmd.exe.

  • @walen 在 SO 和相关网站上发布问题是如此令人不快,以至于我怀疑我是否会发布更多问题。这实际上是一个测试,它证实了我的感受。为了保持问题简洁并记录我的研究(我花了一整天的时间研究),我想我遗漏了实际的问题。当我仔细编辑时,人们似乎认为简洁是缺乏研究。如果我把问题说得太冗长,它就会被忽略。无论如何,这个问题都会受到批评(一些彻头彻尾的粗鲁评论已被删除)。甚至我的“著名”问题一开始也被严重否决。 (4认同)
  • 事实证明,我的大部分问题都在项目的常见问题解答中得到了解答:https://github.com/git-for-windows/git/wiki/FAQ,我可以在谷歌组 https://groups 中找到更多具体信息。 google.com/forum/#!forum/git-for-windows。 (2认同)
  • @geneorama 填补这个空白可能是您的意图,但这不是您提出的问题。你的帖子的标题是 _“Windows 上的 Git Bash 是什么?”_,其正文中唯一的问题是 _“我想知道像 `ssh` `scp` 这样的 *nix 命令的基础是什么cat` `ls` 在 Windows 版 Git Bash 中工作吗?"_. Pabru 的帖子很好地回答了这两个问题,并且对于任何可能有相同问题(如上所述)的人来说都是正确的答案,因此通过接受它,您正在帮助其他用户。您是否尝试过针对“rsync”问题发布新问题? (2认同)
  • @geneorama如果这对你有任何安慰,你的问题帮助我在阅读答案之前了解更多关于 git bash 的信息。但我明白你的意思。 (2认同)

gen*_*ama 10

背景

我是 OP。我最初只想知道我使用的这个东西的正式名称。

现在我认为这个名字是“Git Bash for Windows”。不幸的是,完整的答案很复杂,因为这件事实际上是很多事情。

2016 年的最佳答案最初对我没有帮助,但经过大量编辑,变得越来越有用。尽管如此,它还是遗漏了我最初的一些问题。

开始: msysgit

其实,开头大概是MSYS,但真的MSYS2。术语“msysgit”是一个很好的术语,用于搜索以找出 XYZ 出错时发生的情况;诸如“@*#!所有 autocrlf 设置都存储在何处?!?!?!?”

msysgit 项目中的 README ( https://github.com/msysgit/msysgit ) 解释了组件之间的关系:

msysGitGit for Windows的关系

Git for Windows是安装在 Windows 上运行 Git 的最小环境的软件包。它带有一个 Bash(一个 Unix 类型的 shell)、一个 Perl 解释器和 Git 可执行文件及其依赖项。

另一方面,msysGit 是安装构建环境的软件包,可以为 Windows 构建 Git。最简单的方法是通过网络安装程序安装它。

MSYS和MinGW的区别

MinGW的项目的目标是提供一种方式来编译原生的Windows二进制文件使用GNU C编译器没有POSIX层。

然而,至少 Bash 需要一个 POSIX 层(最显着的原因是fork()在 Windows 上没有调用)。因此,引入了 MSYS(最小系统),提供在 Windows 上提供 Bash(和 Perl)功能所需的最小系统。

因此,MSYS 附带了一个 POSIX 层(基于旧版本的 Cygwin),该层仅由 Bash 和 Perl 使用,但不能由该环境中编译的任何内容使用。

顺便说一句,以防万一完整的自述文件被删除,我将其复制到gist 中

终端窗口: mintty

Windows 版 Git Bash 的另一部分是实际的 Windows 命令行 mintty。谢天谢地它存在,但这不是我需要谷歌的东西。

MSYS2 参考

他们的 wiki 是 MSYS2 环境详细信息的真正宝库:https : //github.com/msys2/msys2/wiki

在介绍中,这部分与我原来的问题最相关:

MSYS2 由三个子系统及其相应的包存储库组成msys2mingw32、 和mingw64

这个讨论也非常有帮助:https : //sourceforge.net/p/msys2/discussion/general/thread/dcf8f4d3/#8473/588e

  • “因此,MSys 附带了 POSIX 层(**基于旧版本的 Cygwin**)...” - 这帮助我得出结论,在 Cygwin 上安装 git 会使“Git Bash for Windows”变得多余,因此我可以卸载它。 (2认同)