使用带有新版本的git快捷方式,覆盖旧版本

时间:2017-08-15 16:12:06

标签: linux git

我在运行Linux发行版的共享主机方案上使用git。因为它是共享的,所以我无法访问sudo。该机器已经安装在1.7.1中的git版本/usr/bin/,但此版本在这一点上相当史前。我已经使用make install来获取2.14.1中的当前版本~/git-2.14.1/。正如this answer所详述,我可以从命令行访问正确版本的git,如下所示:

$ git --version
git version 2.14.1

这是对$PATH~/.bash_profile变量的简单更改,所以我可以使用git就好了。

我的~/.gitconfig文件中有一个快捷方式列表,可让我更快地使用git:

[alias]
    co = checkout
    st = status
    ci = commit
    ... etc etc etc

当我调用这些(例如git st)时,我从错误版本的git中得到结果。它可以追溯到1.7.1。如果我输入完整命令(例如git status),它将使用正确版本的git。

我在~./bashrc

中也有这些命令
git () {
    case "$*" in
        st* ) shift 1; command ~/git-2.14.1/git status "$@" ;;
        * ) shift 1; command ~/git-2.14.1/git "$@" ;;
    esac
}

自写作以来我source编辑。

我也尝试过:

alias git="~/git-2.14.1/git"

无济于事。

是否有一种解决方法可以让我在我喜欢的git版本中使用这些快捷方式?我想通过将指针重定向到不同的位置来隐藏配置文件的方法,但我不知道是否存在任何这样的指针。

或者,有没有办法在没有root访问权限的情况下完全禁用以前版本的git?

2 个答案:

答案 0 :(得分:1)

  

当我调用这些(例如git st)时,我从错误版本的git中得到结果。它可以追溯到1.7.1

这不是我在Ubuntu会话中看到的。

我的.gitconfig

1502813688437   geckodriver INFO    geckodriver 0.18.0
1502813688445   geckodriver INFO    Listening on 127.0.0.1:37427
1502813688743   geckodriver::marionette INFO    Starting browser /Applications/Firefox.app/Contents/MacOS/firefox-bin with args ["-marionette"]
1502813691158   Marionette  INFO    Listening on port 62402
1502813691575   Marionette  DEBUG   loaded listener.js
2017-08-15 17:14:51.696 plugin-container[1907:206445] *** CFMessagePort: bootstrap_register(): failed 1100 (0x44c) 'Permission denied', port = 0x913b, name = 'com.apple.tsm.portname'
See /usr/include/servers/bootstrap_defs.h for the error codes.
2017-08-15 17:14:51.700 plugin-container[1907:206445] *** CFMessagePort: bootstrap_register(): failed 1100 (0x44c) 'Permission denied', port = 0x9503, name = 'com.apple.CFPasteboardClient'
See /usr/include/servers/bootstrap_defs.h for the error codes.
Aug 15, 2017 5:14:51 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
1502813691752   Marionette  DEBUG   Received DOM event "beforeunload" for "about:blank"
1502813691853   Marionette  DEBUG   Received DOM event "pagehide" for "about:blank"
1502813691853   Marionette  DEBUG   Received DOM event "unload" for "about:blank"
1502813691864   Marionette  DEBUG   Received DOM event "DOMContentLoaded" for "http://10.32.16.35:3000/"
1502813691904   Marionette  DEBUG   Received DOM event "pageshow" for "http://10.32.16.35:3000/"

这意味着我输入[alias] st = status br = branch v = !git version ,以检查git v(与git version相同)。

如果我将PATH更改为新编译的Git,我会看到不同的版本。

git --version

答案 1 :(得分:1)

这是我发现的。如果我取出.gitconfig的别名部分,前面提到的shell包装函数就可以了。如果我删除它并重新启动ssh连接,则没有任何效果(如预期的那样)。

我在this answer的帮助下发现,有一个神奇的GIT_EXEC_PATH变量告诉git在哪里可以找到git-addgit-commit,{{1}等工具等等。 al ..取消注释git-status文件的别名部分并使用

.gitconfig

可以使用$ export GIT_EXEC_PATH=/path/to/my/new/git's/executables/ 文件中的别名。对我来说,有效的路径与我安装的文件夹相同:.gitconfig。您可以使用以下命令检查~/git-2.14.1的当前值:

GIT_EXEC_PATH

此外,$ git --exec-path /path/to/my/new/git's/executables/ 也适用。我的理解是git使用别名而不是通过调用echo $GIT_EXEC_PATH的git实例,而是直接通过它的exec路径中的可执行文件。

注意:对我来说,

git <alias>

不起作用,但如果我理解正确,这是等效的命令。

TL; DR :在$ git --exec-path=/path/to/my... 中添加新可执行文件(git-addgit-status等)的路径:

.bash_profile