¿Cómo puedo averiguar qué archivos han cambiado en el gancho posterior al pago en git?

3 minutos de lectura

avatar de usuario
GOVarney

Solo soy nuevo en git y estoy mirando el gancho posterior al pago.
Según tengo entendido, el siguiente comando restaurará “nombre de archivo” desde la última confirmación:

git checkout -- filename

Cuando obtengo el control después del pago, obtengo 3 argumentos, a saber, 2 SHA y un tipo.
Ambos SHA son iguales, es decir, el SHA de la última confirmación y el tipo tienen un valor de 0, lo que significa que se produjo una extracción de un archivo.
¿Pero en casa puedo averiguar qué archivo se desprotegió?

  • ¿Cómo puedo saber qué archivo se desprotegió? Básicamente, no lo haces. Puede (en algunos sistemas operativos) hurgar en el conjunto de procesos en ejecución y ver si puede encontrar un git checkout [commit] -- path1 path2 ... pathN comando que está ejecutando su gancho; si es así, esos serían los archivos que se copiaron de algún compromiso específico en el índice y luego en el árbol de trabajo.

    – torek

    8 de junio de 2017 a las 5:56

avatar de usuario
VonC

La documentación dice:

El gancho recibe tres parámetros:

  • la referencia del HEAD anterior,
  • la referencia del nuevo HEAD (que puede haber cambiado o no), y
  • una bandera que indica si el pago fue en una sucursal (cambio de sucursal, flag=1) o una extracción de archivo (recuperación de un archivo del índice, flag=0).

En tu caso, tu HEAD no ha cambiado. Es posible que tenga algunos archivos modificados inicializados de nuevo en el contenido HEAD, pero aparte de eso, todos los archivos que ya se han desprotegido siguen estando desprotegidos:

git show --pretty="" --name-only HEAD

Dado que no ha cambiado de sucursal, el indicador se establece en 0, incluso si todos los archivos ya se han desprotegido. Por lo tanto, no hay una manera fácil de ver cuáles se modificaron y se restablecieron al contenido de HEAD.


La clave es: ese gancho posterior al pago no puede afectar el resultado de ‘git checkout’.
En otras palabras, el índice y el árbol de trabajo ya reflejan su estado final (y no recuerdo lo que había antes)

Si necesita una lista de archivos restablecidos por un git checkout .lo mejor es hacer primero un git stash.
Entonces un git checkout: su gancho posterior al pago puede usar git stash show para enumerar los archivos que estaban presentes antes del pago.

  • Debe preguntarse por qué aparece un indicador que dice que se está desprotegiendo un archivo y luego no le brinda una forma de averiguar el nombre del archivo.

    – GOVarney

    8 de junio de 2017 a las 13:46

  • @GOVarney De acuerdo, pero esa es la naturaleza de ese gancho posterior al pago: ese pago ya se realizó, los archivos ya se restablecieron y esa información (lista de archivos restablecidos) se perdió. He editado la respuesta para proponer primero (antes del pago) un git stash.

    – VoC

    08/06/2017 a las 18:30

  • El requisito que tengo es “siempre que git cambie un archivo en el directorio de trabajo, necesito procesarlo”. Cuando se desprotege una rama, asumo que todos los archivos en el directorio de trabajo han cambiado. Puede que no sea cierto, pero podría serlo, así que tengo que procesar todos los archivos del directorio. Es caro de hacer pero un mal necesario. Tenía la esperanza de que si solo se desprotegían los archivos, solo tendría que procesar los archivos desprotegidos. Pero parece que no puedo conseguir esa lista. ¿Es esta una razón válida para tener un gancho de pago previo? Entonces podría rastrear lo que me cambió a mí mismo. 🙂

    – GOVarney

    11 de junio de 2017 a las 9:41


  • @GOVarney Sí, un enlace previo al pago podría ayudar, aunque no hay ninguno (git.661346.n2.nabble.com/…), y git stash a menudo se menciona en su lugar (stackoverflow.com/a/40725474/6309)

    – VoC

    11 de junio de 2017 a las 9:47

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad