2017-08-15 3 views
2

Ich benutze Git auf einem Shared-Hosting-Plan, der eine Linux-Distribution läuft. Da es freigegeben ist, habe ich keinen Zugriff auf sudo. Die Maschine hat bereits die git-Version 1.7.1 in /usr/bin/ installiert, aber diese Version ist an dieser Stelle eher prähistorisch. Ich habe bereits make install verwendet, um die aktuelle Version 2.14.1 zu erhalten, die in ~/git-2.14.1/ ist. Wie von this answer detailliert, kann ich die richtige Version von git aus dem Zeilenbefehl wie so zugreifen:Verwenden Sie Git-Verknüpfungen mit einer neuen Version, überschreiben alten

$ git --version 
git version 2.14.1 

, die eine einfache Änderung an den $PATH Variable war, in den ~/.bash_profile, so kann ich git ganz gut verwenden.

Ich habe eine Liste von Verknüpfungen in meiner ~/.gitconfig-Datei, die git viel schneller macht für mich zu gebrauchen:

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

Wenn ich rufe diese (zB git st), erhalte ich die Ergebnisse aus der falschen Version von git . Es geht zurück auf 1.7.1. Wenn ich den vollständigen Befehl (z. B. git status) austippe, wird die richtige Version von Git verwendet.

Ich habe diese Befehle auch in meinem ~./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 
} 

, die ich source seit Schreiben -ed.

habe ich auch versucht:

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

ohne Erfolg.

Gibt es eine Möglichkeit, diese Abkürzungen mit meiner bevorzugten Version von Git zu verwenden? Ich stelle mir eine Möglichkeit vor, die Konfigurationsdatei von der anderen Version zu verbergen, indem ich den Zeiger an einen anderen Ort umlenke, aber ich weiß nichts über die Existenz eines solchen Zeigers.

Alternativ gibt es eine Möglichkeit, die vorherige Version von git ohne root Zugriff vollständig zu deaktivieren?

Antwort

1

Hier ist, was ich gefunden habe. Wenn ich den Alias-Abschnitt von .gitconfig herausnahm, funktionierte die oben erwähnte Shell-Wrapper-Funktion. Wenn ich das entfernte und die SSH-Verbindung neu startete, funktionierte nichts (wie erwartet).

Ich fand, mit Hilfe von this answer, dass es ein magischen GIT_EXEC_PATH Variable ist, die git sagt, wo Werkzeuge wie git-add zu finden, git-commit, git-status, et. al .. uncommenting meinen alias Abschnitt der .gitconfig Datei und mit

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

machte es möglich, die Aliase in der .gitconfig-Datei zu verwenden. Für mich ist der Weg, der arbeitete, war die gleichen Ordner wie ich in installiert: ~/git-2.14.1 .Sie können den aktuellen Wert von GIT_EXEC_PATH mit überprüfen:

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

Auch echo $GIT_EXEC_PATH wie gut funktioniert. Mein Verständnis ist, dass git seine Aliase nicht über die Instanz von git verwendet, die git <alias> aufgerufen hat, sondern direkt durch die ausführbaren Dateien in ihrem exec-Pfad.

Hinweis: für mich,

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

hat nicht funktioniert, aber wenn ich das richtig verstehe, ist dies der entsprechende Befehl.

TL; DR: fügen Sie den Pfad zu den neuen ausführbaren Dateien (git-add, git-status, etc.) in Ihrem .bash_profile:

export GIT_EXEC_PATH=/your/path/ 
+1

Nice find mit 'GIT_EXEC_PAT' (das habe ich in https://stackoverflow.com/a/43432410/6309 beschrieben). +1 – VonC

1

Wenn ich diese aufrufen (z. B. Git st), bekomme ich die Ergebnisse von der falschen Version von Git. Es geht zurück auf 1.7.1

Das ist nicht, was ich in meiner Ubuntu-Sitzung sehe.

Ich habe in meinem .gitconfig

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

Das bedeutet, ich tippe git v, git version zu überprüfen (die die gleiche wie git --version ist).

Wenn ich meinen PATH zu einem neuen kompilierten Git ändere, sehe ich eine andere Version.

[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

ich nicht bekommen die gleichen Ergebnisse. Ich habe 'v =! Git version' hinzugefügt und selbst wenn ich' ~/git-2.14.1/git v' mache, bekomme ich immer noch: 'git version 1.7.1'. Das bleibt sogar bestehen, wenn ich folgendes mache: 'export PATH = ~/git-2.14.1 /: $ PATH' und' export PATH = ~/git-2.14.1: $ PATH' –

+0

@ M.Davis Ja, weil die! öffnet eine Unter-Shell, in der Ihr Pfad nicht identisch ist. Sind Sie sicher, dass Sie an keiner Stelle einen Alias ​​oder eine Funktion 'git' haben, die Vorrang haben könnte? – VonC

+0

Sieht aus wie Git hatte seine eigene! Du hast mich aber in die richtige Richtung gezeigt, danke –

Verwandte Themen