¿No puedes simplemente "cd / home / repo && git log" como tu llamada ejecutiva?
Alex Howansky
Tengo algunos problemas raros con eso. Estoy comenzando un nuevo proceso, no realmente un ejecutivo, pero no sé cuánto difieren. Me resulta más fácil encontrar un parámetro para especificar el directorio git.
Sigo recibiendo fatal: Not a git repository (or any of the parent directories): .git. @Patrick ¿No voté nada?
Torre
3
@Patrick La respuesta fue editada (originalmente decía --work-dirque creo)
Gareth
1
Esto no funcionó para mí, ya que mostraba todos los archivos de la confirmación como eliminados. Parece que está comprobando la confirmación pero no el contenido de la carpeta. Consulte la respuesta de @calandoa para un mejor rendimiento.
mxcd
2
No funcionó para mí usando el último git, sin embargo, usando la opción -C funcionó, por ejemplo: git -C /home/repo/.git log
D.Snap
1
esto en realidad no funcionó como se esperaba. ¿Por qué esta es una respuesta aceptada? Esto usará el directorio actual como árbol de trabajo y usará el .git especificado para el historial, lo cual es completamente incorrecto. Si no solo muestra log, por ejemplo git status,. -CEs el camino correcto a seguir.
Esto es casi equivalente --git-diry --work-treesin agregar la .gitcarpeta habitual
Editar:
Respuesta rechazada ... bastante sorprendente, ya que, estrictamente hablando, esta es la única respuesta correcta a la pregunta. Las opciones --git-diry --work-treeno existen para acceder al repositorio desde fuera del árbol de trabajo, se utilizan para mover el.git otro lugar, y son mucho más complicados de usar en algunos casos.
Por ejemplo, para obtener el registro de /home/repo/subdirsolo:
git -C /home/repo/subdir log .
o
git -C /home/repo log subdir
No es posible usar log .con --git-diro --work-tree. La ruta debe procesarse para extraer la ruta secundaria en relación con la parte superior del árbol de trabajo, e incluso en ese caso, git no la reconocerá como 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-treeno funciona en absoluto con el logsubcomando de mi versión (git 1.9.1). Simplemente se ignora:
git stashes otro ejemplo de un subcomando que falla si --git-diry --work-treese utilizan.
d5ve
44
La opción -C se agregó en la versión 1.8.5 de git, que se lanzó en 2013.
d5ve
-C funcionó mejor que --git-dir para mí ... -C respeta la configuración de configuración de git para el repositorio. Postulo versión git 1.9.5.msysgit.1
Straff
@calandoa qué siempre tenemos que especificar la ubicación de la raíz, una cosa más, si el nombre de la cesión temporal contiene varias palabras ¿Cómo podemos poner en en este código
Kasun Siyambalapitiya
17
De hecho, necesitas usar --git-dir y --work-tree juntos. Aquí hay un ejemplo:
local [] Desktop: mkdir git
local [] Desktop: cd git
local [] git: touch README.txt
local [] git: git init
Initialized empty Git repository in /Users/albert/Desktop/git/.git/
local [] git: cd ..
local [] Desktop: git --work-tree=git --git-dir=git/.git add .
local [] Desktop: git --work-tree=git --git-dir=git/.git commit -a -m 'initial commit, called from outside the git directory'
[master (root-commit) ee951b1] initial commit, called from outside the git directory
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.txt
local [] Desktop: cd git
local [] git: git log --pretty=oneline
ee951b161053e0e0948f9e2a36bfbb60f9c87abe initial commit, called from outside the git di
Esto es similar a la respuesta de @ max. Desafortunadamente, --git-dir no hizo lo que necesitaba. editar En retrospectiva, otra respuesta [anterior] que no había leído sugería usar --work-tree. No estoy seguro de si usar el entorno o las banderas es más apropiado, así que dejaré mi respuesta en caso de que alguien encuentre uso en él, pero cambiaré a usar --work-tree/ --git-dir.
Hay dos repositorios, uno dentro del otro pero no un submódulo; el repositorio externo lo ignora:
tools (outer repo)
gcc/4.9.2 (inner repo)
Lo que quería era la salida de git rev-parse --show-prefixrelativo al repositorio externo. Esto es lo que se me ocurrió (sintaxis bash; dividir entre líneas para facilitar la lectura):
Respuestas:
Tratar:
Es importante dar la ruta hasta el directorio .git de su repositorio. De lo contrario, solo recibirá un mensaje de error que dice algo como:
fuente
fatal: Not a git repository (or any of the parent directories): .git
. @Patrick ¿No voté nada?--work-dir
que creo)git status
,.-C
Es el camino correcto a seguir.-C
Opción de uso ( docs ):Esto es casi equivalente
--git-dir
y--work-tree
sin agregar la.git
carpeta habitualEditar:
Respuesta rechazada ... bastante sorprendente, ya que, estrictamente hablando, esta es la única respuesta correcta a la pregunta. Las opciones
--git-dir
y--work-tree
no existen para acceder al repositorio desde fuera del árbol de trabajo, se utilizan para mover el.git
otro lugar, y son mucho más complicados de usar en algunos casos.Por ejemplo, para obtener el registro de
/home/repo/subdir
solo:o
No es posible usar
log .
con--git-dir
o--work-tree
. La ruta debe procesarse para extraer la ruta secundaria en relación con la parte superior del árbol de trabajo, e incluso en ese caso, git no la reconocerá como ruta si no usa la--
opción, por lo que la única forma posible es:Además,
--work-tree
no funciona en absoluto con ellog
subcomando de mi versión (git 1.9.1). Simplemente se ignora:Ni siquiera entiendo si esto es un error o una característica ... como de costumbre con muchas opciones de diseño de git.
fuente
git stash
es otro ejemplo de un subcomando que falla si--git-dir
y--work-tree
se utilizan.De hecho, necesitas usar --git-dir y --work-tree juntos. Aquí hay un ejemplo:
fuente
¡He intentado muchas veces! ¡Finalmente lo entendí!
git -C dir --no-pager log --format='%an' -1 filename
recuerde, por favor no agregue .git a su
fuente
Esto es similar a la respuesta de @ max. Desafortunadamente, --git-dir no hizo lo que necesitaba. editar En retrospectiva, otra respuesta [anterior] que no había leído sugería usar
--work-tree
. No estoy seguro de si usar el entorno o las banderas es más apropiado, así que dejaré mi respuesta en caso de que alguien encuentre uso en él, pero cambiaré a usar--work-tree
/--git-dir
.Hay dos repositorios, uno dentro del otro pero no un submódulo; el repositorio externo lo ignora:
Lo que quería era la salida de
git rev-parse --show-prefix
relativo al repositorio externo. Esto es lo que se me ocurrió (sintaxis bash; dividir entre líneas para facilitar la lectura):Cuando se ejecuta desde 4.9.2 produce la cadena
gcc/4.9.2
.fuente
Para cualquier comando git, puedes hacer:
Por ejemplo, si quieres hacer un estado git:
o si desea verificar la sucursal en la que se encuentra el repositorio:
fuente