如何在OSX 10.8上更新我的git版本

5

我使用OSX 10.8.2,运行的是git v1.7.4.4。

我刚在远程服务器上安装了git,版本为1.11.x。我想在我的笔记本电脑上运行相同版本的软件,但是我无法弄清楚如何更新git。

我尝试按照这里列出的步骤操作,这些步骤指示下载git-OSX-installer,然后运行安装程序(安装顺利进行),最后执行以下操作:

$ sudo mkdir -p /usr/local/bin
$ sudo ln -s /usr/local/git/bin/git /usr/local/bin/git

但是我执行了 git --version 命令,仍然显示的是1.7.4.4版本。我刚刚是重新安装了相同的版本吗?或者是我在其他地方安装了新版本?
我看到类似的问题并且认为问题在于OSX自带的旧版本的git被安装在不同的位置,而git-osx-installer或mac ports会将其放在另一个位置。但我不确定如何纠正这个问题。感谢您提前提供的建议。
更新: which git 命令返回: /usr/bin/git echo $PATH 命令返回: /opt/local/bin:/opt/local/sbin:/usr/local/rvm/gems/ruby-1.9.3-p194/bin:/usr/local/rvm/gems/ruby-1.9.3-p194@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p194/bin:/usr/local/rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/opt/sm/bin:/opt/sm/pkg/active/bin:/opt/sm/pkg/active/sbin
更新2:
ESL ~/Downloads$ export PATH=/usr/local/bin:$PATH
ESL ~/Downloads$ which git
/usr/local/bin/git
ESL ~/Downloads$ 
ESL ~/Downloads$ git --version
git version 1.8.1.3

看起来我在本地安装了较新的 git 版本。那么我是否应该将 export PATH=/usr/local/bin:$PATH 添加到我的 .bash_profile 文件中呢?两个版本的 git 安装在电脑上会有问题吗?

我已经在我的 ~/.bash_profile 文件末尾添加了 export PATH=/usr/local/bin:$PATH,现在可以运行新版本的 git 了。


which git 显示的是什么?echo $PATH 的结果中包含 /usr/local/bin 吗? - t.niese
我已将它们都添加到上面的问题中。 - emersonthis
3个回答

17
在Mac OSX机器上更新任何二进制文件的最佳方法是使用专门为Mac开发的软件包(.dmg或.pkg下载)。
对于git,可以在以下网址找到:http://git-scm.com/download/mac(点击此链接应该会自动下载最新版本的git for Mac)。
然而,在这种情况下(至少对于我的10.8.3 MacBook),这并不是全部:该软件包将git安装在/usr/local/git,然后将该路径添加到$PATH的末尾-这个做法我认为有些得不偿失。
我手动修改了.bashrc,以使其类似于上述建议。
export PATH=/usr/local/git/bin:$PATH

完成此步骤后,您应该看到已选择正确版本的Git:

$ git --version
git version 1.8.2.2 

请注意,这种方法对于任何通过交互方式启动的应用程序都不起作用(例如,通过停靠栏),您需要运行下载包中提供的附加脚本;请参阅 README 中的说明。


有没有简单的方法可以撤销这个更改?我只是想测试一下我尝试过的另一种方法是否有效。 - reem

15

由于在您的路径中,/usr/bin出现在/usr/local/bin之前,因此/usr/bin中的git可执行文件将被优先使用。 请在您的shell中尝试以下操作:

export PATH=/usr/local/bin:$PATH
which git 

顺便提一下,我强烈建议在macos上使用homebrew来管理此类安装


我已经在上面添加了你的测试结果,并附上了一些相应的问题。 - emersonthis
不用担心你安装了两个版本 - 你可以将那个导出行添加到你的 ~/.bashrc 文件中,从此以后 /usr/local/bin 中的版本将始终优先。 - Ali-Akber Saifee
我肯定推荐安装Homebrew - 但如果你时间紧迫的话,今天可能不是修改你的Mac的好时机 :) Homebrew可以做一些很棒的事情 - 在这种情况下最相关的可能是:1)确保您安装的所有软件包都安装在安全的“沙盒”位置(即不会直接污染您的/ usr / bin)。2)跟踪已安装的内容及其关联版本,3)让您轻松切换版本。 - Ali-Akber Saifee
我认为当前的位置应该是可以的 - 一旦你开始使用 Homebrew 安装软件,它将链接到 /usr/local/bin 安装的版本,这将简单地覆盖你所创建的符号链接 (对于 Git)。 - Ali-Akber Saifee
1
我使用Homebrew安装了新版本的Git。然后我删除了/usr/bin中的Git文件,这样就可以正常工作了。 - leontalbot
显示剩余2条评论

3
我在Cygwin(为Windows编译的Linux环境)中遇到了类似的问题。我会执行以下操作:
which git

它将会回复正确的位置,这是从源代码编译的git的更新版本,但直到我使用它之前,它不会实际使用。

hash -r git

我不确定这个操作的具体作用和原因,但是执行完之后,git --version 命令返回的版本号变成了 '1.8.2.rc0.22.gb3600c3',显然不再是旧版的 Cygwin 自带的 git。如果你使用的是 OSX 系统,可能不需要这个操作,但是如果 which git 命令找到了更新的二进制文件,可以尝试一下。


我在问题中添加了which git$PATH。这是否会改变您的建议? - emersonthis
不是很复杂,只需要尝试运行 hash -r git 命令,然后查看 git --version 的输出即可。 - Ehryk
谢谢!我不知道shell使用哈希表来存储可执行文件的路径。您还可以重新启动shell,它也会清除哈希表。更多详情请参见:http://crashingdaily.wordpress.com/2008/04/21/hashing-the-executables-a-look-at-hash-and-type/ - HyBRiD
我遇到了一个问题,shell返回hash: too many arguments - XY Li

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