Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are the differences between msys/git and git-for-windows/mingw-w64-x86_64-git?

Tags:

git

windows

msys2

To be able to run the test scripts for my cross-platform application also on Windows, I installed MSYS2 and used pacman to install any packages my test scripts rely on.

Since MSYS2 provides a port of git (msys/git), I think there is no need to install Git for Windows as well. But what are the differences between the git version provided in the MSYS2 repository and the one provided by Git for Windows?

I noticed these differences so far:

  1. msys/git will fail when running pip freeze on a virtualenv where a Python package from a git clone is installed in develop mode:

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

    git-for-windows/mingw-w64-x86_64-git doesn't fail, so there are at least some differences with respect to path handling.

  2. Git for Windows's gitk and git gui work out of the box. There's no need to set the GIT_GUI_LIB_DIR environment variable as described here.

It seems git from the Git for Windows repository offers the best experience at this point.

P.S. You can install Git for Windows's git in MSYS2 by adding the following to /etc/pacman.conf, above the [mingw32], [mingw64] and [msys] entries. But it might be a better idea to install the Git for Windows SDK instead, which is basically a special edition of MSYS2 including Git for Windows. Otherwise, the procedure below (and more) is also 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 

After this (and perhaps a pacman -Sy), you can install the Git for Windows's git:

pacman -S mingw-w64-x86_64-git 

I suppose there's no reason not to install Git for Windows's git in MSYS2?

EDIT The Git for Windows (un)installer left behind C:\ProgramData\Git\config. This points git at the wrong location for the SSL certificates. You can remove C:\ProgramData\Git\config to fix this.

like image 550
Brecht Machiels Avatar asked Oct 26 '16 12:10

Brecht Machiels


People also ask

What is Msys Git?

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. msysGit is not Git for Windows; that is an installer which installs Git -- and only Git.

What is the difference between MSYS2 and Mingw?

MINGW refers to executables that are compiled using the MINGW GCC Compiler and target the Win32 API. MSYS2 refers to executables that are compiled by MSYS2 GCC Compiler and make use of a POSIX emulation layer.

Does Git come with MINGW64?

MINGW64 is the new icon being used with Git for Windows 2. x The MINGW64 is the value from the MSYSTEM environment variable. This has been included in the bash prompt by setting PS1 in the /etc/bash. bashrc file.

Does Git bash use MSYS2?

Git for Windows leverages MSYS2 and ships with a subset of its files. MSYS2 even sports a package management system called " pacman " to install more tools (including Git...).


2 Answers

msys/git is linked against a dynamic library provided by MSYS2 to provide POSIX-to-Windows compatibility (POSIX emulation) in a manner similar to how cygwin does (MSYS2 is forked from cygwin), thus it requires the MSYS2 environment to be present to run.

git-for-windows/mingw-w64-x86_64-git on the other hand, is compiled using the MinGW compiler, which performs the translation to native Windows calls at compile time, which results in a much faster binary compared to the emulation approach, and does only require native Windows libraries to run.

From The difference between MSYS2 and MinGW:

The POSIX emulation layer of MSYS2 binaries is convenient, but comes at a cost: Typically, MSYS2 programs are noticably slower than their MinGW counterparts (if there are such counterparts). As a consequence, the Git for Windows project tries to provide as many components as possible as MinGW binaries.

See also: How does MSYS2 differ from Cygwin?

like image 199
Niklas Holm Avatar answered Oct 05 '22 13:10

Niklas Holm


git-for-windows/git issue 2688 adds a more recent (2020) perspective, from the maintainer of Git for Windows Johannes Schindelin:

The purpose of Git for Windows is really to bring Git to Windows.

While that implies that we have to ship quite a few Unix-like tools, it does not mean that we will include such tools unless they are needed for Git's own operations, or at least for historical reasons (needs of active contributors are sometimes a factor in deciding whether to include a tool or not).

Having said that, what you really are looking for is MSYS2.
Git for Windows leverages MSYS2 and ships with a subset of its files. MSYS2 even sports a package management system called "pacman" to install more tools (including Git...).

The documentation is "Install inside MSYS2 proper" as noted in the question, but it has recently changed, since Pacboy is removed from the base installation.

So it needs to be added back with:

# 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 

Then:

Copying /var/lib/pacman/local files over from my msys2 installation into git-bash's, I was able to install tmux (as I planned/showed in OP), and it is working fine for me.

So, having /var/lib/pacman/local files is all it take for msys2 and pacman to work within git-bash (I meant git-for-windows).

like image 24
VonC Avatar answered Oct 05 '22 12:10

VonC