2010-10-25 5 views
16

Ich habe versucht, durch das Hinzufügen dieser Zeilen zu meinem ~/.gitconfig Datei einige git Aliase einzurichten:Git Alias ​​Problem

[alias] 
    st = status 
    ci = commit 
    br = branch 

Und wenn ich diese Befehle in das Terminal laufen: git st, bekomme ich folgende Fehler fatal: cannot exec 'git-st': Not a directory. Ich weiß nicht, was das Problem ist, und ich habe online gesucht und kann nicht herausfinden, warum es das tut. Ich benutze Mac OS 10.6.4 mit Git 1.7.1. Jemand bitte hilf mir aus. Wenn ich nicht herausfinde, warum es so ist, werde ich verrückt! Vielen Dank!

+0

'git status' richtig, richtig funktioniert? – Cascabel

+0

Ja. Alle normalen Befehle funktionieren gut, es sind nur die Aliase, die diesen Fehler auslösen. – agentbanks217

+0

Hat 'git config alias.st' print' status'? –

Antwort

17

unutbu wiesen richtig die git-osx-installer issue 53 zu aus, in dem es heißt:

Grundsätzlich ist /root/bin in meinem Weg hatte und Berechtigungen nicht für dieses Verzeichnis hat.

Interessanterweise war dies kein Problem mit Git 1.6.3, aber es war mit 1.7.0 und 1.7.1.

A strace -f -eexecve git st 2>&1 | grep EACC helfen kann sehen, in welchem ​​Verzeichnis das Problem ist:

[pid 6469] execve("/usr/games/bin/git-st", ["git-st"], [/* 72 vars */]) = -1 EACCES 

(in diesem Fall die /usr/games/bin/)

Another way den Pfad mit dem Problem zu finden ist:

echo $PATH |tr ':' '\n' |xargs ls -ld 

Eins meiner ungültigen Elemente ist tatsächlich ein NFS-eingehängtes Verzeichnis, auf das ich keine Zugriffsrechte habe, weil ich mich nicht über Kerberos an den NFS-Server des Unternehmens authentifiziert habe.
Das Entfernen dieses einen Elements aus der PATH behebt das Problem, und 'git stat' (mein Alias ​​für den Status) funktioniert jetzt.


PeterT erwähnt in dem Kommentar, der nicht zur Verfügung strace (wie in Solaris or OsX, wie in "Equivalent of strace -feopen <command> on mac os X" beschrieben) haben könnten, wobei in diesem Fall dtruss ein gutes entspricht.

dtruss -f -t execve git st 2>&1 | grep EACC 
+1

Das hat es behoben! Ich suchte in meinem '~/.bash_profile' nach einem verirrten Gegenstand in meinem Weg, ich fand ihn, entfernte ihn und es funktionierte. Danke vielmals! – agentbanks217

+0

Wenn Sie nicht strace haben: 'dtruss -f -t execve git st 2> & 1' –

+0

@PeterT: guter Punkt. Ich habe es in die Antwort für mehr Sichtbarkeit aufgenommen. – VonC

6

Ich hatte dieses Problem auch, aber mit einer subtil andere Ursache:

In meinem Fall der Pfad einen Eintrag enthalten, der eine Datei anstatt ein Verzeichnis war. Die Berechtigungen für die Datei selbst und ihr Verzeichnis waren in Ordnung. Wenn ein neues Terminal geladen wurde, konnte die Datei von überall ausgeführt werden. Git gab jedoch eine identische Fehlermeldung.

So, ebenso wie die Suche nach Ordnern auf dem Pfad mit falschen Berechtigungen Ich schlage vor, dass jeder andere mit diesem Problem auch überprüft, dass der Pfad nur auf Ordner und nicht auf Dateien zeigt.

+0

Danke, das hat mir geholfen. – Ciryon

0

Das gleiche Problem in OSX nach der Installation von Foundation gefunden.

Die problematische Zeile in meinem .bash_profile war ein fehlerhafter Foundation-Exportpfad. Ich habe das/foundation am Ende der Zeile nicht entfernt, also zeigte es auf eine Binärdatei, nicht auf einen Ordner.

Einfach repariert, neu geladen Terminal und alles hat wieder funktioniert.

0

Ich hatte das gleiche Problem, und das war eine schlecht formatierte .bash_profile Zeile.

Wenn ich WP_CLI installiert, hinzugefügt es die folgende Zeile in meinem Bash_profile

export PATH=/root/.wp-cli/bin:$PATH 

ich für sie eine leichte Veränderung zu machen hatte. Ich benutze CentOs für diese Angelegenheit.

export PATH=$PATH:/root/.wp-cli/bin 

Dies behoben mein Problem.

0

Git hat auch einen eingebauten Alias-Befehl.

Beispiel Alias-Befehle:

git config --global alias.co checkout 
git config --global alias.ci commit 
git config --global alias.st status 
git config --global alias.br branch 
git config --global alias.lola 'log --graph --decorate --pretty=oneline --abbrev-commit --all'