【发布时间】:2010-10-21 11:58:48
【问题描述】:
我计划将我的项目迁移到 git,我目前想知道在 windows 下哪个是最好和/或最稳定的选项。
据我所知,我基本上有 2.5 个选项:
注意:IMO Cygwin 本身就是一大优势,因为您可以访问几乎所有的 *nix 命令行工具,而使用 MSYSgit bash,您只能访问这些工具的一小部分。
鉴于此,您会建议什么选择?
【问题讨论】:
我计划将我的项目迁移到 git,我目前想知道在 windows 下哪个是最好和/或最稳定的选项。
据我所知,我基本上有 2.5 个选项:
注意:IMO Cygwin 本身就是一大优势,因为您可以访问几乎所有的 *nix 命令行工具,而使用 MSYSgit bash,您只能访问这些工具的一小部分。
鉴于此,您会建议什么选择?
【问题讨论】:
编辑(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.bat 或 git-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 存储库的传输速度,如下文 incrementor 在 his 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。
【讨论】:
是的。老问题。新答案:
我们已经在大型部署中使用 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 内存不足的可能性更小。
【讨论】:
我已经尝试过使用 MSYS 和 Cygwin 版本的 git,老实说,我没有发现这两种体验特别好。我只是认为 git 还没有真正为 windows 做好准备。
话虽如此,我在 MSYS 版本中发现的一个问题是,它将(非二进制)文件的行尾从 UNIX 样式(换行)转换为 DOS 样式(回车/换行)喂养)。您可能认为这是一个错误或一个功能,但没有办法改变我能找到的行为。 (编辑:将配置变量 core.autocrlf 设置为 false。感谢 Brian。)
OTOH,MSYS 版本的 git 具有一些在 cygwin 版本中不可用的 GUI 功能,除非您想安装和运行整个 X 服务器。 (感谢 Joce 确认。)
我的印象是 MSYS 版本更受欢迎,虽然这可能是因为你不需要安装 cygwin 生态系统来使用它。 (我同意,cygwin 非常有用。)
【讨论】:
Cygwin 和 Msys Git 都适用于正常的用例。如果你想使用 git-svn 等脚本,Cygwin 是一个更好的选择。作为一个最终转向 Linux 的老 Windows 用户,我可以肯定地说 Cygwin 是一个巨大的福音,值得拥有。
上下文很重要;这些是什么项目?它们被谁使用?等等。
【讨论】:
我也测试了两个世界(CygWin 和 MSysgit),我的经验是 MSysgit bash 也有一些缺点。当 Cygwin 在同一个 git 存储库上优雅地处理它时,无法成功运行 git stash。
虽然还没有进行深入的分析...
【讨论】:
我目前将 Msysgit 与 TortoiseGit 一起使用。
MsysGit UI 不是我真正喜欢的,所以我使用了一个熟悉的工具,比如 TortoiseGit,在命令行上工作时(大部分时间),我使用来自 Msysgit 的 git 二进制文件
【讨论】:
我会推荐 msysgit。特别是如果它与Git Extensions 一起使用:它提供了简单的环境配置方法:编辑器/差异/合并工具,并允许从用户界面进行高级 git 操作。
【讨论】:
我在 MSys 的 cygwin 实现中遇到了严重的错误:一些命令,尤其是 rebase,很容易失败。 Cygwin 对我来说更稳定。
也就是说,这是一个月前的事了,从那以后可能会有所改善。
【讨论】:
我在 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 守护进程很困难。
【讨论】:
旧问题的新答案...
我在 Windows 7 cmd shell 中使用 git 1.7.3,效果很好。我混合使用了 git 命令行和 git gui,几个月来都运行良好。我们确实遇到了回车/换行问题,当我们将 Mac 开发人员添加到团队中时问题更加严重,但这些问题已经通过 ...
core.autocrlf=true
core.safecrlf=false
并不是说您不应该使用 *nix-y shell,只是说没有必要。
【讨论】:
我对@987654321@ 持保留意见,因为我只想要 git 而不是 Cygwin 想要插入的任何其他工具。通常你希望你的 windows 计算机像 windows 计算机一样工作,而 CygWin 想要拍一些完全不同的东西.只是为了好玩而使用 *nix 功能是不行的。
问题是,如果我想像命令行一样使用 *nix,我会转到我的 Linux 机器并在该计算机上工作。 Virtual computers 和 remote desktops 现在工作起来就像一个魅力,并且对开发人员来说足够容易访问。
您使用 CygWin 确实需要有正当理由。如果只是为了使用 git,我建议您改用 MSysGit,这是我的偏好。它与捆绑的 gitk 和 git-gui 工具配合得非常好。我一直在使用 msysgit 开发 Eclipse 和 Visual Studio,它就像一个魅力。
我现在唯一等待的是一个完全正常工作的Tortoise clone for git。
【讨论】:
在 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 版本构建的。
【讨论】:
如果您只想执行简单的操作,例如推/拉/分支,您可以尝试 Atlasian 的 SourceTree。一个非常简单明了的 Git 命令用户界面。但是它有缺点。
如果您需要使用命令行 git 工具,只需获取 Git for windows 工具即可。应该足够了,除非您开始研究 bash 脚本。
【讨论】: