Salut,
oui tu as raison, cela revient à retrouver la branche d'intégration. Et oui, le développeur connait aussi la branche source qu'il a choisi pour créer sa branche.
Sauf que là, je suis dans un hook git... Pourquoi ? C'est assez simple. Notre logiciel est décomposé en 5 projets. Lorsqu'un développeur commence un développement, il doit créer les branches pour les 5 projets. Pour lui faciliter la vie, on souhaite automatiser la création des branches de la façon suivante:
- le développeur créé la branche sur le projet principale, ce qui déclenche le hook 'post-receive'
- dans ce hook, on recherche la branche source, puis on créé automatiquement les branches pour les autres projets.
Une solution trouvée est la suivante:
git show-branch -a 2>/dev/null | grep '\*.*\[.*\]' | grep -v `git rev-parse --abbrev-ref HEAD` | head -n1 | sed 's/.*\[\(.*\)\].*/\1/' | sed 's/[\^~].*//'
Je passe l'explication dans les détails, mais cela revient à parser le résultat du git show-branch, de filtrer sur les lignes contenant "*" correspondant aux commits contenus dans la branche, d'éliminer les commits de la branche même puis d'extraire de la première ligne restante (correspondant du coup à la branche source ) le nom de la branche. Tordu, mais ça marche.
Bref, c'est une solution, mais qui ne me satisfait qu'à moitié, car un développeur peut également créer une branche à partir d'un tag, et là ce script n'est plus valable.
J'ai beau chercher dans tous les sens, je ne vois pas de solution fiable ä 100%. Rechercher le tag d'origine revient à rechercher le tag lié au commit d'origine de la branche (que l'on peut retrouver via un git rev-list), sauf que plusieurs tags peuvent exister pour le même commit, et là plus moyen d'automatiser les choses...
Partager