概括

概括

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

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

在研究“什么是 Git Bash”时,我读到了赛格威和一个不同的叫做系统管理软件,这似乎与有关msysGit,我看到了对的引用MinGW。但是,我在常见问题解答中看到薄荷味是 Git Bash 的默认终端。

看起来 Bash 应用程序实际上是一个经过特别策划的其他东西(大部分列在上方)的捆绑包,可以独立使用。

从根本上来说,我想知道使 *nix 命令(例如、、ssh和)在 Windows 版 Git Bash 中运行的基础是什么?scpcatls

(我认为一个好的答案可以帮助人们从大体上理解这些组件是如何组合在一起的,并理解这些组件的正确词语,但我不想破坏 SO 问答格式。)

答案1

概括

你是对的,适用于 Windows 的 Git Bash不仅仅是bash为 Windows 编译的。它的包包含bash(这是一个命令行外壳) 和一组其他单独的 *nix 实用程序,如、、、和ssh其他(使用 shell 运行),为 Windows 编译,以及一个名为 的新命令行界面终端窗口。scpcatfindmintty

简而言之

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

ssh、、、scp的运行方式完全相同。它们通常存储在 *nix 系统下而不是*nix 系统内,因为 Windows 和 *nix 的系统文件结构组织方式不同catfindbash/usr/binC:\Windows\system32

对于适用于 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

这有点类似于葡萄酒项目确实如此,但它将 POSIX 转换为 Windows,而不是像 Wine 那样将 Windows 转换为 POSIX。

薄荷味

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

答案2

背景

我是楼主,原本我只是想知道我用的这个东西的正式名称。

现在我认为这个名字是“适用于 Windows 的 Git Bash”。不幸的是,完整的答案很复杂,因为这个东西实际上有很多东西。

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

开始:msysgit

实际上,开头可能是MSYS,但实际上MSYS2。术语“msysgit”是一个很好的术语,可以在搜索中输入以找出 XYZ 出错时发生的情况;例如“@*#! 中的所有 autocrlf 设置都存储在哪里?!?!?!?”

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

之间的关系系统管理工具适用于 Windows 的 Git

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

另一方面,msysGit 是安装构建环境可以构建适用于 Windows 的 Git。最简单的方法是通过网络安装程序

MSYS与MinGW的区别

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

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

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

顺便说一句,为了防止完整的 README 被删除,我将其复制到了要旨

终端窗口:mintty

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

MSYS2 参考资料

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

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

MSYS2 由三个子系统及其相应的软件包存储库组成msys2,、mingw32mingw64

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

相关内容