msysgit和Cygwin + git之间的区别?

Difference between msysgit and Cygwin + git?

msysgit和Cygwin + git有什么区别?

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


编辑2018:

自从我的2010-2012至2014年答案,2015年Git for Windows使用msys2,我在这里详述。

请参阅"msys,msys2和msysgit如何相互关联?"。

编辑(2年后:2014年10月)

Johannes Schindelin刚刚解释(2014年10月)msysgit被逐步淘汰:

We now have a light-weight Git for Windows SDK – which is essentially a standard MinGW/MSys system managed through the package manager mingw-get.

We decided to just phase out the name"msysGit" (as well as the GitHub org of the same name) and:

  • work on Git for Windows (with the corresponding GitHub org),
  • using the name"Git for Windows" for the installer aimed at"end-users" and
  • using the name"Git for Windows SDK" for the development environment targeting Git for Windows developers).

2年后更新:2012年7月

Msysgit就在这里,除非你需要为cygwin添加几百MB,否则你真的不需要Cygwin只在Windows上使用Git。
如果你想访问GitHub,你可以使用GitHub for windows获得一个软件包("Git for Windows"+在你的GitHub帐户上注册的ssh密钥+一个不错的GUI)。

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

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

另请参见msysgit FAQ:

What is this"MSys" thing in"MSysGit"?

MSys is an environment for Windows offering a Unix-type shell and a Perl interpreter. Because many parts of Git are still not builtins programmed in C, but instead shell and Perl scripts, Git for Windows needs such an environment.

Therefore we ship Git for Windows with a very minimal version of MSys.

MSys is also required to build Git, as we re-use the same Unix-type setup upstream Git uses. We ship a more complete MSys environment, including GCC, as build environment (which is therefore nick-named ''msysGit'').

We compile Git as a pure MinGW program, though, i.e. a program without any link-dependencies on anything but standard Windows libraries.
So unless you need to use any parts of Git that are still implemented only as shell or Perl scripts, you can get away with running plain git.exe.

原答案:2010年6月

a /您可以在Git bash中调整大小和复制粘贴,就像在任何其他Windows Shell中一样。

b /你可能正在使用"Git for windows",而不是msysgit。来自维基:

  • msysGit is the development environment to compile Git for Windows. It is complete, in the sense that you just need to install msysGit, and then you can build Git. Without installing any 3rd-party software.
  • Git for Windows is an installer which installs Git -- and only Git.

It is easy to see the difference:

  • the installers for Git have the prefix Git-,
  • the msysGit installers have the prefix msysGit-.

Another telltale is that the msysGit installers come in two flavors: fullinstall and netinstall.
Further, msysGit does not install to C:\Program Files by default.
But msysGit comes with gcc, the GNU C Compiler.

c /来自MSysGitHerald10:

Remember:

  • MinGW is really a very thin compile-time layer over the Microsoft Runtime; MinGW programs are therefore real Windows programs, with no concept of Unix-style paths or POSIX niceties such as a fork() call.
  • MSys, in contrast, is a slimmed-down version of Cygwin (an old version at that), whose only purpose is to provide enough of a POSIX layer to run a bash.

并不总是欢迎:

When working on Windows, I dislike that msysGit, as the name suggests, depends on MSYS and on tools from the Unix world. I believe all programs in the Git distribution should become binaries compiled for a specific platform, and not rely on shell interpreters or third-party languages like Tcl/Tk.

尽管如此,它远远优于2007年Cygwin安装的第一个Git。


这是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 ......)。


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

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

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

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

    我没有为Git使用任何gui工具,除了gitk(用于gitk --all)以便在需要时可视化历史记录。

    我已经尝试过cygwin并且不喜欢它。如果msysgit不够用,虚拟盒解决方案要好得多。


    这是2018年的答案......

    Git for Windows基于MSYS2。

    MSYS2 was started with the idea to restart the MSys project, frequently updating with Cygwin and just keeping the spirit of MSys to provide a very stripped-down POSIX layer, essentially a bare-minimum version of Cygwin. MSYS2 also sports a package manager (pacman) and keeps those packages up-to-date very well.

    ..

    MSYS2's runtime is a stripped-down, slightly modified Cygwin runtime running on top of the Windows kernel, while Linux' runtime is the Linux kernel, running as a separate OS altogether.

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

    Cygwin provides a runtime library called cygwin1.dll that provides the POSIX compatibility layer where necessary. The MSYS2 variant of this library is called msys-2.0.dll and includes the following changes to support using native Windows programs: How does MSYS2 differ from Cygwin

    Dependency Walker Git Bash


    cygwin以windows格式查看本地文件,而git-bash以unix格式查看它们。如果你检查git-bash中的文件然后在cygwin shell上运行git status,git认为你已经修改了repo中的每一行,如果你在git-bash shell中运行git status,那么只修改你触摸过的文件。


    Msysgit已收到许多补丁来处理Windows特定问题,例如文件系统不区分大小写,文件锁定等。使用cygwin版本可能是个坏主意。如果你的系统上有cygwin,我建议不要安装git,最好不要从同一个PATH共享msysgit或cygwin环境。