【问题标题】:Difference between msysgit and Cygwin + git?msysgit 和 Cygwin + git 的区别?
【发布时间】:2011-03-09 19:33:46
【问题描述】:

msysgit 和 Cygwin + git 有什么区别?

现在我正在使用 msysgit,但我不喜欢 Git Bash(您无法调整大小或复制/粘贴),所以我正在考虑切换到 Cygwin,因为那时我可以使用 mintty

【问题讨论】:

    标签: git cygwin msysgit


    【解决方案1】:

    如果你打算在 git bash 中做的不仅仅是 git 命令,我建议 Cygwin 和 git。

    如果你打算在 git bash 中除了 git 命令什么都不做,那么 a) 当然,使用 git bash,但是 b) 为什么不直接使用 Git GUI?

    Git bash 并没有那么糟糕,但是,有时我需要将 Cygwin 用于在 git bash 中根本不起作用的事情。 (例如 Perl CPAN。另一个是 XSL 工具。)不得不使用两个完全不同的 bash 命令行实现似乎真的很愚蠢。

    【讨论】:

      【解决方案2】:

      2018 年编辑:

      自从我 2010-2012-2014 的回答以来,2015 年 Git for Windows 使用 msys2,就像我 detail here

      在“How are msys, msys2, and msysgit related to each other?”中查看更多信息。


      编辑(2 年后:2014 年 10 月)

      Johannes Schindelinjust explained(2014 年 10 月)msysgit 已被淘汰

      我们现在有一个适用于 Windows SDK 的轻量级 Git——它本质上是一个通过包管理器 mingw-get 管理的标准 MinGW/MSys 系统。

      我们决定逐步淘汰“msysGit”这个名称(以及GitHub org of the same name)并且:

      • 使用Git for Windows(使用corresponding GitHub org)
      • 为面向“最终用户”的安装程序使用名称“Git for Windows”,并且
      • 为面向 Windows 开发人员的 Git 开发环境使用名称“Git for Windows SDK”。

      2 年后更新:2012 年 7 月

      Msysgit 将继续存在,除非您需要add a few hundreds of MB for cygwin,否则您真的不需要 Cygwin 就可以在 Windows 上使用 Git。
      如果你想访问 GitHub,你会得到一个带有 GitHub for windows 的包(“Git for Windows” + 在你的 GitHub 帐户上为你注册的 ssh 密钥 + 一个漂亮的 GUI)。

      Gitmsysgit 都在 GitHub 上。
      msysgit.github.com 页面清楚地说明了两者之间的区别:

      <---------->
      Git for Windows”:Git 的纯用户 | “MsysGit”:适用于测试人员、开发人员、自定义安装程序维护人员

      另见the msysgit FAQ

      “MSysGit”中的这个“MSys”是什么?

      MSys 是一个 Windows 环境,提供 Unix 类型的 shell 和 Perl 解释器。由于 Git 的许多部分仍然不是用 C 编写的内置程序,而是用 shell 和 Perl 脚本编写的,所以 Windows 版 Git 需要这样的环境。

      因此,我们为 Windows 提供了一个非常小的 MSys 版本的 Git。

      构建 Git 也需要 MSys,因为我们重复使用上游 Git 使用的相同 Unix 类型设置。我们提供了一个更完整的 MSys 环境,包括 GCC,作为构建环境(因此昵称为“msysGit”)。

      不过,我们将 Git 编译为纯 MinGW 程序,即除了标准 Windows 库之外没有任何链接依赖的程序。
      因此,除非您需要使用仍然仅作为 shell 或 Perl 脚本实现的 Git 的任何部分,否则您可以运行普通的 git.exe。


      原始答案:2010 年 6 月

      a/ 您可以在 Git bash 中调整大小并复制粘贴,就像在任何其他 Windows Shell 中一样。

      b/ 您可能正在使用“Git for windows”,而不是 msysgit。来自the wiki

      • msysGit 是为 Windows 编译 Git 的开发环境。它是完整的,你只需要安装 msysGit,然后你就可以构建 Git。无需安装任何第三方软件。
      • Git for Windows 是一个安装 Git 的安装程序 - 并且只安装 Git

      很容易看出区别:

      • Git 的安装程序具有前缀 Git-,
      • msysGit 安装程序具有前缀 msysGit-。

      另一个迹象是 msysGit 安装程序有两种形式:fullinstall 和 netinstall。
      此外,msysGit 默认不会安装到C:\Program Files
      但是 msysGit 带有gcc,即 GNU C 编译器。

      c/来自MSysGitHerald10:

      记住:

      • MinGW 确实是 Microsoft 运行时之上的一个非常薄的编译时层;因此,MinGW 程序是真正的 Windows 程序,没有 Unix 风格的路径或诸如 fork() 调用之类的 POSIX 细节的概念。
      • 相比之下,MSys 是 Cygwin 的精简版本(当时是旧版本),其唯一目的是提供足够的 POSIX 层来运行 bash。

      那是not always welcomed:

      在 Windows 上工作时,我不喜欢 msysGit,顾名思义,它依赖于 MSYS 和来自 Unix 世界的工具。我相信 Git 发行版中的所有程序都应该成为为特定平台编译的二进制文件,而不是依赖 shell 解释器或 Tcl/Tk 等第三方语言。

      尽管如此,它比 2007 年的第一批 Git on Cygwin 安装要好得多。

      【讨论】:

      • a) 如何在 Git bash 中激活调整大小和复制/粘贴? b) 不知道是不是一样,但是我用的是msysgit。
      • @nusbit: a) 与任何 Windows shell 一样:参见superuser.com/questions/92040/… 或(更清晰)astahost.com/info.php/Command-Prompt-Tips_t10211.html#137177 b) msysgit 是项目的名称,其中包括“Git for Windows”(您必须拥有安装了“Git-1.7.0.2-preview20100309.exe”) msysGit本身(Windows版Git的开发环境的安装程序:msysGit-netinstall-1.7.1-preview20100612.exe)。
      • a) 我看到你没有安装 Git Bash。因为它不像任何 Windows 外壳。你不能调整大小就像 windows cmd 或其他窗口一样。
      • @nusbit:我的 git bash 快捷方式指向 C:\WINDOWS\system32\cmd.exe /c ""C:\Program Files\Git\bin\sh.exe" --login -i"。你的 Git bash 快捷方式指的是什么?当我打开这个窗口(有一个垂直的 Git 词作为徽标)时,我可以右键单击标题栏(上面有 MINGW32:~/.)并查看通常的上下文菜单(恢复/移动/大小/最小化/最大化/关闭/编辑/默认/属性)。您是否看到相同的上下文菜单?
      • @devdar msysgit 只是用于 Windows 的 Git。而且 Git 不管理用户权限。只有像 Gitolite 这样的授权层(gitolite.com/gitolite/auth.html)可以。
      【解决方案3】:

      这是 2018 年的答案...

      Git for Windows 基于MSYS2

      MSYS2 最初的想法是重新启动 MSys 项目,经常使用 Cygwin 进行更新,并保持 MSys 的精神,提供一个非常精简的 POSIX 层,本质上是 Cygwin 的最低版本。 MSYS2 还具有包管理器 (pacman) 并能很好地保持这些包的最新状态。

      ..

      MSYS2 的运行时是在 Windows 内核之上运行的精简、稍加修改的 Cygwin 运行时,而 Linux 的运行时是 Linux 内核,完全作为单独的操作系统运行。

      https://github.com/git-for-windows/git/wiki

      Cygwin 提供了一个名为 cygwin1.dll 的运行时库,它在必要时提供了 POSIX 兼容层。此库的 MSYS2 变体称为 msys-2.0.dll,包括以下更改以支持使用本机 Windows 程序:How does MSYS2 differ from Cygwin

      【讨论】:

        【解决方案4】:

        这是 2017 年的答案...

        根本的技术区别是所有cygwin程序都依赖于cygwin1.dll;但这同时也是最终用户最不感兴趣的一个,因为它应该几乎是完全透明的。我发现的主要区别并不在于 git 版本之间,而在于 cygwin 环境和 msys/mingw 环境之间。这些是我发现的一些差异:

        • ACL 处理。较新的(2015 年后)cygwins 处理 NTFS 访问控制列表的方式可能令人讨厌到危险的程度。默认情况下,安装 Windows 驱动器时 acl 选项处于活动状态。 Cygwin 试图通过重新洗牌和滥用 ACL 条目来模仿 POSIX 权限,这种方式可能无法通过本机 Windows 程序进行访问。此外,在多用户多域(即商业或机构)安装中,由于网络访问,文件访问可能会显着减慢,因为确定用户和权限可能需要对每个文件进行域服务器查询。

          msys 默认使用-noacl 选项挂载。在 cygwin 中也这样做似乎可以避免这些问题。
        • 速度。我目前正在一个包含 100k 个文件的存储库中工作(不要问)。在缓存中包含所有相关磁盘内容的git status 使用 cygwin 需要 4.7 秒,使用 msys git 需要 0.4 秒。我不确定 cygwin 兼容层的哪一部分正在减慢速度——锁、分叉、文件系统、IPC……它们都是候选者。
        • 可能是文件名。我没有调查过这个问题,但我怀疑针对 windows(如 msys git)的 g​​it(和其他工具)可以更好地处理 windows 文件名。在 cygwin 下,必须通过cygpath 在两个世界之间努力转换文件名。当脚本等与 Windows 程序交互时,这将发挥重要作用。

        编辑:通过一些小的调整,可能并不明显可以在 cygwin 和 Msys2 之间共享 git(但不仅是 git)的通用设置。如果我没记错的话,一个好方法是在 Windows 系统设置中设置 HOME 环境变量;那么 Msys2 和 cygwin 都将使用该目录并因此使用相同的点文件,其中包括 ~/.gitignore。这使得在 cygwin 和 Msys2 终端之间进行更改非常轻松(想想~/.inputrc~/.bashrc~/.profile...)。

        【讨论】:

          【解决方案5】:

          cygwin 以 windows 格式查看本地文件,而 git-bash 以 unix 格式查看它们。如果您在 git-bash 中签出文件,然后在 cygwin shell 上运行 git status,git 认为您已经修改了 repo 中的每一行,如果您在 git-bash shell 中运行 git status,那么只有您接触过的文件被修改。

          【讨论】:

          • 三年后:如果“windows/unix 格式”指的是行尾,cygwin 在这方面是可配置的(对于 /etc/fstab 文件中的某些路径使用挂载选项 text 进行自动行尾转换)。如何保留行尾也取决于您的编辑器;除了 cygwin 之外,现代的也可以在这方面进行配置。我正在并行使用 cygwin 和 windows git,现在它工作正常。
          【解决方案6】:

          Msysgit 已经收到了许多补丁来处理 Windows 特定的问题,例如文件系统不区分大小写、文件锁定等。使用 cygwin 版本可能是个坏主意。如果您的系统上有 cygwin,我建议您根本不要安装 git,最好不要从同一 PATH 共享 msysgit 或 cygwin 环境。

          【讨论】:

            【解决方案7】:

            MSysGit 附带一个非常旧的 SSH 版本。我的系统的吞吐量约为 10 mbit。如果您不关心克隆速度,那么这不会影响您。解决方法是运行 Cygwin Git 或 replace the SSH installed in MSysGit

            【讨论】:

              【解决方案8】:

              cygwin + git 是让 git 回到过去的唯一方法。现在有了 msysgit,我看不出有任何理由使用 cygwin。

              我同意 git bash 不是那么好.. 所以我要做的是

              1. 在需要命令行时将 git 放入路径并使用窗口命令提示符
              2. 安装了 tortoise git,以便在我的 git 有 GUI 时使用

              【讨论】:

              • 对于一个真正喜欢命令行界面的用户来说,我觉得windows命令提示符不是一个很好的解决方案……
              • 这不是我的问题的答案,cygwin 和 msysgit 之间有什么不同。
              【解决方案9】:

              cygwin 上的当前 git 版本是 1.7.5.1,非常非常新(2011 年 5 月)。

              我认为(到目前为止)没有理由使用其他任何东西,但我正在考虑尝试使用 msysgit(又名“Git for Windows”)(当前版本为 1.7.4)。

              【讨论】:

                【解决方案10】:

                msysgit 中的 bash 实现是旧的。但是,我在编辑时使用 vim,效果很好。至于剪切和粘贴,我经常使用 SHIFT+ALT+[空格]、E、M 或任何键来标记我想要的文本。不理想,但做得足够好,因为我不会过多地剪切和粘贴。

                我现在已经开始通过 VirtualBox 在同一台机器上运行 Ubuntu。通过无缝模式和共享文件夹,我可以利用最新的 bash 和快速的 Git。

                如果需要,我不使用任何用于 Git 的 gui 工具,除了 gitk(用于 gitk --all)来可视化历史记录。

                我试过 cygwin 但不喜欢它。如果 msysgit 对你不够用,虚拟盒子解决方案会好得多。

                【讨论】:

                • VirtualBox 的想法很好,但对我来说有点费力。我宁愿使用 cygwin 或 msyswin。
                • 为什么不直接连接到使用共享文件夹运行的虚拟盒子实例?设置完成后,我不确定那会很费力..
                猜你喜欢
                • 2012-03-06
                • 2014-04-14
                • 2012-05-29
                • 1970-01-01
                • 1970-01-01
                • 2011-05-02
                • 2014-07-26
                • 1970-01-01
                • 2011-04-09
                相关资源
                最近更新 更多