(Para simplificar) Tengo una master
rama y una dev
en mi Git-repo. Quiero asegurarme de que la master
sucursal siempre esté funcionando, por lo que todo el trabajo que haga debería estar en la dev
sucursal.
Sin embargo, cuando fusiono mis cambios con una --no-ff
fusión, tiendo a permanecer en la master
rama y simplemente sigo trabajando en ella (porque me olvido de verificar mi dev
rama).
¿Puedo poner una regla para la master
rama, que indique que no puedo hacer confirmaciones y fusiones de avance rápido, pero solo --no-ff
fusiones desde otra rama?
Esto debe funcionar para repositorios alojados privados (ergo, no GitHub y BitBucket).
git
merge
fast-forward
Rasmus Bækgaard
fuente
fuente
git commit
crea una nueva, no se produce ningún avance rápido. Parece que solo desea prohibir las confirmaciones ordinarias cuando la rama actual esmaster
, en cuyo caso, busque en elpre-commit
gancho.Respuestas:
Sí, es posible. Debe crear un gancho de confirmación previa que rechace las confirmaciones de la rama maestra. Git no llama al gancho de confirmación previa cuando llama al comando merge , por lo que este gancho rechazará solo las confirmaciones regulares.
Cree el archivo .git / hooks / pre-commit con el siguiente contenido:
Hágalo ejecutable (no es necesario en Windows ):
Para deshabilitar las combinaciones de avance rápido, también debe agregar la siguiente opción a su archivo .git / config :
Si también desea proteger la rama maestra en su control remoto, verifique esta respuesta: Cómo restringir el acceso a la rama maestra en git
fuente
master
rama remota en el gancho de pre-empuje. ej .: gist.github.com/aaronhoffman/ffbfd36928f9336be2436cffe39feaecPuede utilizar la utilidad de confirmación previa para hacer esto. Tiene un
no-commit-to-branch
gancho incorporado que se puede usar para evitar compromisos en una o más ramas.Preparar
El proceso de configuración básico es:
.pre-commit-config.yaml
archivo en la raíz de su proyecto (vea a continuación un primer borrador)pre-commit install
.Configuración básica para proteger ramas
Aquí hay una configuración básica que incluye solo el
no-commit-to-branch
gancho:repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v3.3.0 hooks: - id: no-commit-to-branch args: ['--branch', 'master']
Si desea proteger varias ramas, puede usar incluir varios
--branch
argumentos en la lista de argumentos:repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v3.3.0 hooks: - id: no-commit-to-branch args: ['--branch', 'master', '--branch', 'staging']
¿No es todo esto exagerado?
La confirmación previa tiene muchos otros enlaces incorporados y una gran colección de enlaces creados por la comunidad que transformarán la forma en que limpia y valida sus confirmaciones. La razón por la que menciono esto es porque, si bien esta herramienta puede ser excesiva solo para evitar compromisos en una rama protegida, tiene muchas otras características que la convierten en una adición simple y convincente para cualquier proyecto de git.
fuente
Puede tener sentido instalarlo globalmente a través de
y mover ese
pre-commit
archivo a ese directoriofuente
master
aProduction
: ¿se pueden hacer excepciones?