msysgit和Cygwin + git有什么区别?
现在我正在使用msysgit,但我不喜欢Git Bash(你不能调整大小或复制/粘贴)所以我在想切换到Cygwin,因为那时我可以使用{{3} }。
答案 0 :(得分:44)
编辑2018:
自2010-2012至2014年回答以来,2015年Git for Windows使用msys2,因为我detail here。
在“How are msys, msys2, and msysgit related to each other?”中查看更多内容。
编辑(2年后:2014年10月)
Johannes Schindelin just explained(2014年10月) msysgit逐步取消:
我们现在有一个轻量级的Git for Windows SDK - 这实际上是通过包管理器mingw-get管理的标准MinGW / MSys系统。
我们决定逐步淘汰名称“msysGit”(以及GitHub org of the same name)和:
- 在Git for Windows上工作(使用corresponding GitHub org),
- 使用名称“ Git for Windows ”作为针对“最终用户”的安装程序和
- 使用名称“ Git for Windows SDK ”作为面向Windows开发人员的Git的开发环境。)
2年后更新:2012年7月
Msysgit留在这里,除非你需要到add a few hundreds of MB for cygwin,否则你真的不需要Cygwin在Windows上使用Git。
如果你想访问GitHub,你可以使用GitHub for windows获得一个软件包(“Git for Windows”+在你的GitHub帐户上注册的ssh密钥+一个很好的GUI)。
Git和msysgit都在GitHub上 msysgit.github.com页面清楚地说明了以下两者之间的区别:
<---------->
“ Git for Windows ”:Git的纯用户“ MsysGit ”:适用于测试人员,开发人员,自定义安装程序维护人员
“MSysGit”中的“MSys”是什么?
MSys是一个Windows环境,提供Unix类型的shell和Perl解释器。因为Git的许多部分仍然没有用C语言编写,而是shell和Perl脚本,Git for Windows需要这样的环境。
因此,我们使用最小版本的MSys发布Git for Windows。
MSys也需要构建Git,因为我们重新使用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是编译Git for Windows的开发环境。它是完整的,在某种意义上你只需要安装msysGit,然后就可以构建Git了。无需安装任何第三方软件。
- Git for Windows是一个安装Git的安装程序 - 只有Git 。
很容易看出差异:
- Git的安装程序有前缀Git-,
- msysGit安装程序的前缀为msysGit-。
另一个说法是msysGit安装程序有两种版本:fullinstall和netinstall 此外,默认情况下msysGit不会安装到
C:\Program Files
但是msysGit带有gcc
,即GNU C编译器。
c / From MSysGitHerald10:
记住:
- MinGW实际上是Microsoft Runtime上非常薄的编译时层;因此,MinGW程序是真正的Windows程序,没有Unix风格路径或POSIX细节的概念,例如
fork()
调用。- 相比之下,MSys是Cygwin的缩小版本(旧版本),其唯一目的是提供足够的POSIX层来运行bash。
在Windows上工作时,我不喜欢msysGit,顾名思义,它取决于MSYS和Unix世界的工具。我相信Git发行版中的所有程序都应该成为针对特定平台编译的二进制文件,而不是依赖于shell解释器或第三方语言,如Tcl / Tk。
尽管如此,它远远好于2007年的第一次Git on Cygwin安装。
答案 1 :(得分:4)
cygwin + git是让git在当天恢复工作的唯一方法。既然msysgit已经存在,我认为没有理由使用cygwin。
我同意git bash不是那么好..所以我做的是
答案 2 :(得分:4)
这是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
......)。
答案 3 :(得分:2)
MSysGit附带了一个非常旧版本的SSH。我的系统吞吐量约为10 mbit。如果您不关心克隆速度,那么这不会影响您。解决方法是运行Cygwin Git或replace the SSH installed in MSysGit。
答案 4 :(得分:1)
msysgit中的bash实现已经过时了。但是,我在编辑时使用vim,效果很好。至于剪切和粘贴,我经常使用SHIFT + ALT + [空格],E,M或任何键来标记我想要的文本。不理想,但工作做得很好,因为我没有剪切和粘贴太多。
我现在开始通过VirtualBox在同一台机器上运行Ubuntu。使用无缝模式和共享文件夹,我可以利用最新的bash和快速Git。
我没有为Git使用任何gui工具,除了gitk(用于gitk --all)以便在需要时可视化历史记录。
我已经尝试过cygwin并且不喜欢它。如果msysgit不够用,虚拟盒解决方案会好得多。
答案 5 :(得分:1)
cygwin上当前版本的git是1.7.5.1,这是非常非常新的(2011年5月)。
我认为没有理由(到目前为止)使用其他任何东西,尽管我正在考虑尝试使用msysgit(又名“Git for Windows”)(目前版本为1.7.4)。
答案 6 :(得分:0)
Msysgit已收到许多补丁来处理Windows特定问题,例如文件系统不区分大小写,文件锁定等。使用cygwin版本可能是个坏主意。如果你的系统上有cygwin,我建议不要安装git,最好不要从同一个PATH共享msysgit或cygwin环境。
答案 7 :(得分:0)
cygwin以windows格式查看您的本地文件,而git-bash以unix格式查看它们。如果你检查git-bash中的文件然后在cygwin shell上运行git status,git认为你已经修改了repo中的每一行,如果你在git-bash shell中运行git status,那么只修改你触摸过的文件。
答案 8 :(得分:0)
这是2018年的答案......
MSYS2的想法是重启MSys项目,经常使用Cygwin进行更新,只是保持MSys的精神,提供一个非常精简的POSIX层,基本上是Cygwin的最低版本。 MSYS2还提供包管理器(pacman),并使这些包保持最新状态。
...
MSYS2的运行时是一个在Windows内核之上运行的精简的,稍微修改过的Cygwin运行时,而Linux&#39; runtime是Linux内核,作为一个单独的操作系统运行。
https://github.com/git-for-windows/git/wiki
Cygwin提供了一个名为cygwin1.dll的运行时库,它在必要时提供POSIX兼容性层。此库的MSYS2变体称为msys-2.0.dll,并包含以下更改以支持使用本机Windows程序:How does MSYS2 differ from Cygwin
答案 9 :(得分:0)
如果您打算在git bash中做的不仅仅是git命令,我建议使用git的Cygwin。
如果您打算除了在git bash中执行git命令之外什么都不做,那么a)当然可以使用git bash,但是b)为什么不仅仅使用Git GUI?
Git bash还不错,但是,有时候我需要使用Cygwin来处理在git bash中根本不起作用的事情。 (例如,Perl CPAN。另一个是XSL工具。)必须使用两个完全不同的bash命令行实现,这似乎很愚蠢。