¿Cómo ejecuto un comando de Git sin estar en el repositorio?
¿Hay alguna manera de ejecutar comandos de Git en un repositorio sin estar en ese repositorio?
Por ejemplo algo como esto: git /home/repo log
?
Por favor no me digas que cd
lo haga. Estoy haciendo esto a través de una exec
llamada.
Úselo -C
como primer argumento para git:
git -C /home/repo log
Según los documentos , el efecto de esto es:
-C <path>
Ejecute como si git se hubiera iniciado en
<path>
lugar del directorio de trabajo actual. ...
Esto es casi equivalente a --git-dir
y --work-tree
sin agregar la .git
carpeta habitual. Sin embargo, las opciones --git-dir
y --work-tree
no existen para acceder al repositorio desde fuera del árbol de trabajo; se utilizan para trasladar el .git
lugar a otro lugar y son mucho más complicados de usar en algunos casos.
Por ejemplo, para obtener el registro de /home/repo/subdir
sólo:
git -C /home/repo/subdir log .
o
git -C /home/repo log subdir
No es posible utilizarlo log .
con --git-dir
o --work-tree
. La ruta debe procesarse para extraer la subruta relativa a la parte superior del árbol de trabajo, e incluso en ese caso, git no la reconocerá como una ruta si no usa la --
opción, por lo que la única forma posible es:
git --git-dir /home/repo/.git log -- subdir
Además, --work-tree
no funciona en absoluto con el log
subcomando de mi versión (git 1.9.1). Simplemente se ignora:
git --git-dir /home/repo/.git --work-tree /home/repo/subdir log -- subdir
git --git-dir /home/repo/.git --work-tree /home/repo/whatever log -- subdir
Ni siquiera entiendo si esto es un error o una característica... como es habitual con muchas opciones de diseño de git.
Intentar:
git --git-dir=/home/repo/.git log
Es importante proporcionar la ruta hasta el directorio .git de su repositorio. De lo contrario, sólo recibirá un mensaje de error que dice algo como:
fatal: Not a git repository