2010-07-08 9 views
13

Con svn, pude ejecutar comandos en archivos en un proceso de pago, sin tener cd en ese pago primero Por ejemplo:¿Puedo realizar operaciones git (agregar/diferir/confirmar) en archivos en un repositorio cuando mi directorio actual no está en el repositorio

# Located in /tmp, running svn operation on /home/d5ve/checkout 
[email protected]:/tmp> svn add /home/d5ve/checkout/myfile.txt 
[email protected]:/tmp> svn diff /home/d5ve/checkout/myfile.txt 
[email protected]:/tmp> svn commit /home/d5ve/checkout/myfile.txt 

Cuando intento este flujo de trabajo utilizando git, me sale un error:

# Located in /tmp, attempting git operation on /home/d5ve/checkout2 
[email protected]:/tmp> git add /home/d5ve/checkout2/myfile.txt 
fatal: Not a git repository (or any of the parent directories): .git 

He intentado usar las banderas --git-dir y --work-tree, sino que también parece fallar.

Cualquier sugerencia git people? Utilizo mucho este flujo de trabajo y realmente lo extraño cuando uso git.

ACTUALIZACIÓN 2016 La respuesta correcta actual para esto es utilizar la bandera -C a GIT, que fue introducido en la versión 1.8.5 en 2013. Ver https://stackoverflow.com/a/35899275/357336

UPDATE: base en respuesta lunaryorn abajo, Creé un script simple de Perl que determina la ubicación del directorio .git a partir de las rutas de archivos, y establece las variables de entorno GIT_WORK_TREE y GIT_DIR para el comando.

favor, eche un vistazo a: http://github.com/d5ve/rgit

USO: COMANDO RGIT [ARGS]

Básicamente basta con sustituir git con RGIT en un comando, y se puede ejecutar los comandos desde fuera del repositorio .

cd /tmp  
rgit diff /home/d5ve/checkout1 
rgit add /home/d5ve/checkout1/rgit.pl 
rgit commit /home/d5ve/checkout1/ 
+0

Posible duplicado de [¿Cómo ejecuto un comando Git sin estar en la carpeta del repositorio?] (Http://stackoverflow.com/questions/7149984/how-do-i-execute-a-git-command-without -being-on-the-repository-folder) –

Respuesta

15

usted tiene que utilizar ambas opciones a la vez:

git --git-dir=/home/d5ve/checkout2/.git --work-tree=/home/d5ve/checkout2/ add /home/d5ve/checkout2/myfile.txt 

Nota, que --git-dir no se refiere al directorio que contiene la copia de trabajo, sino a la .git subdirectorio, que contiene el propio repositorio. git proporciona dos variables de entorno para establecer estas opciones de forma permanente para una sesión:

export GIT_WORK_TREE="/home/d5ve/checkout2" 
export GIT_DIR="${GIT_WORK_TREE}/.git" 
git status 
+1

Cheers lunaryorn, esa es una combinación que no probé. Tengo varios repositorios diferentes, así que intentaré armar un script bash que recoja GIT_WORK_TREE y GIT_DIR del directorio mencionado en el comando y los configure para el comando git. Algo así como 'mygit add/home/d5ve/checkout2/myfile.txt' – d5ve

1

Selecciona esta pregunta un poco diferente, que tiene una respuesta funcionando perfectamente, diferente a la solución propuesta en la otra respuesta aquí.

How do I execute a Git command without being on the repository folder?

Según algunos moderador No se me permite a publicar la respuesta aquí (una especie de ventilador de Chuck Norris, supongo).

+0

Según lo enlazado aquí, la opción -C de git es ahora la forma correcta de responder a esta pregunta. Esta bandera se agregó en git v1.8.5 en 2013. Saludos calandoa. – d5ve

Cuestiones relacionadas