Lo que quiero hacer:repositorio Git remoto se niegan fusionar compromete el impulso
Quiero no permitir cualquier combinación compromete ser empujado al repositorio central. La única excepción es si la combinación se realiza entre sucursales que existen en el repositorio central. Quiero aplicar esto en el repositorio central.
Explicación de por qué quiero hacer esto:
Nota: Si esta explicación se lanza fuera de la pista de lo que quiero hacer, a continuación, pasar por alto la explicación. Por supuesto, me complace escuchar otras formas de resolver el problema que explico a continuación, pero la respuesta que me interesa es sobre lo que quiero hacer, como se indicó anteriormente.
Tengo un repositorio central de git con una rama que varios desarrolladores rastrean. Cada desarrollador tiene un control remoto configurado para la rama de ese repositorio central.
Seguimos una política de compromiso síncrono para este proyecto, por lo que cada desarrollador debe siempre rebase su último trabajo en la parte superior de la rama remota HEAD antes de presionar. Me gustaría aplicar esta política al no permitir que las confusiones de fusión se envíen al repositorio central. La única excepción es si la combinación se realiza entre sucursales que existen en el repositorio central.
Para simplificar, no quiero que las ramas de seguimiento locales del desarrollador se fusionen con la rama remota. Pero mejor dicho siempre sea rebase en la rama remota.
Hemos implementado en parte esto en la máquina del desarrollador estableciendo branch.NAME.rebase = true que ayuda a evitar problemas si el desarrollador usa git pull, sin embargo, necesitamos una solución para aplicar esto en el repositorio central.
Una solución muy básica sería rechazar confirmaciones con el comentario: "Fusionar rama 'NOMBRE' de GITURL", sin embargo, algo más en la línea de comprobar si todos los padres de una confirmación existen en las rutas de bifurcación del repositorio central se más interesante.
Sugerencias? Soluciones?
Editar:
Esto es lo que tengo hasta ahora:
#!/bin/sh
read sha1old sha1new refname
# check if this is merge commit
merge_commit="`git rev-list --parents --merges --no-walk $sha1new 2> /dev/null`"
if test -n "$merge_commit"
then
# this was a merge commit
# $merge_commit contains: sha1new sha1parent_1 ... sha1parent_n
fi
exit 0
El lugar se vuelve problemático es determinar si la ascendencia de cualquiera de los dos padres se originan a partir de una sola rama. Además, como se llama al gancho de pre-recepción antes de que se actualicen los refs, si un push contiene confirmaciones para dos ramas que existen en el control remoto, incluida una fusión entre esas dos ramas, entonces no tengo idea de cuál sería la solución aquí.
Duplicado exacto: http://stackoverflow.com/questions/1997916/git-post-receive-how-to-check-if-pushed-branch-is-merged-with-master – Dustin
No estoy completamente de acuerdo con que sea un duplicado. Tiene muy poco o nada que ver con lo que he pedido. – chris