28

我似乎无法理解两者之间的区别。

似乎一个 ( GNUWin32) 是窗口顶部的一层 (like MSYS) 而
另一个 (cygwin) 是别的东西 (?)

这意味着什么?我什么时候会使用其中一个?他们都适合同一件事吗?

我想主要将它用于 git,但想保持我的选择开放,以便学习和做所有事情 *nixy。

还有其他工具吗?会msysgit更适合这个吗?
是否有任何资源可以详尽地了解所有这些 *nix 平台的差异?

4

2 回答 2

43

Cygwin是一个库,它致力于使 UNIX 程序能够在 Windows 系统上编译和运行,而只需最少的修改或无需修改,以及使用该库编译的一整套打包的 UNIX 工具和应用程序。它几乎是一个完整的 Windows 包装器。它包括一个 X 服务器和大量可以在 Linux 发行版中找到的程序。它非常适合想要在 Windows 中学习或使用 UNIX 命令行的人。

MSYS主要是使用MinGW编译器在 Windows 系统上构建 GNU 样式包(带有configure等)所必需的 UNIX 工具的一个端口。它使用修改后的 Cygwin 库的变体以牺牲一些兼容性来提高效率,并且对 Windows 更友好。

GnuWin32只是将一些 GNU 工具移植到 Windows 上。与 MSYS 一样,它使用msvcrt.dll, 以及一个附加库来提供一些 UNIX 兼容性功能。它的主要目的似乎是允许 Windows 程序和批处理文件直接使用某些 GNU 程序和库。

在大多数情况下,它们都在 Windows 上提供 UNIX 程序,但有许多细微的差别,包括:

  • 意图。Cygwin 适用于希望在其 Windows 操作系统上使用 UNIX 的人。MSYS 适用于想要使用 GNU/UNIX 构建工具构建 Windows 程序的人。GnuWin32 是单个 GNU 程序和库到 Windows 的端口。
  • 文本文件,尤其是行尾。Cygwin 允许您使用 CR/LF 或 LF。MSYS 期望 LF 行结束。GnuWin32 程序需要 CR/LF 行结尾。
  • 提供的程序。特别是,Cygwin 有更多的包,而 GnuWin32 不提供任何 shell。

至于 git,它在 Cygwin 中可用——这个版本可以在 Windows 目录中使用(可在 下访问/cygdrive)。此外,如前所述,还有msysgit

于 2012-05-23T03:16:56.903 回答
1

迈克尔·斯莱德是正确的。我想谈谈典型的使用环境。

出于实际原因,我使用 gnuwin 作为仅与 POSIX 环境远程相关的东西的轻量级后端,而 cygwin 更像是一个成熟的 POSIX,甚至是一个非常 gunixish 的环境。

此外,在安装大量工具时 gnuwin 往往会变得臃肿,因为可执行文件通常使用静态链接库。另一方面,Cygwin 提供了大量的动态库和相当小的可执行文件。因此,如果您只需要几个可执行文件,那么 gnuwin 需要的资源更少。如果你需要一个复杂的环境,那么 cygwin 会更有效率。

gnuwin 也经常有点过时,提供的软件很少,没有包/更新管理器。这是一个基本的shell环境。没有 ssh,没有 gcc,vim,没有 perl,没有 sql - 你可以从其他来源获得这些,但它们如何合作很难预测。Cygwin 修复了上述所有问题。

换句话说,gnuwin 非常适合偶尔安装,只需将 du、find 和 sort 放入您的 $PATH 中。做一些真正的 POSIX 工作使用 cygwin。

我曾经有第二个 Linux 工作站,然后在我的 Windows 系统旁边运行了一个 Linux VM。Cygwin 使它们过时了。与专用计算机或虚拟机相比,它可以处理大量事情,同时节省大量资源。

于 2020-11-18T10:23:28.133 回答