tutorial lab hub espaƱol commands comandos git

lab - git repository



alias de git que causan el error "Permiso denegado" (3)

¿Es posible que hayas creado inadvertidamente un archivo git-co no ejecutable git-co algún lugar? Puedo recrear tu situación si hago eso, como se muestra a continuación.

$ git --version git version 1.7.7.1.475.g997a1 $ git config --get-regexp ''^alias/.co$'' alias.co checkout $ git co b1 Switched to branch ''b1'' $ touch $HOME/bin/git-co $ ls -al $HOME/bin/git-co -rw-r--r-- 1 user user 0 2011-11-03 12:59 /home/user/bin/git-co $ git co master fatal: cannot exec ''git-co'': Permission denied $ for p in $(echo "$PATH" | sed -e ''s/:/ /g''); do if [ -f "${p}/git-co" ]; then echo "Found git-co in ${p}"; fi; done Found git-co in /home/user/bin $ rm $HOME/bin/git-co rm: remove regular empty file `/home/user/bin/git-co''? y $ git co master Switched to branch ''master''

Otra cosa que quizás desee probar es habilitar el registro de seguimiento para obtener más información sobre lo que está haciendo Git. A continuación se muestra un ejemplo:

GIT_TRACE=$HOME/trace.log git co master

Debe usar rutas absolutas si desea enviar resultados a un archivo. De lo contrario, use true o 1 para enviar la salida al error estándar; por ejemplo, GIT_TRACE=1 . El archivo trace.log contiene:

trace: exec: ''git-co'' ''master'' trace: run_command: ''git-co'' ''master'' trace: alias expansion: co => ''checkout'' trace: built-in: git ''checkout'' ''master''

Si no ve la salida del registro de seguimiento trace: alias expansion: co=> ''checkout'' , Git está encontrando un archivo git-co en la PATH entorno PATH . Git utiliza un PATH como sigue:

  1. Comience con un PATH vacío, guardando cualquier PATH "antiguo" como referencia.
  2. Si se encuentra la --exec-path=<my git commands path> Git, agregue <my git commands path> a la PATH .
  3. Si no se --exec-path=<my git commands path> y la variable de entorno GIT_EXEC_PATH está establecida, agregue esto a la PATH .
  4. Si llamó a git utilizando una ruta relativa o absoluta, agregue la ruta absoluta del ejecutable de git a la PATH .
  5. Si PATH se definió previamente, adjúntelo a PATH .
  6. Si PATH no se definió previamente, agregue /usr/local/bin:/usr/bin:/bin a la PATH .

Puedes usar otro alias para que Git te diga cómo está configurando la PATH entorno PATH .

$ git config --global alias.whatpath ''!echo $PATH'' $ git whatpath /usr/local/libexec/git-core:/home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Luego revise cada directorio listado para la existencia de un archivo git-co . No es suficiente hacer which git-co y asumir que si no se encuentra nada, no tiene un archivo de git-co ubicado en uno de los directorios en la PATH de Git; puede existir un archivo que no sea ejecutable y which no lo mostrará.

Los siguientes comandos

$ git co -b newbranch $ git co oldbranch

da como resultado un error "fatal: no se puede ejecutar ''git-co'': permiso denegado".

Al mismo tiempo,

$ git checkout -b newbranch $ git checkout oldbranch

y

$ sudo git co -b newbranch $ sudo git co oldbranch

trabajar como se esperaba. Los derechos de propiedad de la carpeta .git se establecen para el usuario propietario de la carpeta de inicio y 0755/0644 es el modo para la carpeta .git / subcarpeta / archivos. No hay ningún script de git-co en ningún lugar del sistema (es decir, un alias expandible para git-checkout , que reside en / usr / libexec / git-core` dir).

Los alias se definen en .gitconfig de la carpeta de inicio:

[alias] co = checkout

No hay diferencia en la salida de git config -l para usuarios root o sin privilegios. Todavía sudo git co oldbranch funciona y git co oldbranch no.

¿Qué me estoy perdiendo?

Gentoo / kernel 3.0.6 / git 1.7.3.4


La respuesta correcta a esto fue en realidad diferente. Antes de que git ejecute los alias, comprueba el $PATH . En caso de que el directorio no exista, o carezca de permisos, git produce el "fatal: cannot exec ''git-co'': Permission denied" . Nunca se comprueban los alias, por lo que git foobar producirá el mismo error.

La gente buena de la lista de correo de git también me recordó una herramienta de strace , que puede ayudar a encontrar la entrada que está devolviendo EACCES, como en: strace -f -e execve git foobar

El crédito es para Jeff King de la lista de correo de git. :)


Verifique si tiene permisos de ejecución en los alias de git. Proporcionar los permisos de ejecución solucionó este problema para mí.

Descargué "git-credential-osxkeychain", lo agregué a / usr / local / bin y proporcioné los derechos de ejecución y pude ejecutar el comando sin ningún problema.