结合Mingw和Git

40

我在D:\mingw安装了MinGW。我在C:\Program Files\git安装了Git。我想使用MinGW进行开发/编译,并使用git进行版本控制。

我猜我必须使用正确的路径,但有些路径是硬编码的。比如,msys挂载脚本调用/bin/msysmnt.exe

所以我有两个选择: 1. 使用git的shell(能够在提示符下显示分支) 2. 使用mingw(msys)的shell-有正确的路径

无论我选择哪种方式,我都必须使另一种功能在其下运行。


相关:https://dev59.com/bG025IYBdhLWcg3wpXod - leonbloy
5个回答

28

小更新:自 Git 2.x 发布以来,Git for Windows 基于 MSYS2 并提供32位和64位二进制版本。它仍然是一个分支,并不能与真正的 MSYS2 软件互换。


有一件事必须了解:msysgit(你正在使用的 Git)是在 msys 的基础上添加了 Git 功能的分支。msys shell 中包含了许多 Unix 工具(完整列表请参见 msysgit/bin 文件夹)。

可能可以将其他 msys 工具添加到 msysgit bin 文件夹中,但我不会担保这样做是安全的。

鉴于此,我认为最好的方法是将工具链添加到 msysgit path 中(使用 bash profile 文件或 msysgit 树中的其他内容),然后直接使用它。如果缺少特定实用程序,请从 MinGW-msys 树中添加并希望它能正常工作。

另外,只需从 cmd.exe 使用 msys-git 即可。最近的版本非常好用(包括 git show、编辑提交消息等)。要做到这一点,请添加 /cmd 目录到 PATH 中,然后您就可以使用所有想要的 git 命令。这就是我所做的,因为 msys 很烦人,但对于 Git 在 Windows 上的工作来说是必要的。

更新:在任何类型的 MSYS 下将目录添加到 PATH 的详细说明:

export PATH=/d/MinGW/bin:$PATH

或者通过hack手段找到/etc/profile并更改该部分内容

if [ $MSYSTEM == MINGW32 ]; then
  export PATH=".:/usr/local/bin:/mingw/bin:/bin:$PATH"
else
  export PATH=".:/usr/local/bin:/bin:/mingw/bin:$PATH"
fi

收件人:

if [ $MSYSTEM == MINGW32 ]; then
  export PATH=".:/usr/local/bin:/d/MinGW/bin:/bin:$PATH"
else
  export PATH=".:/usr/local/bin:/bin:/mingw/bin:$PATH"
fi

没有更干净的方法,因为msys-git的人禁用了原始msys中存在的fstab功能。

Nick的更新(我怎样做才能使它工作):

我在C:\Program Files\Git\etc中创建了一个名为bash_profile的文件。这是文件的内容:

export PATH=$PATH:/d/mingw/bin:/d/mingw/msys/1.0/bin

编译和gcc工作正常。

bash_profile在msysgit中不包含,因此如果您更新,它将不会被覆盖。


第一条建议 - 我大致知道需要发生什么。我需要细节。“将工具链添加到msysgit路径”并不能说明一切。 - NickSoft
这真的很有帮助。我已经将mingw/bin和msys/1.0/bin添加到路径中,它可以工作了。但是我错过了挂载功能。我的文件在/d/mingw/msys/1.0/home/...下,有没有简单的方法来解决这个问题?也许可以用原始的msys文件覆盖一些来自msysgit的文件? - NickSoft
如果您缺少msys功能,请尝试反向操作:以相同的方式将msys-git/bin路径添加到MinGW-msys安装中。运气好的话,这也应该可以解决问题。要按照设计的方式将工具链添加到MinGW-msys中,请运行sh /postinstall/pi.sh并按照说明进行操作(当然您已经知道了 ;))。 - rubenvb
msysgit有点复杂。它定义了许多shell函数。其中一个优点是在bash提示符中显示当前分支...但我也会尝试。也许可以将git的“profile”复制到msys上。 - NickSoft
1
Bash是一种shell,而cmd则不是。使用别名和脚本编写更加容易,我可以在Linux中使用我的Bash脚本。 - NickSoft
显示剩余3条评论

16

我通过打开c:\MinGW\msys\1.0\etc\profile文件(不要在记事本中打开,因为没有换行符)并添加以下内容将Git放在了MinGW shell上:

export PATH=$PATH:/c/Program\ Files\ \(x86\)/Git/bin

在x86系统上,这将是:

export PATH=$PATH:/c/Program\ Files/Git/bin

7
使用msys2。 它是msys的一个不错的包管理器(pacman)和构建系统(makepkg),从arch linux移植而来。我有一个shell,里面有所有我的开发工具、git等。

或许加上实际的pacman命令会让这个答案更好。 - undefined

7
截至今天,在msys2 mingw64 shell中只需运行pacman -S git即可安装git。

1
这对我有用,谢谢!截至今天,MSYS2 v 20210228使用此方法安装了git version 2.31.1 - finnan
这应该是首选的方式。Git只是已经可用于msys2/mingw64的工具中的一个小附加功能。顺便说一下,你还应该运行pacman -S man(或者使用pacman -S git man代替)。 - undefined

6

3
Git for Windows不仅仅是Git可执行文件,还包括Bash提示符、不区分大小写的Bash自动补全文件和目录、Git GUI等等。此外,Git可能使用一些与我的MinGW版本不兼容的DLL库。 - NickSoft
@NickSoft 目前来看,GitHub的Windows GUI似乎比Git本身自带的GUI更好(或者至少更直观)。另一方面,它也隐藏了一些Git的功能,并且在发生任何异常情况或需要时需要打开shell(尽管它通常会告诉你并允许你轻松地打开配置为运行命令行Git的任何shell)。当前的inputrc.default也启用了不区分大小写的自动完成,但我不确定它是否在大约3年前就已经启用了。 - JAB
有趣的是...我刚刚下载了MinGW来进行一些跨平台测试...即使安装了MSYS,也没有预装Git。而且mingw-get install git会导致mingw-get.exe: *** ERROR *** git: unknown package错误。 - jww

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接