2009-08-27 13 views
5

Escribo un enlace precompromiso y me gustaría verificar el contenido completo de cada archivo que está a punto de comprometerse (específicamente un control de pelusas en el archivos). Quiero ver el archivo como se va a comprometer, no como existe en mi árbol de trabajo (que puede diferir).Mostrar los archivos completos como existirían en el índice git

El ejemplo de gancho precomprometido que viene con git muestra cómo obtener el diff (para que pueda examinar los espacios y demás), pero necesito obtener el archivo completo ya que se va a comprometer.

Respuesta

9

Prueba esto:

git --work-tree=/path/to/checkout-area checkout-index path/to/file-to-checkout 

La opción --work-tree le dice a Git para utilizar un área diferente como el árbol de trabajo, para que no sobrescribir el archivo en su verdadera obra de árboles. Es posible que también desee agregar la opción -f para indicarle que sobrescriba si es necesario, pero si su script se limpia correctamente no debería ser necesario. Consulte el man page for checkout-index para obtener más información.

+0

Sí, checkout-index era solo la pista que necesitaba para encontrar lo que necesitaba encontrar. ¡Gracias! –

6

Otra solución para un solo archivo es (suponiendo que no está en conflicto durante la fusión o rebase):

$ git show :0:path/to/file 

(donde path/to/file es relativo al directorio superior en el repositorio).

O "git cat-file blob :0:path/to/file", que (creo) no invocaría ningún filtro (expansión de palabra clave, conversión de final de línea, etc.).

Véase la sección sobre Extended SHA-1 de sintaxis en git-rev-parse página de manual


1.) la ventaja de Jefromi's answer es que el uso git checkout-index puede obtenerlos más de un archivo; puede consultar el directorio completo o incluso todo el proyecto.

+0

Esto es bastante increíble, aunque voy a encontrar una excusa para usarlo. – Cascabel

Cuestiones relacionadas