2017-08-15 114 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有它自己的!您指出我在正確的方向,雖然,謝謝 –