2017-08-15 49 views
2

我在运行Linux发行版的共享主机方案上使用git。由于它是共享的,我无权访问sudo。该机器已安装/usr/bin/安装git版本1.7.1,但此版本在这一点上是史前。我已经使用make install获得当前版本2.14.1,这是~/git-2.14.1/。正如this answer详细,我可以在命令行访问的git的正确版本,像这样:使用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 "[email protected]" ;; 
     *) shift 1; command ~/git-2.14.1/git "[email protected]" ;; 
    esac 
} 

我把这种写作source -ed。

我也曾尝试:

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

无济于事。

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

或者,有没有办法可以完全禁用以前版本的git而无需root访问?

回答

1

这是我发现的。如果我拿出.gitconfig的别名部分,上述的shell包装函数就起作用了。如果我删除并重新启动SSH连接,没有任何工作(如预期)。

我发现,与帮助从this answer,有一个神奇的GIT_EXEC_PATH变量,它告诉混帐在哪里可以找到工具,如git-addgit-commitgit-status等。人..在取消对.gitconfig文件我的别名部分使用

$ export GIT_EXEC_PATH=/path/to/my/new/git's/executables/ 

使人们有可能使用的别名在.gitconfig文件。对于我工作的路径是相同的文件夹我设置成:

$ git --exec-path 
/path/to/my/new/git's/executables/ 

此外,echo $GIT_EXEC_PATH作品,以及:~/git-2.14.1。您可以检查GIT_EXEC_PATH当前值。我的理解是,git不是通过名为git <alias>的git实例来使用它的别名,而是直接通过它的exec路径中的可执行文件。

注:对我来说,

$ git --exec-path=/path/to/my... 

没有工作,但如果我理解正确的话,这是等效的命令。

TL; DR:路径在.bash_profile添加到新的可执行文件(git-addgit-status等):

export GIT_EXEC_PATH=/your/path/ 
+1

很好找'GIT_EXEC_PAT'(我在https://stackoverflow.com/a/43432410/6309中描述)。 +1 – VonC

1

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

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

我有我的.gitconfig

[alias] 
     st = status 
     br = branch 
     v = !git version 

这意味着I型git v,检查git version(这是一样的git --version)。

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

[email protected]:~/gits$ echo $PATH 
/usr/local/bin:/usr/bin:/bin 
[email protected]:~/gits$ which git 
/usr/bin/git 
[email protected]:~/gits$ git v 
git version 2.13.0 

[email protected]:~/gits$ export PATH=~/gits/v2.14.0/bin:$PATH 
[email protected]:~/gits$ git v 
git version 2.14.0 
+0

我没有得到相同的结果。我添加了'v =!git version',甚至当我做'〜/ git-2.14.1/git v'时,我仍然得到:'git version 1.7.1'。当我这样做时,这甚至会持续:'export PATH =〜/ git-2.14.1 /:$ PATH'和'export PATH =〜/ git-2.14.1:$ PATH' –

+0

@ M.Davis是的,因为!打开一个你的路径不一样的子shell。你确定你没有别名或函数'git'在哪里可以有优先? – VonC

+0

看起来像git有它自己的!您指出我在正确的方向,虽然,谢谢 –