在Windows下使用Git:MSYS还是Cygwin?

80

我计划将我的项目迁移到Git上,目前我正在考虑在Windows下哪个选项最好和/或最稳定。

从我所了解的情况来看,基本上有两个半选项:

  1. MSYSgit
  2. Cygwin下的 Git
  3. (又称为2.5) 从Cygwin提示符中使用MSYSgit(假设已安装Cygwin git)。

注意:在我看来,Cygwin本身就是一个大加分项,因为您可以访问几乎所有*nix命令行工具,而对于MSYSgit bash而言,您只能访问其中一小部分工具。

鉴于此,你会推荐哪个选项呢?

13个回答

61

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

Johannes Schindelin 在2014年10月解释说,msysgit已经被淘汰

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

我们决定逐步淘汰“msysGit”名称(以及同名的GitHub组织),并致力于Git for Windows(使用相应的GitHub组织),并将名称“Git for Windows”用于面向“最终用户”的安装程序,“Git for Windows SDK”用于面向Git for Windows开发人员的开发环境)。


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

MsysGit(现在在GitHub上)是进入Git世界的轻量快速方式:解压缩存档,启动git-cmd.batgit-bash.bat即可完成。
最新版本(1.7.10,2012年4月)现在包括对UTF-8的支持,也包含在GitExtension中。 不要忘记将autocrlf设置为false

如果你真的想使用其他的Unix命令而不是在msysgit软件包中,那么可以下载GoW(Gnu on Windows)的版本,这个版本被称为“Cygwin的轻量级替代品”。我的意思是:130个Unix命令……
Cygwin只应该作为某些情况下的备选方案,例如像incrementorhis answer中所提到的那样,用于传输速度较慢的大型Git存储库。

2012年6月:如果你想与GitHub互动,现在可以使用http://windows.github.com(另请参阅 "Designing GitHub for Windows")。
它不仅会为您配置ssh密钥(并将生成的公钥添加到您的GitHub个人资料中),而且还会安装MsysGit以进行所有git操作。


原始答案(2009年4月)

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

我成功地定义了外部工具,例如Notepad ++WinMerge(或DiffMerge)

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

最后,我期待MsysGit1.6.2.3,因为它最终将包括'git filter-branch'命令!(一个慢速版本的filter-branch,但仍然有效)。

对于Unix命令,我更喜欢安装GnuWin32 coreutils包,并在需要时才使用它们。
总的来说,我不使用Cygwin层,并成功地在基于Windows的MsysGit发布版中运行Git。

感谢您链接到core.editor设置问题。(我尝试使用像-nosession和-multiInst这样的命令行开关来使用Notepad++) - mbx
感谢您在三年后更新!开源通常是一个不断变化的领域;这个问题与三年前同样相关。 - kevinarpe
不要忘记将你的 autocrlf 设为 false。是啊,该死的差劲默认设置。 - mcandre
@VonC 晚了1.5年,但是...所以,MSysGit是Windows上的Git,而Git for Windows就是MSysGit,对吧?这只是品牌营销的事情吗? - joce
@joce 不是的,msygit 是使用 msys 1.0 的 Windows 版本 Git。现在的 Git for Windows 使用 msys2 项目。链接列在 https://dev59.com/j18d5IYBdhLWcg3weyM0#26826359 中。 - VonC
显示剩余4条评论

15

是的。老问题,新答案:

我们已经在一个大型部署中使用MSYSgit约2年了。从本地Git库服务器传输速度一直限制在不到5 MiB/s。早期对该问题的调查表明,问题在于MSYS开发人员使用Windows XP和Windows 7,这些系统会限制从命令提示符/ bash shell 进行连接。实际上,这并不是问题所在。

我发现Darrell Mozingo的博客文章并使用Cygwin安装测试了一个大型(多GB)repo的克隆。传输速度在30 MiB / s范围内。问题在于MSYSgit使用来自2007年的古老OpenSSH二进制文件。

为此,在修复之前,我现在建议转向Cygwin(尽管git版本有点落后)。我还发现Cygwin更稳定,perl运行时更少出现内存不足的情况。


看起来MinGW正在使用OpenSSH 5.4,这是从2010年的版本。 - Zombo

9

我曾尝试使用MSYS和Cygwin版本的git,老实说,我觉得两者都不是特别好用。我认为git在Windows上还没有准备好。

话虽如此,我发现MSYS版本存在一个问题,它会将非二进制文件的行结束符从UNIX风格(换行符)转换为DOS风格(回车/换行符)。你可能认为这是一个bug或一个特性,但我找不到改变这种行为的方法。(编辑:将配置变量core.autocrlf设置为false。感谢Brian。)

另一方面,与Cygwin版本相比,MSYS版本的git具有一些GUI功能,除非你想安装和运行整个X服务器,否则在Cygwin版本中无法使用。(感谢Joce确认这一点。)

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

个人而言,我会选择BazaarMercurial,这两者在我看来都对Windows有更好的支持。


3
巴扎尔也是我解决 Windows 上 Git 问题的方案。呵呵。 - Instance Hunter
9
你可以关闭行结尾的翻译。只需要将core.autocrlf设置为false即可。 - Brian Campbell
1
我们目前正在考虑选择分布式代码版本控制系统的选项。Mercurial在列表中。然而,对于非常大的项目来说,分支的成本是相当高的,这让人望而却步。Cygwin发行版带有GUI前端(需要运行X服务器)。然而,我不完全确定它添加了多少价值。 - joce
3
我正在使用msys版本,并且没有遇到任何问题。 - Ikke
2
我认为最新版本的msys在安装时会要求您配置如何处理行尾。 - Ken Liu
在Cygwin上安装和运行整个X服务器实际上非常简单--只需在安装过程中勾选一个框,并将快捷方式添加到启动文件夹即可。 - Rich

7

无论是Cygwin还是Msys Git,对于正常的使用情况都能够很好地工作。如果您想要使用git-svn等脚本,那么Cygwin更加适合。作为一个最终转向Linux的老Windows用户,我可以肯定地说,Cygwin是一个非常有用且值得拥有的工具。

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


2
我们正在谈论一个相当大的项目(32K+源文件),由一个相当小的团队(~10个程序员)开发。他们并不都精通*nix环境,但是git在日常使用中的简单性看起来很有前途。 我们还计划大量使用分支,例如一个P4更改列表<=>一个git分支。仅出于这个原因,git比Hg更有趣。 我对Cygwin vs. MSYS的担忧是Cygwin版本不如MSYS版本更新。 - joce

6
我也尝试了CygWin和MSysgit两种环境,我的经验是,在MSysgit的bash中存在一些缺陷。在同一个git仓库上无法成功运行git stash,而Cygwin却能很好地处理它。
目前还没有进行深入分析。

4

我目前使用Msysgit和TortoiseGit。

MsysGit的用户界面并不是我喜欢的,所以我使用像TortoiseGit这样熟悉的工具。当我在命令行上工作时(大部分时间),我使用来自Msysgit的git二进制文件。


3

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


1

对一个旧问题的新回答...

我正在使用来自Windows 7 cmd shell的git 1.7.3,它运行得非常好。我同时使用git命令行和git gui,两者都已经运行良好数月。我们曾经遇到过回车/换行符问题,在加入Mac开发人员后问题变得更加严重,但这些问题已经得到解决...

core.autocrlf=true
core.safecrlf=false

并不是说你不能使用*nix-y shell,只是它并非必需品。


1

我曾经在Windows上使用过Cygwin Git和Msysgit。我建议使用Cygwin + Git。Cygwin 1.7(目前处于测试版)解决了一个主要问题(至少对我来说),即在使用git gui和gitk时,早期版本的Cygwin每次都会打开10个cmd窗口。这在1.7中得到了解决。Cygwin强大的shell也带来了许多Linux终端的好处。

话虽如此,Msysgit已经发展了很多,在Windows中非常有用。但我遇到了一些问题。

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

CRLF:像往常一样,所有神秘的CRLF都会在Windows中引起问题。Msysgit可能会报告文件已修改。安装Msysgit时可以通过选择“保留行结尾不变”(忘记确切的文本)来解决此问题。

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


1

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

话虽如此,这是一个月前的事情,可能已经有所改善。


3
"MSys的cygwin"? 你的意思是MSys的Git吗? - joce
2
@Alex Gontmakher 也许更稳定,但速度极慢。请参考此帖子:https://dev59.com/juo6XIcBkEYKwwoYSClJ - WinWin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接