msysgit和Cygwin+git之间的区别是什么?

31

msysgit和Cygwin+ git之间有什么区别?

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

10个回答

44

2018年更新:

自2010年-2012年-2014年我的回答以来,Git for Windows在2015年开始使用msys2,具体细节在此处

更多信息请参见 "msys、msys2和msysgit之间有什么关系?"。


编辑(再过两年: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开发人员的开发环境)。

两年后的更新:2012年7月

Msysgit已经成为主流,除非您需要增加几百MB的Cygwin,否则在Windows上使用Git时不需要Cygwin。
如果您想要访问GitHub,您可以使用GitHub for windows一次性获取一个软件包("Git for Windows" + 在您的GitHub帐户上为您注册的ssh密钥 + 一个漂亮的GUI)。

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

Git for Windows logo <----------> MsysGit logo
"Git for Windows":纯Git用户 | "MsysGit":面向测试人员、开发人员和自定义安装程序维护者

另请参阅msysgit FAQ

"MSysGit"中的"MSys"是什么?

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

因此,我们将Git for Windows与非常简单的MSys版本一起提供。

构建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-,
  • msysGit安装程序具有前缀msysGit-。

另一个线索是,msysGit安装程序有两种类型:fullinstall和netinstall。
此外,默认情况下,msysGit不会安装到C:\Program Files
但是msysGit带有gcc,GNU C编译器。

c/ 来自MSysGitHerald10

记住:
MinGW实际上只是Microsoft Runtime的一个非常薄的编译时层;因此,MinGW程序是真正的Windows程序,没有Unix风格路径或POSIX好处(如fork()调用)的概念。
相比之下,MSys是Cygwin的一个精简版本(还是旧版本),其唯一目的是提供足够的POSIX层以运行bash。
而这并不总是受欢迎
在Windows上工作时,我不喜欢msysGit依赖于MSYS和来自Unix世界的工具,正如名称所示。我认为Git发行版中的所有程序都应该成为针对特定平台编译的二进制文件,而不是依赖于shell解释器或第三方语言(如Tcl/Tk)。
尽管如此,它仍然比2007年的Cygwin上的Git安装要好得多。

a) 我怎么在Git Bash中启用调整大小和复制/粘贴? b) 我不知道是否相同,但我正在使用msysgit。 - why
@nusbit:a)像任何Windows shell一样:请参见http://superuser.com/questions/92040/copy-console-windows-and-paste-in-notepad或(更清晰的)http://www.astahost.com/info.php/Command-Prompt-Tips_t10211.html#137177 b)msysgit是包括“Git for Windows”的项目名称(您必须安装“Git-1.7.0.2-preview20100309.exe”), msysGit本身(Git for Windows的开发环境安装程序:msysGit-netinstall-1.7.1-preview20100612.exe)。 - VonC
一样的。谢谢你。我必须在配置中激活快速编辑模式。现在我可以复制/粘贴了。 - why
在使用MsysGit时是否可以设置用户权限,还是需要安装Gitolite?我想控制谁可以从存储库签入和签出文件。 - devdar
1
@devdar msysgit只是Windows上的Git。而Git不管理用户权限。只有像Gitolite这样的授权层(http://gitolite.com/gitolite/auth.html)才能管理权限。 - VonC
显示剩余4条评论

4

这是2017年的答案...

基本技术差异在于所有cygwin程序都依赖于cygwin1.dll;但同时对于最终用户来说,这应该几乎完全透明,因此这个差异最不重要。我发现的主要差异并不在于git版本,而是在于cygwin环境和msys/mingw环境之间。以下是我发现的一些差异:

  • ACL处理。更新的(2015年后)cygwin处理NTFS访问控制列表的方式可能会非常麻烦,甚至危险。默认情况下,Windows驱动器使用acl选项激活。Cygwin试图通过重新排列和滥用ACL条目来模拟POSIX权限,这可能会使通过原生Windows程序进行的访问变得不可能。此外,在多用户多域(即商业或机构)安装中,由于需要网络访问,确定用户和权限可能需要为每个文件查询域服务器,因此可能会大大减慢文件访问速度。

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

编辑:也许不太明显的是,通过一些小的调整,可以在cygwin和Msys2之间共享git(但不仅限于git)的常见设置。如果我记得正确,一个好的方法是在Windows系统设置中设置HOME环境变量;然后Msys2和cygwin都将使用该目录,因此使用相同的点文件,其中包括~/.gitignore。这使得在cygwin和Msys2终端之间切换非常轻松(考虑~/.inputrc~/.bashrc~/.profile等)。


4

过去cygwin + git是唯一使git工作的方法。现在有了msysgit,我不再觉得使用cygwin有任何理由。

我同意git bash并不是很好用。所以我的做法是:

  1. 将git添加到环境变量中,在需要使用命令行时使用Windows命令提示符
  2. 安装tortoise git,当我想要GUI界面时使用它来管理我的git

11
作为一个喜欢命令行界面的用户,我不认为Windows命令提示符是一个非常好的解决方案... - Cascabel
这不是我的问题的答案,cygwin和msysgit之间的区别是什么。 - why

2

MSysGit附带了一个非常老旧的SSH版本。在我的系统上,吞吐量约为10 mbit。如果您不关心克隆速度,那么这不会影响您。解决方法是运行Cygwin Git或者替换MSysGit中安装的SSH


1

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

我目前看不出使用其他东西的理由,尽管我正在考虑尝试使用msysgit(又称“Git for Windows”)(当前版本为1.7.4)。


1

msysgit中的bash实现已经过时。然而,我在编辑时使用vim效果很好。至于剪切和粘贴,我经常使用SHIFT+ALT+[空格]、E、M或其他键来标记我想要的文本。虽然不是理想的方法,但足以胜任工作,因为我不会频繁地剪切和粘贴。

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

除了需要可视化历史记录时使用的gitk(对于gitk --all)之外,我不使用任何Git的GUI工具。

我尝试过cygwin,但不喜欢它。如果msysgit不够用,那么VirtualBox解决方案会更好。


VirtualBox 的想法很好,但对我来说有点费力。我宁愿使用 cygwin 或 msyswin。 - why
为什么不直接连接到运行有共享文件夹的虚拟机实例呢?一旦设置完成,我不确定会有什么需要大费周折的。 - Adam Dymitruk

0

这是一个来自2018年的答案...

Git for Windows基于MSYS2

MSYS2的创始人想重新启动MSys项目,在频繁更新Cygwin的同时,保持MSys的精神,提供非常简化的POSIX层,实际上是Cygwin的最小版本。 MSYS2还配备了一个软件包管理器(pacman),并保持这些软件包非常好地更新。

..

MSYS2的运行时是一个削减版、稍作修改的Cygwin运行时,运行在Windows内核之上,而Linux的运行时则是Linux内核,作为一个独立的操作系统运行。

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

Cygwin提供了一个名为cygwin1.dll的运行时库,它提供必要的POSIX兼容层。该库的MSYS2变体称为msys-2.0.dll,并包括以下更改以支持使用本地Windows程序:MSYS2与Cygwin有何不同

Dependency Walker Git Bash


0
如果你计划在git bash中执行更多的操作而不仅仅是git命令,我建议使用带有git的Cygwin。
如果你计划在git bash中只执行git命令,那么a)当然可以使用git bash,但是b)为什么不直接使用Git GUI呢?
Git bash并不是很糟糕,但是有时候我需要使用Cygwin来处理一些在git bash中无法运行的东西。(例如Perl CPAN和XSL工具等)。这似乎非常愚蠢,因为必须使用两个完全不同的bash命令行实现。

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

0

cygwin 可以看到你在 Windows 格式下的本地文件,而 git-bash 则可以看到它们在 Unix 格式下。如果你在 git-bash 中检出文件,然后在 cygwin shell 上运行 git status,git 会认为你修改了仓库中的每一行,但如果你在 git-bash shell 中运行 git status,则只有你触及的文件被修改。


1
三年后:如果“Windows / Unix格式”指的是行尾,那么Cygwin在这方面是可配置的(使用/etc/fstab文件中某些路径的挂载选项text进行自动行尾转换)。如何保留行尾也取决于您的编辑器;现代编辑器在这方面也是可配置的,除了Cygwin之外。我现在同时使用Cygwin和Windows Git,目前运行良好。 - Peter - Reinstate Monica

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