【问题标题】:git --version command returns different result from what's actually installedgit --version 命令返回的结果与实际安装的结果不同
【发布时间】:2019-07-19 04:04:08
【问题描述】:

尝试用 homebrew 更新我的 git,我遇到了这个问题:

MBP:GitHub_Tutorial nasdas$ brew install git
Warning: git 2.21.0 is already installed and up-to-date
To reinstall 2.21.0, run `brew reinstall git`
MBP:GitHub_Tutorial nasdas$ git --version
git version 2.17.2 (Apple Git-113)

【问题讨论】:

  • 运行hash -r,然后运行which git。输出是什么?
  • /usr/local/bin/git
  • 更有趣的是,在运行 hash -r 之后,当我运行 git --version 时,它现在会显示正确的 git 版本

标签: git terminal homebrew


【解决方案1】:

大概您已经安装了两个版本,彼此独立。

使用type gitwhich git 查看您正在运行的是哪一个。可能是/usr/bin/git。 brew 安装的可能是/usr/local/bin/git。更改您的$PATH(或$path 或您的shell 使用的任何内容)将/usr/local/bin 放在/usr/bin 之前,以便git 将运行新的而不是旧的,或者使用/usr/local/bin/git 运行新的一个。

(并且,作为Greg Bacon notes in a comment,请注意,如果他们已经确定git 表示@ 987654335@ 即使$PATH 之前有/usr/local/bin。在csh/tcsh 中这是rehash 而不是hash -r。)

(原来是哈希问题——你的 shell 之前决定 git 是旧的那个。再次登录也可以清除这类问题,但那很痛苦!)

【讨论】:

  • 好的,感谢您的澄清! '$PATH' 到底是什么,我假设 brew 是在我的本地用户帐户而不是全局用户帐户上安装软件包?如您所见,我对 shell 命令仍然很陌生,所以我很高兴了解更多
  • $PATH 是一个 shell 变量 一个环境变量(shell 倾向于将两者混合在一起,现在只要知道两者都是)shell 用来决定如何 运行命令。也就是说,您输入类似gronk fleeble1 fleeble2 的命令。 shell 不知道这意味着什么:它只是试图找到一些名为gronk 的可执行程序并将这两个参数传递给它,以便 it 弄清楚。但是外壳会在哪里找到gronk?答案是:它查看$PATH 的每个元素,一次一个元素。 [续]
  • $PATH 可以设置为,例如,/usr/local/bin:/bin:/usr/bin。所以 shell 会尝试运行/usr/local/bin/gronk,这可能会失败。然后它会尝试/bin/gronk,这可能也失败了,最后,/usr/bin/gronk 可能失败了,然后它放弃并说:gronk: not found。但是,如果其中一个成功,那么现在shell 知道gronk 在哪里,并且下次可以直接去那里。这就是加速同一程序以后运行的“哈希”。
  • 您可以编写自己的自己的命令并将它们放在添加到$PATH 的目录中,现在您也可以运行自己的命令了。我有两个这样的目录:一个用于二进制文件(必须为每个机器架构编译,例如 x86 vs arm 或 powerpc),一个用于脚本(在所有机器上都一样)。二进制是$HOME/bin.$arch,其中$HOME 是shell+env 变量,$arch 是我自己设置的shell 变量。脚本之一是$HOME/scripts。这样,我可以在不同的机器上使用相同的主目录。
  • 当 $PATH 变得很长时,哈希技巧变得很重要。我的一台机器上有 11 个元素,另一台机器上有 16 个元素......
猜你喜欢
  • 2019-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-22
相关资源
最近更新 更多