1
votes

Comment vérifier avec Git avant la fusion si la fusion est nécessaire? ("Déjà à jour.")

Dans un pipeline de déploiement, je vérifie le maître dans un clone propre (qui est la cible), puis Je fusionne la révision dedans pour la mettre à jour.

Already up-to-date.

Comme git a une vérification avant fusion, il indique alors dans mon scénario:

git checkout master
git merge "${revision}"

lorsque la révision a déjà été fusionnée.

Comment puis-je savoir, avant la commande de fusion, que ceci ("Déjà à jour") est le cas, afin que je puisse quitter le pipeline plus tôt car il n'y a plus rien à faire?


0 commentaires

4 Réponses :


0
votes

vous pouvez essayer d'utiliser

git branch --merged

qui vérifiera la liste pour la fusion déjà comme expliqué sur https://git-scm.com/book/en/ v2 / Git-Branching-Branch-Management

afin que vous puissiez extraire votre révision en tant que branche temporaire, vérifiez si elle a été fusionnée et supprimez-la ensuite.


5 commentaires

Le $ {revision} que j'ai n'est pas un nom de branche mais la référence de hachage complète. Il n'y a pas de branche pour cela. Est-ce un problème pour git branch - merged?


En voyant simplement votre mise à jour, la branche temporaire peut être OK, mais ne peut-il pas être vérifié pour une révision également?


non, comme expliqué dans ma réponse - vous pouvez créer une branche à partir de la révision et l'utiliser pour faire la vérification.


ce qui me vient à l'esprit, c'est que vous pouvez utiliser git log comme expliqué dans stackoverflow.com/questions/14167335/… et trouvez votre révision particulière. gardez simplement à l'esprit que cela ne fonctionnera pas lorsque votre révision a d'autres commits précédents, c'est pourquoi je préfère - fusionné à la recherche dans le journal


D'accord, je peux suivre jusqu'ici ce que vous suggérez ici, un nom de branche temporaire est requis pour que je puisse continuer à être sur la branche principale. Permettez-moi de jouer avec. Je pense que cela nécessite quelques lignes de commande.



3
votes
git merge-base --is-ancestor $revision master || git merge $revision

2 commentaires

Merci beaucoup, celui-ci est simple, je vais mettre la course, voyons ce qui casse ^^


Réponse courte: rien. J'avais besoin d'un test inverse (si déjà fusionné, cassez la construction avec un message disant qu'elle est déjà fusionnée), ce qui était simple. Merci beaucoup pour l'indice!



0
votes

vous pouvez utiliser git diff $ {revision} --name-status . Si rien n'est imprimé, il n'y a aucune différence entre les versions et aucune fusion n'est nécessaire.


0 commentaires

0
votes

Vous pouvez vérifier la sortie de la commande ci-dessous

git log --oneline devlop..origin/master

cela affichera tous les commits qui sont dans origin / master mais pas dans la branche devlop.

s'il n'y a pas sortie, alors toutes les modifications sont fusionnées sinon origin / master doit être fusionné dans la branche devlop


0 commentaires