31

msysgit 和 Cygwin + git 有什么区别?

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

4

10 回答 10

44

2018年编辑:

自从我 2010-2012-2014 的回答以来,2015 年 Git for Windows 使用 msys2,正如我在此处详述的那样。

更多内容请参见“ msys、msys2 和 msysgit 如何相互关联? ”。


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

Johannes Schindelin 刚刚解释(2014 年 10 月)msysgit 已被淘汰

我们现在有一个用于 Windows SDK 的轻量级 Git——它本质上是一个通过包管理器 mingw-get 管理的标准 MinGW/MSys 系统。

我们决定逐步淘汰名称“msysGit”(以及同名的 GitHub org),并且:

  • 使用适用于Windows 的 Git(使用相应的 GitHub org)
  • 为针对“最终用户”的安装程序使用名称“ Git for Windows ”,并且
  • 对于面向 Windows 开发人员的 Git 开发环境,使用名称“ Git for Windows SDK ”)。

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页面清楚地说明了两者之间的区别

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

另请参阅msysgit 常见问题解答

“MSysGit”中的这个“MSys”是什么?

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

因此,我们为 Windows 提供了一个非常小的 MSys 版本的 Git。

构建 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。从维基

  • msysGit 是为 Windows 编译 Git 的开发环境。它是完整的,你只需要安装 msysGit,然后你就可以构建 Git。无需安装任何第三方软件。
  • Git for Windows 是一个安装 Git 的安装程序——而且只有 Git

很容易看出区别:

  • Git 的安装程序具有前缀 Git-,
  • msysGit 安装程序具有前缀 msysGit-。

另一个迹象是 msysGit 安装程序有两种形式:fullinstall 和 netinstall。
此外,默认情况下 msysGit 不会安装到C:\Program Files
但是 msysGit 带有gccGNU C 编译器。

c/来自MSysGitHerald10

记住:

  • MinGW 实际上是 Microsoft 运行时之上的一个非常薄的编译时层;因此,MinGW 程序是真正的 Windows 程序,没有 Unix 风格的路径或诸如fork()调用之类的 POSIX 细节的概念。
  • 相比之下,MSys 是 Cygwin 的精简版本(当时是旧版本),其唯一目的是提供足够的 POSIX 层来运行 bash。

并不总是受欢迎的:

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

尽管如此,它还是比2007 年以来在 Cygwin 上安装的第一个Git要好得多。

于 2010-06-29T20:19:47.693 回答
4

cygwin + git 是让 git 回到过去的唯一方法。现在有了 msysgit,我看不出有任何理由使用 cygwin。

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

  1. 当我需要命令行时,将 git 放入路径并使用窗口命令提示符
  2. 当我想在我的 git 上安装一个 GUI 时,安装了 tortoise git
于 2010-06-29T19:40:05.280 回答
4

这是2017年的答案...

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

  • ACL 处理。较新的(2015 年后)cygwins 处理 NTFS 访问控制列表的方式可能令人讨厌到危险的程度。默认情况下,安装 Windows 驱动器时 acl 选项处于活动状态。Cygwin 试图通过重新洗牌和滥用 ACL 条目来模仿 POSIX 权限,这种方式可能无法通过本机 Windows 程序进行访问。此外,由于网络访问,在多用户多域(即商业或机构)安装中文件访问可能会显着减慢,因为确定用户和权限可能需要对每个文件进行域服务器查询。

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

编辑:通过一些小的调整可能并不明显,可以在 cygwin 和 Msys2 之间共享 git(但不仅是 git)的通用设置。如果我没记错的话,一个好方法是在 Windows 系统设置中设置 HOME 环境变量;那么 Msys2 和 cygwin 都将使用该目录,因此使用相同的点文件,其中~/.gitignore. 这使得在 cygwin 和 Msys2 终端之间进行更改非常轻松(想想~/.inputrc, ~/.bashrc, ~/.profile...)。

于 2017-07-20T18:20:34.897 回答
2

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

于 2013-01-23T02:05:37.243 回答
1

msysgit 中的 bash 实现是旧的。但是,我在编辑时使用 vim,效果很好。至于剪切和粘贴,我经常使用 SHIFT+ALT+[空格]、E、M 或任何键来标记我想要的文本。不理想,但做得足够好,因为我不会过多地剪切和粘贴。

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

如果需要,我不使用任何用于 Git 的 gui 工具,除了 gitk(用于 gitk --all)来可视化历史。

我已经尝试过 cygwin 并且不喜欢它。如果 msysgit 对您来说还不够,那么虚拟盒解决方案会好得多。

于 2010-06-29T19:46:47.247 回答
1

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

我认为(到目前为止)没有理由使用其他任何东西,尽管我正在考虑尝试使用 msysgit(又名“Git for Windows”)(当前版本为 1.7.4)。

于 2011-05-17T17:19:10.540 回答
0

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

于 2014-11-05T17:09:14.080 回答
0

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

于 2016-08-23T02:14:48.487 回答
0

这是2018年的答案...

适用于 Windows的 Git 基于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 有何不同

依赖 Walker Git Bash

于 2018-01-26T12:15:25.497 回答
0

如果你打算在 git bash 中做的不仅仅是 git 命令,我建议 Cygwin 和 git。

如果你打算在 git bash 中只做 git 命令,那么 a) 当然,使用 git bash,但是 b) 为什么不只使用 Git GUI?

Git bash 并没有那么糟糕,但是,有时我需要将 Cygwin 用于在 git bash 中根本不起作用的事情。(例如 Perl CPAN。另一个是 XSL 工具。)不得不使用两个完全不同的 bash 命令行实现似乎真的很愚蠢。

于 2019-12-04T00:15:11.580 回答