Tengo un problema con el gancho de "actualización". En el caso de una nueva sucursal, obtiene un 0000000000000000000000000000000000000000 como 'oldrev'. Y no sé cómo manejar ese caso.Git recibir/actualizar ganchos y nuevas ramas
Tenemos el requisito de que cada mensaje de confirmación haga referencia a un problema válido de Jira. Así que he instalado un gancho de "actualización" en nuestro repositorio central. Ese gancho obtiene un "oldrev" y un "newrev". Luego paso a los "git rev-list" de esta manera:
git rev-list $oldrev..$newrev
Esto me da la lista de todas las revoluciones, que luego se pueden repetir, y hacer lo que necesito hacer.
El problema es que cuando el usuario empuja una nueva rama, el gancho obtiene 0000000000000000000000000000000000000000 como oldrev. Y "git rev-list" simplemente se queja con:
fatal: Invalid revision range 0000000000000000000000000000000000000000..21bac83b2
Entonces, ¿cómo puedo obtener la lista de todas las revoluciones que están en esa nueva rama? He buscado en la red por bastante tiempo y no encontré nada. Los ganchos de ejemplo que encuentran ya sea
- no manejar el problema, y el error con el mensaje de error anterior
- incorrectamente tratar de solucionar el problema estableciendo la OLDREV a "", que devuelve los resultados incorrectos de rev -lista
- simplemente darse por vencido cuando se encuentran con que OLDREV
Ninguno de estos suena particularmente emocionante.
Entonces, ¿alguien tiene alguna idea de cómo obtener la respuesta correcta en ese caso? Estaba pensando en preguntar a git por "darme todas las revoluciones que son alcanzables desde newrev, pero no desde ninguna de las otras ramas (= todas las ramas excepto la nueva)". Pero incluso eso daría la respuesta incorrecta si se hubiera producido una fusión de la nueva rama con alguna de las antiguas.
No estoy seguro de si es algo extraño en mi entorno o una actualización de git, pero la negación está eliminando referencias en la rama actual. Tengo que hacer algo como esto: 'git rev-list $ (git for-each-ref --format = '% (refname)'" refs/heads/* "| grep -v '$ ref' | sed 's/^/\^/') "$ newrev" ' – mmalone
Para usar en los ganchos' update' (y 'pre-receive'), como se especifica en la pregunta, estas respuestas son todas más complicadas y costosas. La respuesta de José a continuación es la más simple y eficiente; esa debería ser la respuesta elegida IMO. – MadScientist
@mmalone tienes razón. Tuve que agregar "| grep -v '$ rev'". De lo contrario, siempre tengo el resultado vacío – dritan