msys / git和git-for-windows / mingw-w64-x86_64-git有什么区别?

时间:2016-10-26 12:33:14

标签: windows git msys2

为了能够在Windows上运行我的跨平台应用程序的测试脚本,我安装了MSYS2并使用pacman来安装我的测试脚本所依赖的任何软件包。

由于MSYS2提供了一个git(msys / git)端口,我认为也不需要为Windows安装Git。但是MSYS2存储库中提供的git版本与Git for Windows提供的版本有什么区别?

到目前为止,我注意到了这些差异:

  1. msys / git在virtualenv上运行pip freeze时会失败,其中在开发模式下安装了git clone的Python包:

    FileNotFoundError: [WinError 3] The system cannot find the path specified: '/c/users/user/documents/project/.git\\..'
    

    git-for-windows / mingw-w64-x86_64-git不会失败,因此在路径处理方面至少存在一些差异。

  2. Git for Windows&#gitk和git gui开箱即用。无需设置GIT_GUI_LIB_DIR环境变量as described here

  3. 似乎Git for Windows存储库中的git提供了最佳体验。

    P.S。您可以在/etc/pacman.confabove [mingw32][mingw64][msys]条目中添加以下内容,在MSYS2中安装Git for Windows的git。但是,安装Git for Windows SDK可能是个更好的主意,包括Git for Windows basically a special edition of MSYS2。否则,下面的过程(以及更多)也是described here

    [git-for-windows]
    Server = https://dl.bintray.com/$repo/pacman/$arch
    
    [git-for-windows-mingw32]
    Server = https://dl.bintray.com/git-for-windows/pacman/i686
    

    在此之后(也许是pacman -Sy),您可以安装Git for Windows的git:

    pacman -S mingw-w64-x86_64-git
    

    我认为没有理由不在MSYS2中安装Git for Windows&#git?

    编辑 Git for Windows(联合国)安装程序遗留在C:\ProgramData\Git\config之后。这会将git指向SSL证书的错误位置。您可以删除C:\ProgramData\Git\config来解决此问题。

2 个答案:

答案 0 :(得分:4)

msys / git 链接到MSYS2提供的动态库,以类似于cygwin的方式提供POSIX到Windows兼容性(POSIX仿真)(MSYS2从cygwin派生),因此,它需要MSYS2环境才能运行。

另一方面,

git-for-windows / mingw-w64-x86_64-git 是使用MinGW编译器编译的,它在编译时执行到本机Windows调用的转换,这导致与仿真方法相比,二进制速度更快,并且只需要运行本机Windows库。

来自The difference between MSYS2 and MinGW

  

MSYS2二进制文件的POSIX仿真层很方便,但需要付出代价:通常情况下,MSYS2程序明显慢于MinGW程序(如果有这样的副本)。因此,Git for Windows项目尝试提供尽可能多的组件作为MinGW二进制文件。

另请参阅:How does MSYS2 differ from Cygwin?

答案 1 :(得分:0)

git-for-windows/git issue 2688从Git for Windows Johannes Schindelin的维护者那里添加了一个更新的(2020)观点:

用于Windows的Git的目的实际上是将Git引入Windows。

尽管这意味着我们必须交付许多类似Unix的工具,但这并不意味着我们将包括此类工具,除非Git自己的操作需要它们,或者至少出于历史原因(积极贡献者的需求是有时是决定是否包含工具的一个因素。

话虽如此,您真正要寻找的是MSYS2
Windows的Git利用MSYS2并附带其文件的子集。 MSYS2甚至使用名为“ pacman”的软件包管理系统来安装更多工具(包括Git ...)。

问题中提到的文档为“ Install inside MSYS2 proper”,但是自Pacboy is removed from the base installation起,它最近发生了变化。

因此需要使用以下方式将其重新添加:

# pacman -Fy
:: Synchronizing package databases...
[...]
# pacman -F pacboy.exe
# pacman -F pacboy
msys/pactoys-git r2.07ca37f-1 (base base-devel)
    usr/bin/pacboy
    usr/share/bash-completion/completions/pacboy

然后:

/var/lib/pacman/local安装过程中的msys2文件复制到git-bash,可以安装tmux(按照我在OP中的计划/显示),对我来说很好。

因此,拥有/var/lib/pacman/local个文件就是msys2pacmangit-bash中工作(我的意思是git-for-windows)。