【问题标题】:Git under windows: MSYS or Cygwin?windows下的Git:MSYS还是Cygwin?
【发布时间】:2010-10-21 11:58:48
【问题描述】:

我计划将我的项目迁移到 git,我目前想知道在 windows 下哪个是最好和/或最稳定的选项。

据我所知,我基本上有 2.5 个选项:

  1. MSYSgit
  2. Cygwin下的git
  3. (又名 2.5)来自 Cygwin 提示符的 MSYSgit(假设 Cygwin git 已安装)。

注意:IMO Cygwin 本身就是一大优势,因为您可以访问几乎所有的 *nix 命令行工具,而使用 MSYSgit bash,您只能访问这些工具的一小部分。

鉴于此,您会建议什么选择?

【问题讨论】:

    标签: git cygwin msysgit dvcs


    【解决方案1】:

    编辑(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”)。


    编辑(3 年后:2012 年 4 月)

    MsysGit(现为 on GitHub)是您想要在 Git 世界中快速启动的最佳选择:解压缩存档,启动 git-cmd.batgit-bash.bat,然后就完成了。
    它的latest release (1.7.10, April 2012) 现在包括support for UTF-8,也包括included in GitExtension。 不过不要忘记设置您的autocrlf to false

    如果您真的缺少所有其他 unix 命令而不是 msysgit 的软件包,只需下载 GoW (Gnu on Windows) 的版本,恰当地命名为“Cygwin 的轻量级替代品”。
    我的意思是:130 unix commands...

    Cygwin 应该是仅适用于某些情况的备份解决方案,例如 大型 Git 存储库的传输速度,如下文 incrementorhis answer 中所述。


    2012 年 6 月:如果您想与 GitHub 互动,您现在拥有 http://windows.github.com(另请参阅“Designing GitHub for Windows”)。
    它不仅会为您配置 ssh 密钥(并将生成的公钥添加到您的 GitHub 配置文件中),而且还会为所有 git 操作安装一个... MsysGit。


    原始答案(2009 年 4 月)

    我对最新版本的 MsysGit 没有任何问题:
    我使用option 2,这意味着我只将 git\bin 目录添加到 PATH 环境变量中,但没有覆盖一些内置的 windows 工具。

    我设法定义了外部工具,例如 Notepad++WinMerge (or DiffMerge)

    我确实成功运行了像 svn2git 这样的脚本,因为从 MsysGit1.6.2+ 开始,它确实包含了“git svn”命令。

    最后我期待 MsysGit1.6.2.3 will include finally 'git filter-branch' command! (过滤器分支的慢版本,但仍然如此)。

    对于 Unix 命令,我更喜欢安装一个GnuWin32 coreutils package,仅在需要时使用。

    所以总而言之,我不使用 Cygwin 层,并设法在其基于 Windows 的版本 MsysGit 中很好地运行 Git。

    【讨论】:

    • 我也使用 p4merge,这很酷。我读过 git 和 unicode 文件名存在问题。
    • 感谢您链接到 core.editor 设置问题。 (我尝试将 Notepad++ 与 -nosession 和 -multiInst 等命令行开关一起使用)
    • 这个答案并没有真正回答为什么一个人会使用另一个。 IMO下面有更好的答案
    • @SebastienMartin 在这种情况下,您应该向 OP (Joce) 提及它。否则他不会被告知他应该选择的更好的答案。
    • @SebastienMartin 我已经用更多最新信息更新了这个旧答案。
    【解决方案2】:

    是的。老问题。新答案:

    我们已经在大型部署中使用 MSYSgit 大约 2 年了。从本地 git 存储库服务器的传输速度被限制为小于 5 MiB/s。对该问题的早期调查表明,问题在于 MSYS 开发人员在 Windows XP 和 Windows 7 上安全限制了来自命令提示符/bash shell 的连接。事实上,这似乎不是问题。

    我发现了Darrell Mozingo's blog posting,并仅使用 Cygwin 安装测试了一个大型(许多 GiB)存储库的克隆。传输速度在 30 MiB/s 范围内。问题是 MSYSgit 使用了 2007 年的老式 OpenSSH 二进制文件。

    为此,在此问题得到解决之前,我现在建议转向 Cygwin(即使 git 的版本有点落后)。我还发现 Cygwin 更稳定,perl 内存不足的可能性更小。

    【讨论】:

    • 看起来 MinGW 使用的是 2010 年的 OpenSSH 5.4
    【解决方案3】:

    我已经尝试过使用 MSYS 和 Cygwin 版本的 git,老实说,我没有发现这两种体验特别好。我只是认为 git 还没有真正为 windows 做好准备。

    话虽如此,我在 MSYS 版本中发现的一个问题是,它将(非二进制)文件的行尾从 UNIX 样式(换行)转换为 DOS 样式(回车/换行)喂养)。您可能认为这是一个错误或一个功能,但没有办法改变我能找到的行为。 (编辑:将配置变量 core.autocrlf 设置为 false。感谢 Brian。)

    OTOH,MSYS 版本的 git 具有一些在 cygwin 版本中不可用的 GUI 功能,除非您想安装和运行整个 X 服务器。 (感谢 Joce 确认。)

    我的印象是 MSYS 版本更受欢迎,虽然这可能是因为你不需要安装 cygwin 生态系统来使用它。 (我同意,cygwin 非常有用。)

    就我个人而言,我会选择BazaarMercurial,两者都对windows IMO 有更好的支持。

    【讨论】:

    • Bazaar 也是我对 Windows 上 Git 问题的解决方案。呵呵。
    • 可以关闭行尾翻译。您只需要将 core.autocrlf 设置为 false。
    • 我们目前正在检查我们的 DCVS 选项。 Mercurial 在名单上。然而,分支的成本,特别是对于非常大的项目,是相当令人讨厌的。 Cygwin dist 带有一个 GUI 前端(以运行 X 服务器为代价)。但是,我不完全确定它增加了多少价值。
    • 我用的是msys版本,没有遇到任何问题。
    • 我认为最新版本的 msys 要求您在安装时配置如何处理行尾。
    【解决方案4】:

    Cygwin 和 Msys Git 都适用于正常的用例。如果你想使用 git-svn 等脚本,Cygwin 是一个更好的选择。作为一个最终转向 Linux 的老 Windows 用户,我可以肯定地说 Cygwin 是一个巨大的福音,值得拥有。

    上下文很重要;这些是什么项目?它们被谁使用?等等。

    【讨论】:

    • 我们谈论的是一个相当大的项目(32K+ 源文件),由一个相当小的团队(约 10 个 progs)开发。并非所有人都精通 *nix 环境,但日常使用的 git 的简单性看起来很有希望。我们还计划大量使用分支,例如一个 P4 变更列表 一个 git 分支。仅出于这个原因,例如 git 就比 Hg 有趣得多。我对 Cygwin 与 MSYS 的担心是 Cygwin 版本不如 MSYS 版本最新。
    【解决方案5】:

    我也测试了两个世界(CygWin 和 MSysgit),我的经验是 MSysgit bash 也有一些缺点。当 Cygwin 在同一个 git 存储库上优雅地处理它时,无法成功运行 git stash。

    虽然还没有进行深入的分析...

    【讨论】:

      【解决方案6】:

      我目前将 Msysgit 与 TortoiseGit 一起使用。

      MsysGit UI 不是我真正喜欢的,所以我使用了一个熟悉的工具,比如 TortoiseGit,在命令行上工作时(大部分时间),我使用来自 Msysgit 的 git 二进制文件

      【讨论】:

        【解决方案7】:

        我会推荐 msysgit。特别是如果它与Git Extensions 一起使用:它提供了简单的环境配置方法:编辑器/差异/合并工具,并允许从用户界面进行高级 git 操作。

        【讨论】:

          【解决方案8】:

          我在 MSys 的 cygwin 实现中遇到了严重的错误:一些命令,尤其是 rebase,很容易失败。 Cygwin 对我来说更稳定。

          也就是说,这是一个月前的事了,从那以后可能会有所改善。

          【讨论】:

          【解决方案9】:

          我在 Windows 上使用过 Cygwin Git 和 Msysgit。我建议使用 Cygwin + Git。 Cygwin 1.7(目前处于测试阶段)在使用 git gui 和 gitk 时解决了一个主要的细微差别(至少对我而言)。每次我在 git-gui 或 gitk 中做某事时,Cygwin 的早期版本都会打开 10 多个 cmd 窗口。这已在 1.7 中解决。 Cygwin 强大的 shell 也带来了许多 linux 终端的优点。

          也就是说,Msysgit 已经发展了很多,并且在 Windows 中非常有用。不过,我遇到了几个问题。

          权限问题:在 Windows 中本地创建的一些文件的模式为 755,在使用 Msysgit 时转换为 644。这将显示为修改后的文件。签入应该可以解决此问题。

          CRLF:像往常一样难以捉摸的 CRLF 在 Windows 中产生问题。 Msysgit 可能会报告文件已修改。这可以通过在安装 Msysgit 时选择“保持行尾不变”(忘记确切的文本)来解决。

          守护进程:是的,我仍然觉得在 Msysgit 中设置 git 守护进程很困难。

          【讨论】:

            【解决方案10】:

            旧问题的新答案...

            我在 Windows 7 cmd shell 中使用 git 1.7.3,效果很好。我混合使用了 git 命令行和 git gui,几个月来都运行良好。我们确实遇到了回车/换行问题,当我们将 Mac 开发人员添加到团队中时问题更加严重,但这些问题已经通过 ...

            core.autocrlf=true
            core.safecrlf=false
            

            并不是说您不应该使用 *nix-y shell,只是说没有必要。

            【讨论】:

              【解决方案11】:

              我对@9​​87654321@ 持保留意见,因为我只想要 git 而不是 Cygwin 想要插入的任何其他工具。通常你希望你的 windows 计算机像 windows 计算机一样工作,而 CygWin 想要拍一些完全不同的东西.只是为了好玩而使用 *nix 功能是不行的。

              问题是,如果我想像命令行一样使用 *nix,我会转到我的 Linux 机器并在该计算机上工作。 Virtual computersremote desktops 现在工作起来就像一个魅力,并且对开发人员来说足够容易访问。

              您使用 CygWin 确实需要有正当理由。如果只是为了使用 git,我建议您改用 MSysGit,这是我的偏好。它与捆绑的 gitk 和 git-gui 工具配合得非常好。我一直在使用 msysgit 开发 Eclipse 和 Visual Studio,它就像一个魅力。

              我现在唯一等待的是一个完全正常工作的Tortoise clone for git

              【讨论】:

              • 至少在 2017 年 3 月 13 日,Cygwin 的 git 版本是 2.8.3,我在更新时遇到了一些 Perl 问题。 Git Bash MinGW 是 2.12。
              【解决方案12】:

              在 Windows 下有一种情况,您只需必须通过 Cygwin 使用 Git:这是当您想针对 SVN 服务器使用 Git 时,该服务器需要 SVN 客户端版本高于 1.5。存在 SVN 预提交钩子,当没有 'mergeinfo' 参数时会阻止提交 - 并且 'mergeinfo' 参数仅在 1.5 版后才在 SVN 中为默认值。 The problem with msysGit is, that it is build against an older SVN version (1.4.6), so you can't successfully commit in this case. 但是使用 Cygwin 的 Git 是可能的,因为它是针对较新的 SVN 版本构建的。

              【讨论】:

                【解决方案13】:

                如果您只想执行简单的操作,例如推/拉/分支,您可以尝试 Atlasian 的 SourceTree。一个非常简单明了的 Git 命令用户界面。但是它有缺点。

                如果您需要使用命令行 git 工具,只需获取 Git for windows 工具即可。应该足够了,除非您开始研究 bash 脚本。

                【讨论】:

                  猜你喜欢
                  • 2015-08-13
                  • 2012-11-10
                  • 2017-04-14
                  • 1970-01-01
                  • 2015-03-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-06-07
                  相关资源
                  最近更新 更多