Secuencia de commands para fusionar 2 twigs git de forma automática?

Mi repository de git tiene 2 twigs: master y develop. Quiero un script que combine todos los cambios de desarrollo a maestro automáticamente.

Usé Jenkins: el complemento Git clona el repository y luego se ejecuta este script (la variable 'versión' es un parámetro de trabajo):

# merge git checkout -b develop origin/develop git checkout master git merge -Xtheirs --squash develop -m "v${version}" # commit git commit -m "v${version}" # tag git tag v${version} -m "v${version}" # push git push origin v${version} 

Lo probé en un repository de testing y falla con:

git merge -Xtheirs develop
CONFLICTO (eliminar / modificar): test.txt eliminado en el desarrollo y modificado en HEAD. Versión HEAD of test.txt a la izquierda en el tree.
La fusión automática falló; arregla los conflictos y luego compromete el resultado.

¿Cómo resuelvo este conflicto automáticamente ? Quiero que el script siempre agregue / modifique / elimine files de acuerdo con la twig 'desarrollar', ya que el master nunca se toca de todos modos …

Solutions Collecting From Web of "Secuencia de commands para fusionar 2 twigs git de forma automática?"

La estrategia de combinación de -X theirs solo funciona para resolver trozos en conflicto dentro de un file. La documentation para estas opciones se encuentra en la página man de git-merge :

  ours This option forces conflicting hunks to be auto-resolved cleanly by favoring our version. Changes from the other tree that do not conflict with our side are reflected to the merge result. This should not be confused with the ours merge strategy, which does not even look at what the other tree contains at all. It discards everything the other tree did, declaring our history contains all that happened in it. theirs This is opposite of ours. 

En este caso, una twig ha eliminado el file mientras que la otra lo ha modificado, que es un caso distinto de un simple conflicto entre dos twigs que han realizado modificaciones diferentes.

5 años de edad … Pero sigue siendo relevante.

Aquí está mi solución: elimino la twig maestra y creo una nueva twig maestra de la twig de la que quiero 'fusionar':

 GIT_BRANCH_TO_MERGE_FROM=`git symbolic-ref HEAD | sed 's!refs\/heads\/!!'` GIT_BRANCH_TO_MERGE_TO="master" git checkout "${GIT_BRANCH_TO_MERGE_TO}" git checkout "${GIT_BRANCH_TO_MERGE_FROM}" # Delete TO branch git branch -D "${GIT_BRANCH_TO_MERGE_TO}" || echo "Failed to delete ${GIT_BRANCH_TO_MERGE_TO}" git push origin :"${GIT_BRANCH_TO_MERGE_TO}" || echo "Failed to push ${GIT_BRANCH_TO_MERGE_TO} delete to origin" # Create TO branch git checkout -b "${GIT_BRANCH_TO_MERGE_TO}" || echo "Failed to create local branch ${GIT_BRANCH_TO_MERGE_TO}" git push origin "${GIT_BRANCH_TO_MERGE_TO}" || echo "Failed to push ${GIT_BRANCH_TO_MERGE_TO} to origin"