msysgit和Cygwin+ git之间有什么区别?
我现在正在使用msysgit,但我不喜欢Git Bash(无法调整大小或复制/粘贴),所以我考虑切换到Cygwin,因为那样我可以使用mintty。
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)。
Git和msysgit都在GitHub上。
msysgit.github.com页面清楚地说明了它们之间的区别:
<---------->
"Git for Windows":纯Git用户 | "MsysGit":面向测试人员、开发人员和自定义安装程序维护者
另请参阅msysgit FAQ:
"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:
记住:这是2017年的答案...
基本技术差异在于所有cygwin程序都依赖于cygwin1.dll;但同时对于最终用户来说,这应该几乎完全透明,因此这个差异最不重要。我发现的主要差异并不在于git版本,而是在于cygwin环境和msys/mingw环境之间。以下是我发现的一些差异:
-noacl
选项进行挂载。在cygwin中也这样做似乎可以避免这些问题。git status
在cygwin下需要4.7秒,在msys git下仅需0.4秒。我不确定cygwin兼容层中的哪一部分减慢了速度——锁定、分叉、文件系统、IPC...它们都是候选者。cygpath
在两个世界之间认真转换文件名。这将在脚本等与Windows程序进行接口时发挥重要作用。编辑:也许不太明显的是,通过一些小的调整,可以在cygwin和Msys2之间共享git(但不仅限于git)的常见设置。如果我记得正确,一个好的方法是在Windows系统设置中设置HOME环境变量;然后Msys2和cygwin都将使用该目录,因此使用相同的点文件,其中包括~/.gitignore
。这使得在cygwin和Msys2终端之间切换非常轻松(考虑~/.inputrc
,~/.bashrc
,~/.profile
等)。
过去cygwin + git是唯一使git工作的方法。现在有了msysgit,我不再觉得使用cygwin有任何理由。
我同意git bash并不是很好用。所以我的做法是:
MSysGit附带了一个非常老旧的SSH版本。在我的系统上,吞吐量约为10 mbit。如果您不关心克隆速度,那么这不会影响您。解决方法是运行Cygwin Git或者替换MSysGit中安装的SSH。
目前在cygwin上的git版本是1.7.5.1,非常非常新(2011年5月)。
我目前看不出使用其他东西的理由,尽管我正在考虑尝试使用msysgit(又称“Git for Windows”)(当前版本为1.7.4)。
msysgit中的bash实现已经过时。然而,我在编辑时使用vim效果很好。至于剪切和粘贴,我经常使用SHIFT+ALT+[空格]、E、M或其他键来标记我想要的文本。虽然不是理想的方法,但足以胜任工作,因为我不会频繁地剪切和粘贴。
我现在开始通过VirtualBox在同一台机器上运行Ubuntu。通过无缝模式和共享文件夹,我可以利用最新的bash和快速的Git。
除了需要可视化历史记录时使用的gitk(对于gitk --all)之外,我不使用任何Git的GUI工具。
我尝试过cygwin,但不喜欢它。如果msysgit不够用,那么VirtualBox解决方案会更好。
这是一个来自2018年的答案...
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有何不同。cygwin 可以看到你在 Windows 格式下的本地文件,而 git-bash 则可以看到它们在 Unix 格式下。如果你在 git-bash 中检出文件,然后在 cygwin shell 上运行 git status,git 会认为你修改了仓库中的每一行,但如果你在 git-bash shell 中运行 git status,则只有你触及的文件被修改。
/etc/fstab
文件中某些路径的挂载选项text
进行自动行尾转换)。如何保留行尾也取决于您的编辑器;现代编辑器在这方面也是可配置的,除了Cygwin之外。我现在同时使用Cygwin和Windows Git,目前运行良好。 - Peter - Reinstate Monica
msysGit-netinstall-1.7.1-preview20100612.exe
)。 - VonC