Alias git provoquant une erreur "Autorisation refusée"
Les commandes suivantes
$ git co -b newbranch
$ git co oldbranch
résultat dans "fatal: impossible exec 'git-co': Permission denied".
Dans le même temps,
$ git checkout -b newbranch
$ git checkout oldbranch
et
$ sudo git co -b newbranch
$ sudo git co oldbranch
fonctionner comme prévu. Les droits de propriété du .git dossier sont définis pour l'utilisateur propriétaire de la maison de dossier et 0755/0644 sont à la mode .git dossier/sous-dossier/fichiers. Il n'y a pas git-co
script n'importe où dans le système (qui est un expandable alias git-checkout
qui réside dans le répertoire /usr/libexec/git-core` dir).
Les alias sont définis dans .gitconfig
de la maison de dossier:
[alias]
co = checkout
Il n'y a pas de différence dans git config -l
de sortie pour l'utilisateur root ou utilisateur non privilégié. Encore sudo git co oldbranch
œuvres et git co oldbranch
ne pas.
Ce qui me manque?
Gentoo /kernel 3.0.6 /git 1.7.3.4
source d'informationauteur Alexei Danchenkov
Vous devez vous connecter pour publier un commentaire.
La bonne réponse à cette question est en fait différent. Avant git fonctionne l'alias il vérifie la
$PATH
. Dans le cas où le répertoire n'existe pas, ou ne possède pas les autorisations, git produit le"fatal: cannot exec 'git-co': Permission denied"
. Il ne vient jamais à vérifier les alias de sortegit foobar
va produire la même erreur.Les gens de bonne git liste de diffusion m'a aussi rappelé un
strace
outil, qui peut aider à trouver l'entrée qui est de retour EACCES, comme dans:strace -f -e execve git foobar
Le crédit va à Jeff Roi du git liste de diffusion. 🙂
Est-il possible de vous, par inadvertance, a créé un non-exécutable
git-co
fichier quelque part? Je peux recréer votre situation si je ne fais juste que, comme illustré ci-dessous.Une autre chose que vous pourriez vouloir essayer est l'activation de la journalisation du suivi pour obtenir plus d'informations sur ce que Git est en train de faire. Voici un exemple:
Vous devez utiliser absolue chemins d'accès si vous souhaitez envoyer la sortie vers un fichier. Sinon, utilisez
true
ou1
pour envoyer la sortie d'erreur standard; par exemple,GIT_TRACE=1
. Letrace.log
fichier contient:Si vous ne voyez pas le
trace: alias expansion: co=> 'checkout'
trace de la sortie du journal, Git est à la recherche d'ungit-co
fichier dans lePATH
variable d'environnement. Git utilise unPATH
comme suit:PATH
l'enregistrement de tous les "vieux"PATH
de référence.--exec-path=<my git commands path>
Git option est trouvé, ajouter<my git commands path>
à laPATH
.--exec-path=<my git commands path>
n'a pas été trouvé et laGIT_EXEC_PATH
variable d'environnement est définie, ajoutez ceci à laPATH
.git
en utilisant un chemin relatif ou absolu, ajoutez le chemin d'accès absolu dugit
exécutable à laPATH
.PATH
a été défini précédemment, l'ajouter à laPATH
.PATH
n'a pas été défini précédemment, ajouter/usr/local/bin:/usr/bin:/bin
à laPATH
.Vous pouvez utiliser un alias pour obtenir Git pour vous dire ce que c'est le réglage de la
PATH
variable d'environnement.Alors vérifier chaque annuaire de l'existence d'un
git-co
fichier. Il ne suffit pas de fairewhich git-co
et supposer que si rien n'est trouvé que vous n'avez pas degit-co
fichier situé dans l'un des répertoires du dépôt Git duPATH
; un fichier peut exister qui n'est pas exécutable etwhich
ne s'affichera pas.Vérifier pour voir si vous avez les autorisations d'exécution sur le git alias.
Fournir les autorisations d'exécution résolu ce problème pour moi.
J'ai téléchargé "git-identification osxkeychain" et de l'ajouter à /usr/local/bin et a fourni l'exec droits et qu'il peut exécuter la commande sans aucun problème.