¿Puedo configurar extracciones desde un repository en sentido ascendente para que siempre sean de avance rápido solamente?

Mi equipo usa un flujo de trabajo de twig de característica con git.

Me gustaría configurar de alguna manera un git pull upstream branchname desde el repository upstream para que siempre sea git pull --ff-only upstream branchname . ¿Es eso posible?

También me alegraría si pudiera configurar todo el repo upstream para que solo permitiera --ff-only .

Detalles

Nuestra twig de integración principal se develop en el repository principal ascendente, con twigs de características individuales que comienzan desde el desarrollo, hacen sus cambios y luego aumentan las requestes de extracción para fusionar las twigs de características para que se desarrollen.

El problema es que muchos de nuestros desarrolladores no son tan expertos en git como deberían ser, y siguen estropeando la copy de develop de su repository local, de modo que difiere de la copy de develop del upstream.

Ellos no notan esto esta divergencia. A continuación, crean una twig característica de su develop borked, y no se dan count hasta que aumentan su request de extracción, lo que de repente trae mucha tontería. Si tenemos suerte, un crítico conocedor les dice que limpien su request de extracción mediante un nuevo cálculo. Pero de vez en cuando, una request de extracción defectuosa se fusiona y eso arruina nuestra historia de subida.

Solución

Mi recomendación para estos principiantes es utilizar siempre la opción --ff-only cuando se tira desde la parte superior, para forzar a su twig de develop local a que siga siendo una copy perfecta del repository upstream.

Si su copy local de develop ha separado de la stream ascendente, entonces la opción --ff-only les --ff-only cuando --ff-only a intentar tirar. Este grito los obligará a solucionar el problema real.

Pero son git-n00bs y, por lo tanto, a menudo ni siquiera entienden lo que estoy recomendando, y solo siguen estropeando las cosas.

Probaré todas las técnicas de motivación apropiadas de zanahoria / palo (¡Seres humanos! Lo sé, ¿no?), Pero si pudiera configurar de alguna manera sus --ff-only locales con ruedas de entrenamiento --ff-only , entonces mi carga de revisión disminuirá (y mis desarrolladores se verán obligados a aprender mejores técnicas de git).

Puede crear un alias git para esto, por ejemplo:

 git config --global alias.update 'pull --ff-only' 

Y luego dile a tus usuarios que lo usen en lugar de pull :

 git update upstream branchname 

ADVERTENCIA: HACK INDOCUMENTADO

El command git pull es en realidad un script de shell que generalmente se encuentra en el libexec/git-core/git-pull bajo su installation de git. Este script llama internamente a los commands git fetch y git merge en secuencia.

Técnicamente puedes abrir este file y editarlo a tu gusto. Por ejemplo: al inicializar ff_only shell variable en '--ff-only' lugar de '' , se logrará lo que quiera, pero puede entrar en conflicto con otras opciones como --ff que el usuario puede especificar explícitamente. Por supuesto, puede modificar aún más la secuencia de commands para acomodar esto también.

Sin embargo, tenga en count que la installation de una nueva versión de git probablemente sobrescribirá sus cambios. Todo depende de qué tan determinado esté para lograr lo que está tratando de hacer.