在Windows上使用msysgit--如果有什么需要注意的,我应该知道吗?

41

这与我最近提出的问题有关。

在安装msysgit时,安装程序提供了3个与系统路径相关的选项:

  1. 从不更改Windows环境。选择此选项后,您必须使用"bash" shell来使用git。

  2. 将git \ bin目录添加到PATH环境变量中,但不覆盖某些内置的Windows工具。Stackoverflow用户Gabe Moothart在评论中告诉我,此选项会导致某些git操作失败!这些操作是什么?我需要担心吗?

  3. 与2相同,但重写了一些默认系统工具。这些工具是什么?Windows的哪些部分依赖它们?实际上会对其造成伤害吗?

另一个与系统PATH无关的问题也浮现在我的脑海中。

如果我的项目目录中包含符号链接和硬链接,会怎样呢?Git知道如何处理这些吗?或者,如果说目录结构使得某个文件夹实际上是其父文件夹之一的符号链接,它会遭受无限递归吗?

5个回答

44
无论选择哪个选项,您都会得到bash,后面的选项只是添加了在Git之外使用Git的方法。
对于后一种选项,msysgit将常见的Linux实用程序的Windows版本添加到PATH。这包括findkillsort,以及cplsrm和其他20-30个工具。
前三个选项(以及类似选项)的问题在于它们存在于两个操作系统中,并且在每个操作系统中的功能不同。
如果您知道要使用哪个选项,则不是什么大问题,但是如果任何应用程序预期获得其中一个却得到了另一个,则肯定会出现问题。
为了避免冲突,同时确保Git按预期工作,您可以创建一个简单的批处理脚本,仅为当前会话调整PATH。(例如,readygit.bat
@echo off
setlocal
set PATH=C:\Git\bin;%PATH%
cmd

根据需要,调整C:\Git\bin。然后运行此命令并在cmd中使用Git。

通过这样做,您可以使用安装选项3,并安全地从系统的PATH中删除C:\Git\bin,消除 Windows 应用程序的混淆但不影响 Git。

我目前使用类似的脚本来处理GnuWin应用程序,包括find


2
或者,将 export PATH=$PATH:/c/mingw/bin:/c/mingw/msys/1.0/bin 添加到 Git Bash 的 /etc/bash_profile 中,以便从 msysGit 的 shell 中访问 MinGW。 - rpjohnst
2
不确定自从这篇文章和答案发布以来是否有任何变化,但我发现msysgit会将条目附加到系统PATH中。因此,在PATH中较早的位置上仍然可以找到Windows版本的find、sort等。在我的系统dos提示符中,我检查了msysgit安装后find的位置,它被发现在其原始位置:C:\Program Files\Git\usr\bin>which find /c/WINDOWS/system32/find。是否仍需要创建bat文件并从PATH中删除msysgit条目? - Lidia

9

您需要知道的是:

  • 并非所有git命令都还存在。在MSysGit1.6.2早期(2009年3月):archimport、cvsexportcommit、cvsimport、cvsserver、filter-branch、instaweb、send-email和shell。

  • 直到MSysGit1.6.2,git-svn才不存在(现在已经有了)。
    问题在于git-svn需要svn的perl绑定,而您只能将它们构建为动态可加载模块。而MSysGit有一个perl版本,不支持动态可加载模块。

  • 关于MSysGit的所有细节最好在他们的MSysGitHerald Github Wiki中解释。


3
在Windows上(在我非常谦虚的意见中),您必须非常注意crlf问题,并且请注意(除非他们在Git的最新版本中更改了此设置,我认为他们可能会这样做-或者如果您正在使用旧版本的Git),默认情况下启用autocrlf,而其他所有git安装程序都没有启用。
此外,请注意,除非您使用最新版本的msysgit(如果我从邮件列表中正确地记得,将于本周发布),否则您的存储库大小不能超过2GB。
另外,Windows是奇怪的不区分大小写但/有时/保留大小写-请记住这一点! (这并不一定会使git混淆-但它可以并且确实使git repo的用户感到困惑)。
最后,与Linux相比,Git在Windows上速度要慢得多,尽管它(根据我的有限经验)比替代品更快。
现在,关于路径...
除非我错了,您应该能够确保主git二进制文件在路径中-那个二进制文件应该负责引用其他git组件...但我没有测试过。

2
据我所知,Windows始终保留大小写。当一个名称全部大写时,Windows资源管理器会将其显示为小写,但文件名仍保持为大写。 - configurator
那是错误的,但如果你能找到支持的文章会很有帮助 :) - Arafangion

2
MSYS Git安装程序建议选择选项2,如果您打算从cygwin提示符中运行git。 cygwin环境确保git依赖项在您的PATH中。 如果您选择了此选项,但然后从Windows命令提示符中调用git,则所有git依赖的类Unix命令行实用程序都将找不到。 据我所知,git本身部分实现为bash脚本。 我不知道哪些操作会失败,但我认为以这种方式使用git是不可用的。

我没有选项3覆盖的系统工具列表(安装程序提到find.exe),但只有批处理脚本忍者才会受到影响。 在命令行中,find现在将引用该名称的unix实用程序,而不是随Windows一起提供的exe。 它不会以任何方式损害Windows。

只需放手选择选项3 :-)


如果非批处理脚本专家使用任何带有批处理脚本的工具,那么这将会影响他们。我也使用过太多类似的工具,很可能会失败。 - configurator

0

当您在Windows上使用Windows GUI并创建第一个存储库时,请不要为存储库目录输入名称“.git”(当您最终想要查看时,它将创建该目录,然后在其下创建另一个.git文件夹)。浏览到包含源文件的文件夹,然后选择该文件夹!存储库目录“.get”将为您创建。

然后,您会看到未暂存更改中的文件,并通过单击文件名旁边的小页面图标将它们移动到已暂存更改中。

并且一定要运行剪刀并选择选项3。没有人再从命令窗口行使用kill、sort或find。


1
嗯,这与Windows上的msysgit无关(因为这也适用于Linux)。我想知道它可能会干扰或损坏其他Windows系统工具的方式。 - hasen

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