2012-03-24 15 views
17

Estoy tratando de git pull algún repositorio vía usuario root desde cualquier directorio.Git tirando depende de la corriente dir

Por ejemplo, la ejecución de git pull/root/:

#> cd ~ 
#> sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git pull 
/usr/libexec/git-core/git-sh-setup: line 142: cd: /root/.: Permission denied 
Cannot chdir to /root/., the toplevel of the working tree 

y ejecución de git pull/:

#> cd/
#> sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git pull 
Already up-to-date. 

¿Por qué directorio actual afecta git pull comando ing?

¿Cómo se puede evitar ese cd redundante?

+0

¿Dónde está/root es una carpeta dentro de su repositorio? Si es así, no deberías tener problemas de permisos. Si/root está fuera de su estructura de git, la pregunta que debe hacerse es por qué está accediendo a esa carpeta en primer lugar? – bluesman

+0

¿Por qué intentas trabajar como root? – Ethan

+0

Estoy intentando trabajar con root porque es un contenido de eix-sync.conf. –

Respuesta

16

En su primer ejemplo, el comando git se ejecuta como usuario dmalikov con el directorio actual /root. Como el comando git pull es equivalente a git fetch seguido de git merge, y dado que git merge opera en el árbol de trabajo, git intenta buscar el árbol de trabajo. Como este usuario no tiene permiso para cd /root, el comando git falla.

Incluso su segundo ejemplo no funciona como era de esperar. Si hay cambios reales que extraer (en lugar de "Ya está actualizado"), el git pull fallará porque no puede encontrar el árbol de trabajo.

Usted tiene algunas opciones simples:

1) Usted puede simplemente hacer la parte git fetch del funcionamiento repitiendo:

sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git fetch 

que no da ningún error para mí.

2) Se puede añadir un cd al árbol de trabajo:

(cd /home/dmalikov/path/to/repo; sudo -u dmalikov git pull) 
+1

Relacionado: git --git-dir no funciona como se esperaba: http://stackoverflow.com/questions/1386291/git-git-dir-not-working-as-expected – kenorb

0

No creo que sea posible evitar ese CD mientras ejecuta git con un usuario que no tiene permiso para volver a cambiar el directorio al directorio actual, es decir,/root./como el directorio actual obviamente funciona ya que todos tienen permisos para cambiar a ese directorio.

+0

'fatal: no se pudo volver a '/ root': Permiso denegado' –

+0

Ha cambiado mi respuesta. Tiene que ver con permisos y no -work-tree como pensé inicialmente. – ralphtheninja

2

para responder a mi propio comentario, el/la raíz fue un error interesante

Para hacer que funcione con --git-dir también necesita especificar un directorio de árbol de trabajo

sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git --work-tree=/home/dmalikov/path/to/repo/.git pull 
+1

'fatal: no se pudo volver a '/ root ': Permiso denegado' –

+0

¿En qué máquina se encuentra? Utilizará las rutas específicas de su sistema (Windows o Linux). Los siguientes trabajos en mi máquina local (git bash en windows) '$ git --git-dir =/c/workspace/changes/.git --work-tree =/c/workspace/changes/pull Ya actualizado. – bluesman

+0

Intente ejecutar su comando desde dir, donde no puede 'cd' a través de un usuario no root. –

Cuestiones relacionadas