msysgit和Cygwin + git之间的区别?

时间:2010-06-29 19:36:42

标签: git cygwin msysgit

msysgit和Cygwin + git有什么区别?

现在我正在使用msysgit,但我不喜欢Git Bash(你不能调整大小或复制/粘贴)所以我在想切换到Cygwin,因为那时我可以使用{{3} }。

10 个答案:

答案 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)。

Gitmsysgit都在GitHub上 msysgit.github.com页面清楚地说明了以下两者之间的区别:

Git for Windows logo <----------> MsysGit logo
Git for Windows ”:Git的纯用户“ MsysGit ”:适用于测试人员,开发人员,自定义安装程序维护人员

另见the msysgit FAQ

  

“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。
  •   

那是not always welcomed

  

在Windows上工作时,我不喜欢msysGit,顾名思义,它取决于MSYS和Unix世界的工具。我相信Git发行版中的所有程序都应该成为针对特定平台编译的二进制文件,而不是依赖于shell解释器或第三方语言,如Tcl / Tk。

尽管如此,它远远好于2007年的第一次Git on Cygwin安装。

答案 1 :(得分:4)

cygwin + git是让git在当天恢复工作的唯一方法。既然msysgit已经存在,我认为没有理由使用cygwin。

我同意git bash不是那么好..所以我做的是

  1. 当我需要命令行
  2. 时,将git放在路径中并使用窗口命令提示符
  3. 当我想为我的git设置GUI时,安装了tortoise git

答案 2 :(得分:4)

这是2017年的答案......

根本的技术差异是所有cygwin程序都依赖于cygwin1.dll;但这对于最终用户来说同时也是最不感兴趣的,因为它应该几乎完全透明。我发现的主要差异不在git版本和cygwin环境与msys / mingw环境之间。这些是我发现的一些差异:

  • ACL处理。较新的(2015年后)cygwins处理NTFS访问控制列表的方式可能令人讨厌危险。默认情况下,Windows驱动器安装时acl选项处于活动状态。 Cygwin试图通过重新洗牌和滥用ACL条目来模仿POSIX权限,这种方式可以通过本机Windows程序进行访问。此外,由于网络访问,在多用户多域(即商业或机构)安装中文件访问可能会显着减慢,因为确定用户和权限可能需要对每个文件进行域服务器查询。 />
    msys默认使用-noacl选项进行安装。在cygwin中这样做似乎也避免了这些问题。
  • 速度。我目前在一个拥有100k文件的存储库中工作(不要问)。缓存中包含所有相关磁盘内容的git status使用cygwin需要4.7秒,使用msys git需要0.4秒。我不确定cygwin兼容层的哪一部分正在减慢速度 - 锁,叉,文件系统,IPC ......它们都是候选者。
  • 潜在的文件名。我没有调查过这个问题,但是我怀疑用于Windows的git(和其他工具)(比如msys git)可以更好地处理Windows文件名。在cygwin下,必须在两个世界之间通过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年的答案......

Git for Windows基于MSYS2

  

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

Dependency Walker Git Bash

答案 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命令行实现,这似乎很愚蠢。