2010-01-11 18 views
19

¿Hay alguna manera de modificar la configuración del repositorio central para no permitir el empuje remoto a la rama maestra (usando git)? Solo se actualizaría mediante la fusión de sucursales por parte de un propietario de la versión.Prohibir el empuje remoto a la rama maestra en git

Es posible hacerlo en repositorios infantiles, pero desafortunadamente no siempre es lo suficientemente infalible, es fácil olvidarse de hacerlo en una máquina nueva, no hay manera de protegerse de los empujes accidentales. Los desarrolladores deben poder extraer de cualquier rama y volver a cualquier rama, excepto master, que queremos ver como de solo lectura. ¿Es posible con git? O estamos intentando un flujo de trabajo incorrecto.

actualización tl; dr: gracias a Charles Bailey, la respuesta es retirar principal y añadiendo la siguiente configuración:

receive.denyCurrentBranch = true 
+1

He proporcionado un script de ejemplo para un problema similar en [¿Cómo configurar las ramas de solo lectura en un "repositorio de desarrollo" central?]] (Http://stackoverflow.com/questions/14502164/how-to-configure- read-only-branches-in-a-central-development-repository) – Alberto

Respuesta

13

Usted debe echar un vistazo a la muestra update gancho de llamada update-paranoid en el directorio contrib de la distribución de git. Le permite configurar ACL por rama que restrinja quién puede presionar a qué ramas. De esta forma, puede restringir la actualización del maestro para liberar a los propietarios.

No estoy muy seguro de lo que quiere decir con "solo se actualiza a través de la fusión de sucursales". Supongo que su repositorio central está vacío, en cuyo caso las ramas generalmente solo se actualizan mediante un push. No hay diferencia conceptual en git entre presionar un commit que es una fusión y uno que no es así. No estoy seguro de cuál es tu criterio para restringir el tipo de actualización para master.

En el caso de que usted está empujando a un repositorio central no desnuda y master es siempre la rama desprotegido, entonces solo puede establecer la configuración variable de receive.denyCurrentBranch a true o refuse.

+0

Debe hacerse localmente (a través de merge), a diferencia del 'push' remoto que queremos prohibir. Y no, no es simple: 'maestro' está desprotegido y es una copia de trabajo, por así decirlo. Gracias, echaré un vistazo a la actualización paranoica, tal vez restringir a una sola persona. – kibitzer

+0

OK, voy a morder. ¿Por qué no está su depósito central descubierto y qué rama es generalmente la rama desprotegida? –

+0

'maestro' es la rama desprotegida; podríamos crear un repositorio vacío pero no veo un punto ya que la idea era prohibir el empuje directo para dominar; de ahí esta pregunta. podríamos crear un repositorio vacío y extraerlo si fuera de ayuda en nuestra búsqueda de un maestro de solo lectura :) – kibitzer

Cuestiones relacionadas