2010-10-25 8 views
16

je tentais de mettre en place des alias git en ajoutant ces lignes à mon fichier ~/.gitconfig:Git Alias ​​problème

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

Et quand je vais exécuter ces commandes dans le terminal: git st, je reçois l'erreur suivante fatal: cannot exec 'git-st': Not a directory. Je ne sais pas quel est le problème et j'ai regardé en ligne et ne peux pas trouver pourquoi il le fait. Je cours Mac OS 10.6.4 en utilisant Git 1.7.1. Quelqu'un s'il vous plaît aidez-moi. Si je ne comprends pas pourquoi c'est ce qu'il fait, je deviendrai fou! Merci!

+0

'git status' fonctionne correctement, non? – Cascabel

+0

Oui. Toutes les commandes normales fonctionnent bien, c'est juste les alias qui provoquent cette erreur. – agentbanks217

+0

Est-ce que 'git config alias.st' affiche' status'? –

Répondre

17

unutbu souligné à juste titre à l'git-osx-installer issue 53, qui stipule:

En fait, je l'avais /root/bin dans mon chemin et ne pas avoir des autorisations pour ce répertoire.

Fait intéressant, ce n'était pas un problème avec git 1.6.3, mais c'était avec 1.7.0 et 1.7.1.

Un strace -f -eexecve git st 2>&1 | grep EACC peut aider à voir ce répertoire est le problème:

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

(dans ce cas, la /usr/games/bin/)

Another way pour trouver le chemin le problème est:

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

Un de mes éléments non valides est en fait un répertoire monté NFS auquel je n'ai pas l'autorisation d'accéder car je ne me suis pas authentifié via Kerberos au serveur NFS d'entreprise.
La suppression d'un élément du PATH résout le problème et «git stat» (mon alias pour le statut) fonctionne désormais.


PeterT mentionne dans le commentaire que vous pourriez ne pas avoir strace disponibles (comme dans Solaris or OsX, comme indiqué dans « Equivalent of strace -feopen <command> on mac os X »), auquel cas dtruss est un bon équivalent.

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

Cela l'a réparé! J'ai regardé dans mon '~/.bash_profile' pour un objet égaré dans mon chemin, je l'ai trouvé, enlevé, et cela a fonctionné. Merci beaucoup! – agentbanks217

+0

Si vous n'avez pas strace: 'dtruss -f -t execve git st 2> & 1' –

+0

@PeterT: bon point. Je l'ai inclus dans la réponse pour plus de visibilité. – VonC

6

J'ai eu ce problème aussi, mais avec une cause subtilement différente:

Dans mon cas, le chemin contenait une entrée qui était un fichier plutôt qu'un répertoire. Les autorisations sur le fichier lui-même et son répertoire étaient bien. Lorsqu'un nouveau terminal était chargé, le fichier pouvait être exécuté depuis n'importe où. Cependant, git a donné un message d'erreur identique. Donc, en plus de rechercher des dossiers sur le chemin avec des permissions incorrectes, je suggère que tout le monde avec ce problème vérifie également que le chemin pointe uniquement vers des dossiers et non vers des fichiers.

+0

Merci, ça m'a aidé. – Ciryon

0

Trouvé le même problème dans OSX après l'installation de Foundation.

La ligne incriminée dans mon .bash_profile était un chemin d'exportation de base mal formé. Je n'ai pas supprimé la/base à la fin de la ligne, donc il pointait vers un fichier binaire, pas un dossier.Il suffit de le réparer, recharger Terminal et tout a de nouveau fonctionné.

0

J'ai eu le même problème aussi, et c'était une ligne .bash_profile mal formatée.

Quand j'ai installé WP_CLI, il a ajouté la ligne suivante à mon .bash_profile

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

je devais faire un léger changement pour elle. J'utilise CentOs d'ailleurs.

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

Ceci a résolu mon problème.

0

Git dispose également d'une commande d'alias intégrée.

commandes alias Exemple:

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'