记一次 Git 版本升级

今天看了 Git 相关的书,知道 Git 有更新的版本(2.0版本以上),看了一下自己原来用 yum 方式装的 Git 只到 1.8 版本,于是决定升级下 Git

我是通过源码编译的方式安装 Git 新版本,安装到 /usr/local/bin 目录下,而原来的 Git 是安装在 /usr/bin 目录下的,查看环境变量 PATH

# echo $PATH
# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

可见 /usr/local/bin 的优先级是比 /usr/bin 更高的,那么新版本 Git 安装到前一个目录下,查看 Git 版本应该是 2.0 以上版本了,然而运行 git --version 返回的结果仍是 1.8版本,使用 which git 命令,返回的结果为 /usr/local/bin/git ,也符合预期,但是使用 git 命令仍执行原来的旧版本

网上搜到的解决方法一般是把原来的可执行文件删了,然后把新版本的可执行文件放到原来的路径下。这个方法虽然能使用新版本了,但是仍没有解决运行的 git 命令和 which git 所得的 git 版本不一致的问题

最后,我通过重新刷新环境变量的方式source /etc/profile ,可以让 git 命令指向新版本了 !!

问题复现:

1.在任意目录下新建两个可执行文件,我是在根目录下创建两个文件 test_oldtest_new:

//test_old
echo "old_version"
//test_new
echo "new_version"

然后执行 chmod 命令给两个文件加上可行性权限

2.先把 test_old 复制到 /usr/bin 目录下 cp -pf /root/test_old /usr/bin/test1,此时 which test1 显示 /usr/bin/test1,在终端运行 test1 命令返回 old_version

3.再把 test_new 复制到 /usr/local/bin 目录下 cp -pf /root/test_new /usr/local/bin/test1 ,此时运行 which test1 命令显示 /usr/local/bin/test1,在终端运行 test1 命令仍旧返回 old_version

4.同样 source /etc/profile 后 ,在终端运行 test1 命令返回 new_version,符合预期

ps:如果在第二步中,不运行 test1 命令,而是接着把 test_new 文件复制到 /usr/local/bin 目录下,再运行 test1 命令,则返回的结果就是 new_version

猜测:在终端运行一个命令后,它会记录它当前的 PATH,即使把它移动到优先级更高的 PATH,或者把它的新版本放在优先级更高的 PATH,虽然 which 命令会安装 PATH 的优先级,发现在高优先级的路径中已经包含该命令对应的可执行文件,但命令既然运行过一次后,就会去它记录中的、原来的路径找可执行文件,在使用 source /etc/profile 命令更新环境变量后,问题就会解决

你可能感兴趣的:(Linux)