git --version 命令返回与实际安装的结果不同的结果

use*_*063 4 git terminal homebrew

尝试用 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)
Run Code Online (Sandbox Code Playgroud)

tor*_*rek 7

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

\n\n

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

\n\n

(并且,正如Greg Bacon 在评论中指出的那样,请注意,您可能必须hash -r在各种 shell 中运行,以便让他们在安装某些内容后再次检查/usr/local/bin,如果他们已经决定这git意味着/usr/bin/git即使之前$PATH已经这样做了/usr/local/bin。在 csh/tcsh 中这是rehash代替hash -r。)

\n\n

(事实证明,这是哈希问题\xe2\x80\x94,您的 shell 早些时候决定,这git意味着旧的问题。再次登录也可以清除此类问题,但这很痛苦!)

\n

  • `$PATH` 是一个 shell 变量*和*一个环境变量(shell 倾向于将两者混合在一起,现在只要知道它是两者就足够了),shell 使用它来决定*如何*运行命令。也就是说,您输入类似“gronk folleble1fleble2”的命令。shell 不知道这意味着什么:它只是尝试找到一些名为“gronk”的可执行程序并将这两个参数传递给它,让 *it* 弄清楚。但是 shell 会在哪里找到 `gronk` 呢?答案是:它查看“$PATH”的每个元素,一次一个元素。[续] (2认同)
  • 例如,`$PATH` 可以设置为 `/usr/local/bin:/bin:/usr/bin`。因此 shell 会尝试运行 `/usr/local/bin/gronk`,这可能会失败。然后它会尝试“/bin/gronk”,这可能也会失败,最后,“/usr/bin/gronk”可能也失败,然后它放弃并说:“gronk:找不到”。但如果其中一个“成功”,那么,现在 shell 知道“gronk”在哪里,并且下次可以直接去那里。这就是加速同一程序以后运行的“哈希”。 (2认同)
  • 您可以编写*自己的*命令并将它们放入添加到“$PATH”的目录中,现在您也可以运行自己的命令。我的目录中有两个这样的目录:一个用于二进制文件(必须针对每种机器架构进行编译,例如 x86 与 arm 或 powerpc),另一个用于脚本(在所有机器上都相同)。二进制文件是`$HOME/bin.$arch`,其中`$HOME`是一个shell+env变量,`$arch`是我自己设置的一个shell变量。脚本之一是“$HOME/scripts”。这样我就可以在不同的机器上使用相同的主目录。 (2认同)
  • 当 $PATH 变得很长时,哈希技巧就变得很重要。我的一台机器上有 11 个元件,另一台机器上有 16 个...... (2认同)