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 已被淘汰:
我们现在有一个用于 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页面清楚地说明了两者之间的区别:
<---------->
“ 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 带有gcc
GNU 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要好得多。
cygwin + git 是让 git 回到过去的唯一方法。现在有了 msysgit,我看不出有任何理由使用 cygwin。
我同意 git bash 不是那么好..所以我要做的是
这是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
...)。
MSysGit 附带了一个非常旧的 SSH 版本。我的系统的吞吐量约为 10 mbit。如果您不关心克隆速度,那么这不会影响您。修复方法是运行 Cygwin Git 或替换安装在 MSysGit 中的 SSH。
msysgit 中的 bash 实现是旧的。但是,我在编辑时使用 vim,效果很好。至于剪切和粘贴,我经常使用 SHIFT+ALT+[空格]、E、M 或任何键来标记我想要的文本。不理想,但做得足够好,因为我不会过多地剪切和粘贴。
我现在已经开始通过 VirtualBox 在同一台机器上运行 Ubuntu。通过无缝模式和共享文件夹,我可以利用最新的 bash 和快速的 Git。
如果需要,我不使用任何用于 Git 的 gui 工具,除了 gitk(用于 gitk --all)来可视化历史。
我已经尝试过 cygwin 并且不喜欢它。如果 msysgit 对您来说还不够,那么虚拟盒解决方案会好得多。
cygwin 上当前的 git 版本是 1.7.5.1,非常非常最新(2011 年 5 月)。
我认为(到目前为止)没有理由使用其他任何东西,尽管我正在考虑尝试使用 msysgit(又名“Git for Windows”)(当前版本为 1.7.4)。
Msysgit 已经收到了许多补丁来处理 Windows 特定的问题,例如文件系统不区分大小写、文件锁定等。使用 cygwin 版本可能是个坏主意。如果您的系统上有 cygwin,我建议您根本不要安装 git,最好不要从同一 PATH 共享 msysgit 或 cygwin 环境。
cygwin 以 windows 格式查看本地文件,而 git-bash 以 unix 格式查看它们。如果您在 git-bash 中签出文件,然后在 cygwin shell 上运行 git status,git 认为您已经修改了 repo 中的每一行,如果您在 git-bash shell 中运行 git status,那么只有您接触过的文件被修改。
这是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 有何不同
如果你打算在 git bash 中做的不仅仅是 git 命令,我建议 Cygwin 和 git。
如果你打算在 git bash 中只做 git 命令,那么 a) 当然,使用 git bash,但是 b) 为什么不只使用 Git GUI?
Git bash 并没有那么糟糕,但是,有时我需要将 Cygwin 用于在 git bash 中根本不起作用的事情。(例如 Perl CPAN。另一个是 XSL 工具。)不得不使用两个完全不同的 bash 命令行实现似乎真的很愚蠢。