无论如何,Windows的Git Bash是什么?


61

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

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

在研究“什么是Git Bash”时,我读到了有关Cygwin一种名为mysys2的内容,该内容似乎与该内容有关mysysGit,并且看到了对的引用MinGW。但是,然后我在FAQ中看到,薄荷是Git Bash的默认终端。

看来,Bash应用程序实际上是专门策划的捆绑在一起的其他事物(大部分在上面列出),可以单独使用。

从根本上讲,我想知道使* nix命令ssh scp cat ls在Windows版Git Bash中工作的基础是什么?

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


在这里找到了一个很好的答案:Git Bash的确切含义是什么?
–geneorama

1
我认为Google的正式名称/名称是“ git bash”。因为两个词都是独立有意义的,所以有助于用引号引起来。
–geneorama

Reddit上有一些很好的讨论,在这里这里(2017)。他们甚至解决了我原来的rsync问题!
十八年

Answers:


72

摘要

你是正确的,混帐击的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


1
事实证明,我的大多数问题都在该项目的FAQ中得到了解答:github.com/git-for-windows/git/wiki/FAQ,我可以在google group groups.google.com/forum/#中找到更多具体信息! Forum / git-for-windows
日内瓦

@geneorama如果确实是正确,有用和有用的,那么接受这个答案应该不是问题。
walen

1
@geneorama填补空白可能是您的意图,但这不是您提出的问题。您的帖子标题为“反正Windows的Git Bash什么?” ,其主体中唯一出现的问题是“我想知道使* nix命令ssh scp cat ls在Windows的Git Bash中工作的基础是什么?” 。Pabru的帖子很好地回答了这两个问题,对于任何有相同问题的人(如前所述)都是正确的答案,因此接受它可以帮助其他用户。您是否尝试过发布有关该rsync问题的新问题?
walen

4
@walen在SO和相关站点上发布问题是如此令人不愉快,以至于我怀疑我还会再发布更多问题。这实际上是一项测试,它证实了我的感受。为了使问题简洁明了并记录我的研究(我花了一整天的时间进行研究),我想我省略了实际的问题。当我仔细编辑时,人们似乎认为简洁是缺乏研究。如果我提出的问题过于冗长,它将被忽略。无论如何,该问题都受到批评(删除了几个完全不礼貌的评论)。起初甚至连我的“著名”问题都被否定了。
–geneorama

1
@geneorama如果对您有任何帮助,您的问题甚至在阅读答案之前帮助我了解了更多有关git bash的信息。但是我明白你的意思。
walen

4

背景

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

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

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

开始: msysgit

实际上,开始可能是MSYS,但确实如此MSYS2。术语“ msysgit”是一个很好的术语,可以进行搜索以找出XYZ出现错误时正在发生的情况。诸如“ @ *#!中的所有autocrlf设置都存储在哪里?!?!!?!?”之类的东西。

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

Windows的msysGitGit之间的关系

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

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

MSYS和MinGW之间的区别

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

但是,至少Bash需要POSIX层(最显着的原因是fork()Windows上没有调用)。因此,抛出了MSYS(最小系统),提供了在Windows上提供Bash(和Per​​l)功能所需的最小系统。

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

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

终端窗口: mintty

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

MSYS2的参考

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

在引言中,这部分与我的原始问题最相关:

MSYS2由三个子系统组成及其相应的包装仓库,msys2mingw32,和mingw64

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


1
“因此,MSys附带了POSIX层(基于Cygwin的旧版本)...”-这帮助我得出结论,在Cygwin上安装git会使“用于Windows的Git Bash”成为多余的,因此我可以将其卸载。
丹尼尔·索科洛夫斯基
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.