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?
4 Réponses :
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.
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.
git merge-base --is-ancestor $revision master || git merge $revision
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!
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.
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