2011-11-23 6 views
7

Estoy empezando a jugar con git hooks, y me gustaría crear uno para evitar que un desarrollador cree una nueva rama cuando se encuentre en una rama específica. El proceso actual en nuestra empresa tiene la intención de tener este aspecto:Git gancho para evitar la creación de nuevas ramas de ramas específicas

git checkout master 
git fetch 
git reset --hard origin/master 
git checkout -b [branch name] 
do awesome things. 

Sin embargo, de vez en cuando se mueve rápidamente, algunos desarrolladores acaban de comenzar esta nueva rama de un acuerdo de recompra puesta en escena. Lo cual causa dolor.

Entonces, me gustaría crear un gancho para interrumpir cuando un desarrollador comienza a crear una nueva rama, verificar en qué rama están y exit 1 si la rama no es master (o simplemente detener la acción) si el nombre de la sucursal es staging), o permitirlo de otra manera.

Editar:

Al leer más sobre esto, me doy cuenta de que quiero un gancho pre-salida, lo cual no parece existir. A menos que alguien tenga una mejor idea, voy a proceder a imprimir una advertencia muy grande en un enlace posterior a la salida si el escenario anterior se cumple.

+0

Una vez más, ¿por qué desea evitar ramificación? – jman

+1

Nuestra rama de etapas contiene una gran cantidad de código que no desearíamos empujar a la producción, necesariamente. – hookedonwinter

Respuesta

0

Me gustaría ver esto en el bendecido lado repo. Si un desarrollador ha iniciado una rama en algo diferente de una confirmación que está fuera del último maestro, rechace el empuje de la rama. Pueden corregir volviendo a ordenar fuera del maestro y empujando nuevamente. Asegúrese de que su mensaje de error sea lo suficientemente descriptivo para que sepa cómo corregir su situación.

Además, actualizar su amo sin ser revisado por:

git fetch 
git push . origin/master:master 

A continuación, crear una rama de la última maestra:

git checkout -b somecoolfeature master 

Usted no tiene que incluso tener su maestro local hasta la fecha:

git fetch 
git checkout -b somecoolfeature origin/master 
do awesome stuff :) 
1

Por el lado del cliente puede crear un puesto -checkout gancho que utiliza la rama git --merged para ver ramas fusionadas en la rama actual. Si la rama que desea evitar de la bifurcación se fusiona en la bifurcación actual, arroja el error.

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