enganchadoinvierno
Estoy empezando a jugar con git hooks y me gustaría crear uno para evitar que un desarrollador cree una nueva rama cuando se encuentra en una rama específica. El proceso actual en nuestra empresa está destinado a verse así:
git checkout master
git fetch
git reset --hard origin/master
git checkout -b [branch name]
do awesome things.
Sin embargo, en ocasiones, cuando se mueven rápidamente, algunos desarrolladores terminan iniciando esta nueva rama desde un repositorio provisional. Lo que causa pena.
Entonces, me gustaría crear un enlace para interrumpir cuando un desarrollador comienza a crear una nueva rama, verifique en qué rama está y exit 1
si la sucursal no esta master
(o simplemente detener la acción en general si el nombre de la rama es staging
), o permitirlo de otra manera.
Editar:
A medida que busco más sobre esto, me doy cuenta de que quiero un enlace previo al pago, que no parece existir. A menos que alguien tenga una idea mejor, procederé a imprimir una advertencia muy grande en un gancho posterior al pago si se produce el escenario anterior.
Para el lado del cliente puede crear un post-pago gancho que usa el rama git –merged para ver las ramas fusionadas en la rama actual. Si la rama que desea evitar que se ramifique se fusiona en la rama actual, arrojará el error.
El código en bach se vería así:
#!/bin/sh getBranchName() { echo $(git rev-parse --abbrev-ref HEAD) } getMergedBranches() { echo $(git branch --merged) } if [ "$(getBranchName)" != "dev" ]; then if [[ $(getMergedBranches) == *"dev"* ]]; then echo "Don't create branches from the dev branch!" exit 1 fi fi
-
si alguien tiene problemas con la línea 14 arriba stackoverflow.com/a/3401197/5626972
-Kiry Meas
22 de junio de 2021 a las 4:33
johan maes
Para el lado del cliente post-pago hook, primero verificaría el nombre de la rama base y luego compararía los hashes de confirmación. También agregué una verificación de seguridad al principio (probablemente no desee eliminar dev
o master
) en caso de que el staging
La rama acaba de ser creada.
#!/bin/sh
new_branch=$(git branch --show-current)
# These branches already exist and should always be checked out (and especially not be deleted)
if [[ $new_branch =~ ^dev|release|master$ ]]
then
exit 0
fi
base_branch=$(git rev-parse --abbrev-ref @{-1})
base_head=$(git rev-parse @{-1})
new_head=$(git rev-parse HEAD)
# First check the name of the base branch
# Then compare the hashes of the last commits
if [ $base_branch = "staging" ] && [ $base_head = $new_head ]
then
echo ""
echo "HOLD YOUR HORSES!"
echo "-----------------"
echo "Remember not to create branches from the staging branch."
echo "Switching to dev and deleting the new branch..."
echo "-----------------"
git checkout --ignore-other-worktrees dev && git branch -D $new_branch
exit 1
fi
Sobre el lado del servidor podrías usar el pre-recibir gancho, pero probablemente tendrás que volver a git branch --merged
como en la respuesta anterior: https://stackoverflow.com/a/35649638/9266796.
adam dimitruk
Atraparía esto en el bendito lado del repositorio. Si un desarrollador inició una rama en algo que no sea una confirmación que está fuera del último maestro, rechace la inserción de la rama. Pueden corregir rebasando el maestro y empujando de nuevo. Asegúrese de que su mensaje de error sea lo suficientemente descriptivo para que sepan cómo corregir su situación.
Además, actualice su maestro sin verificarlo con:
git fetch
git push . origin/master:master
Luego crea una rama del último maestro:
git checkout -b somecoolfeature master
Ni siquiera tienes que tener tu maestro local actualizado:
git fetch
git checkout -b somecoolfeature origin/master
do awesome stuff :)
Nuevamente, ¿por qué quiere evitar la ramificación?
– jman
23 de noviembre de 2011 a las 0:48
Nuestra rama de preparación contiene mucho código que no queremos que se lleve a producción, necesariamente.
– enganchado al invierno
23 de noviembre de 2011 a las 16:13
@hookedonwinter ¿Obtuviste una respuesta? ¿Cómo hacerlo?
– tarzen chugh
8 de agosto de 2021 a las 15:11
@tarzenchugh Por lo que recuerdo, no lo hice (hace una década). ¡Lo siento! Las respuestas a continuación podrían funcionar, no recuerdo si las probé o qué sucedió.
– enganchado al invierno
9 de agosto de 2021 a las 16:39