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命令的基础上ssh
,scp
,cat
,和ls
工作的Git的Bash为Windows?
(我认为一个好的答案会帮助人们大致理解这些组件如何组合在一起并理解组件的正确用语,但我不想打破 SO 问题/答案格式。)
Pab*_*bru 99
你是对的,Git Bash for Windows不仅仅是bash
为 Windows 编译的。它的包,其中包含bash
(这是一个命令行shell)和其他独立的* nix的公用事业喜欢收藏ssh
,scp
,cat
,find
和其他人(其中运行使用shell),编译Windows和一个新的命令行界面终端窗口称为mintty
.
在 Windows 上,您可能会运行类似ipconfig /all
或format G:
使用cmd.exe
. 这些命令是 下的实际可执行文件C:\Windows\system32
,存储为ipconfig.exe
和format.com
文件。cmd.exe
与两者分开,并根据用户的请求加载并运行它们。
ssh
,scp
,cat
,find
使用运行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 捆绑在一起才能创建一个可用的软件包。
通常这些额外的命令可以在 *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
.
gen*_*ama 10
我是 OP。我最初只想知道我使用的这个东西的正式名称。
现在我认为这个名字是“Git Bash for Windows”。不幸的是,完整的答案很复杂,因为这件事实际上是很多事情。
2016 年的最佳答案最初对我没有帮助,但经过大量编辑,变得越来越有用。尽管如此,它还是遗漏了我最初的一些问题。
msysgit
其实,开头大概是MSYS
,但真的MSYS2
。术语“msysgit”是一个很好的术语,用于搜索以找出 XYZ 出错时发生的情况;诸如“@*#!所有 autocrlf 设置都存储在何处?!?!?!?”
msysgit 项目中的 README ( https://github.com/msysgit/msysgit ) 解释了组件之间的关系:
msysGit和Git 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。谢天谢地它存在,但这不是我需要谷歌的东西。
他们的 wiki 是 MSYS2 环境详细信息的真正宝库:https : //github.com/msys2/msys2/wiki
在介绍中,这部分与我原来的问题最相关:
MSYS2 由三个子系统及其相应的包存储库组成
msys2
,mingw32
、 和mingw64
。
这个讨论也非常有帮助:https : //sourceforge.net/p/msys2/discussion/general/thread/dcf8f4d3/#8473/588e
归档时间: |
|
查看次数: |
139734 次 |
最近记录: |