Force Feature Branch se volverá a configurar antes de que se fusione o empuje

En nuestro proyecto, tenemos una twig de desarrollo . Tenemos media docena de desarrolladores que son libres de presionar para desarrollar, pero les hemos pedido que reubiquen sus twigs de características sobre el desarrollo antes de que se fusionen. Ocasionalmente, la gente olvida hacer esto y crea una historia de fusión más fea en el desarrollo.

¿Hay alguna configuration en git, o una configuration en gitlab que podamos usar para evitar fusiones que no son fusiones rápidas? Idealmente, nos gustaría una política en GitLab que pueda activar / desactivar el server remoto, para que podamos desactivarlo globalmente.

En primer lugar, la configuration habitual es que el server solo acepte fusiones de avance rápido (a less que se anule por -f). Pero asumo que su caso es donde las personas tienen su propia twig de características, luego se fusionan para desarrollar eso y luego se desarrolla el empuje, por lo que ahora la historia tiene ese compromiso de fusión.

En el server, puede configurar un gancho de actualización de git . El gancho de actualización se ejecutará una vez por twig y recibirá los arguments del nombre de la twig, la punta de la nueva confirmación que se empuja y la punta de la twig en la que se agregarán las nuevas confirmaciones (es decir, el origen / branchName). El valor de retorno de la secuencia de commands indica si rechazar o aceptar la confirmación. Simplemente puede verificar si hay algún compromiso de fusión entre estas dos confirmaciones.

#!/bin/sh # .git/hooks/update refname="$1" oldrev="$2" newrev="$3" numMergeCommits=$(git rev-list --count --merges $oldrev..$newrev) if [ $numMergeCommits -gt 0 ]; then echo "Rejected - pushed branch must not contain any merges" exit 1 fi exit 0 

Tenga en count que esto no puede anularse con la bandera -f también. Además, el text que está en esa statement "Rechazado …" se repite al selector remoto, por lo que puede poner un post más descriptivo allí, con suerte con un enlace a una página wiki que les muestre cómo volver a trabajar en su twig usando rebase para get la confirmación en la forma correcta.