在Windows下的Git:MSYS或Cygwin?

我打算把我的项目迁移到git,而且我现在想知道哪个是windows下最好和/或最稳定的选项。

从我收集我基本上有2.5个选项:

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

注意:IMO Cygwin本身就是一个很大的优势,因为你可以访问几乎所有的* nix命令行工具,就像在MSYSgit bash中那样,你只能访问这些工具的一小部分。

鉴于此,你有什么build议?

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

Johannes Schindelin 刚才解释说 (2014年10月) msysgit已经被淘汰

我们现在拥有一个轻量级的Windows SDK Git,它基本上是一个通过包pipe理器mingw-getpipe理的标准MinGW / MSys系统。

我们决定只淘汰名称“msysGit”(以及同名的GitHub组织) ,并在Git for Windows (使用相应的GitHub组织)上工作 ,并使用名为“Git for Windows”的安装程序在针对Windows开发人员的Git开发环境的“最终用户”和“Git for Windows SDK”)。


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

如果你想在Git世界轻松快速启动,MsysGit(现在在GitHub上 )是解决问题的办法:解压缩文件,启动git-cmd.batgit-bash.bat ,就完成了。
其最新版本(2012年4月1.7.10版)现在支持UTF-8 ,也包含在GitExtension中 。 不要忘了把autocrlf设置为false 。

如果你真的错过了所有其他的unix命令,而不是使用msysgit的软件包,只需下载一个GoW(Gnu on Windows)发布版本,恰当地命名为“Cygwin的轻量级替代品”。
我的意思是: 130个 unix命令 s …

Cygwin应该只是在某些情况下的一个备份解决scheme,比如大的 Git仓库的传输速度,如下面的增量在他的答案中所提到的。


2012年6月:如果您想与GitHub交互,您现在已经有了http://windows.github.com (另请参阅“ 为WindowsdeviseGitHub ”)。
它不仅会为您configurationssh密钥(并将生成的公钥添加到您的GitHubconfiguration文件中),还会为所有git操作安装一个… MsysGit。


原文答复(2009年4月)

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

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

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

最后我期待MsysGit1.6.2.3,因为它最终会包含' git filter-branch '命令 ! (缓慢版本的filter分支,但仍然)。

对于Unix命令,我宁愿安装一个GnuWin32 coreutils软件包 ,只在需要时使用它们。

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

是。 老问题。 新答案:

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

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

为此,在这个问题得到解决之前,我现在推荐转换到Cygwin(尽pipegit的版本稍微落后)。 我也发现Cygwin更加稳定,perl不太可能耗尽内存。

我已经使用了MSYS和Cygwin版本的git,而且说实话,我没有发现任何一个经验特别好。 我只是不认为GIT是真的准备好Windows了。

这就是说,我发现与MSYS版本的一个问题是,它会将您的(非二进制)文件的行尾从UNIX样式(换行符)转换为DOS样式(回车符/换行符)。 您可能会认为这是一个错误或function,但是没有办法改变我能find的行为。 (编辑:设置configurationvariablescore.autocrlffalse ,谢谢Brian。)

OTOH,git的MSYS版本有一些GUIfunction,在cygwin版本中是不可用的,除非你想安装并运行一个完整的X服务器。 (感谢Joce确认这一点。)

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

就我个人而言,我会selectBazaar或Mercurial ,其中任何一个都可以更好地支持windows IMO。

Cygwin和Msys Git在正常使用情况下工作得很好。 如果你想使用像git-svn这样的脚本,Cygwin是一个更好的select。 作为一个最终跳槽到Linux的老Windows用户,我可以肯定地说,Cygwin本身就是一个伟大的恩典,值得拥有。

上下文很重要, 这些项目是什么? 他们是谁用的? 等等。

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

没有深入的分析,但…

我目前与TortoiseGit一起使用Msysgit。

MsysGit用户界面是不是真正我喜欢,所以我使用像TortoiseGit熟悉的工具,并在命令行(大部分时间)工作时,我使用Msysgit的git二进制

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

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

也就是说,这是一个月前,可能有所改善。

我已经使用Cygwin Git和Msysgit与Windows。 我会build议使用Cygwin + Git。 Cygwin 1.7(目前处于testing阶段)在使用git gui和gitk时,解决了一个主要的细微差别(至less对我而言)。 Cygwin的早期版本用于每次我在git-gui或gitk中执行某些操作时打开10s的cmd窗口。 这已经在1.7中解决了。 Cygwin的强大的shell也带来了很多Linuxterminal的好东西。

也就是说,Msysgit已经发展了很多,在Windows中非常有用。 尽pipe我遇到了一些问题。

权限问题:在windows中本地创build的几个文件有模式755,在使用Msysgit时转换为644。 这将显示为修改后的文件。 签入应该解决这个问题。

CRLF:像往常一样,所有难以捉摸的CRLF都会在Windows中造成问题。 Msysgit可能会报告修改的文件。 这可以通过在安装Msysgit时select“保持行结束不变”(忘记确切的文字)来解决。

守护进程:是的,我仍然发现在Msysgit中设置git守护进程非常困难。

一个老问题的新答案…

我使用Windows 7 cmd shell的git 1.7.3,效果很好。 我使用了git命令行和git gui的组合,并且两个都已经运行好几个月了。 我们确实有回车/换行问题,当我们将Mac开发人员添加到团队中时,加剧了这些问题,但是这些问题已经解决…

 core.autocrlf=true core.safecrlf=false 

不要说你不应该使用* nix-y shell,只是这不是必须的。

我对CygWin有所保留,因为我只想要git,而不是Cygwin想要的任何其他工具。通常情况下,您希望您的Windows计算机像Windows电脑一样工作,而CygWin则想要完全不同的东西。 在* nixfunction上只是为了踢脚踢是不行的。

问题是,如果我想要像命令行一样使用* nix,我会转到我的Linux机器上,而不是在那台计算机上工作。 虚拟计算机和远程桌面现在像魅力一样工作,对于开发人员来说足够便利。

你真的需要有一个合法的理由来使用CygWin。 如果只是使用git,我build议你使用MSysGit,而不是我的偏好。 它与捆绑的gitk和git-gui工具非常好。 我一直在使用msysgit在Eclipse和Visual Studio上工作,它像一个魅力。

我现在唯一正在等待的是一个完全正常的git龟纹克隆 。

在Windows下有一个场景,你只需要通过Cygwin来使用Git:这就是当你想使用Git来对付SVN服务器,SVN客户端版本高于1.5。 SVN预先提交的钩子在没有“mergeinfo”参数的情况下阻塞提交,并且从1.5版本开始,SVN中默认的“mergeinfo”参数是默认的。 msysGit的问题是,它是针对较早的SVN版本(1.4.6)生成的,所以在这种情况下您不能成功提交。 但Cygwin的Git是可能的,因为它是针对较新的SVN版本而构build的。

如果你只是想做简单的操作,如推/拉/分支,你可以尝试从阿特拉斯的SourceTree。 Git命令的一个非常简单和清晰的用户界面。 然而它有短暂的来临。

如果您需要使用命令行git工具,只需要获取Git for windows工具。 它应该是足够的,除非你开始看bash脚本。