De la bonne redaction des messages d'avertissements
Par Laurentj le vendredi, août 14 2009, 12:29 - Geek-log - Lien permanent
J'ai eu un truc que je ne comprenais pas avec Mercurial. J'avais créé une branche nommée sur mon dépôt local, et fait des commits. Du coup, tout logiquement, j'avais deux "heads", une pour la branche nommée, et une autre pour la branche "default". Au moment de faire mon push, Mercurial a ralé, comme quoi ça allait créer des nouvelles têtes sur le dépôt distant, et me disait qu'il faudrait faire un merge avant de faire le push. Le problème, c'est que je ne veux pas fusionner les deux branches !
Du coup, j'ai eu un gros doute sur ma compréhension de ce qu'était un head, une branche nommée et à quoi ça servait. Mais j'avais beau lire la doc, il me semblait bien avoir compris tout ceci. Et ça ne m'avançait pas sur le pourquoi de l'erreur de Mercurial. Pourquoi fallait-il absolument faire un merge ? Pourquoi avoir un système de branches si c'est pour les fusionner systématiquement ?
Et puis j'ai expliqué mon problème sur le channel irc de Mercurial, et je fus plutôt rassuré. Ou presque. Parce qu'en fait, c'est moi qui n'ait pas tout à fait compris le sens du message d'erreur. Je l'ai trop pris au pied de la lettre. Ce n'est pas une erreur, mais un avertissement, et l'ordre qu'il faille fusionner, n'est pas un ordre, mais une simple proposition pour résoudre le problème (parmis d'autres non explicitées). Et on m'a expliqué qu'en fait, je devais forcer[1] le push avec l'option -f , et que dans les prochaines versions, le message sera plus explicite (pas seulement indiquer qu'il faut merger) ou n'apparaitra plus tout simplement (j'imagine, seulement dans les cas où il s'agit que de têtes de branches, et pas plusieurs têtes sur une même branche).
Bref, voilà mes doutes levés. Je peux continuer à travailler :-)
Notes
[1] ce qu'en fait j'hésitais à faire avant, parce que quand on force les choses, bien souvent ça apporte des ennuis
Commentaires
C'est ce qui me fait un peu peur dans le déploiement de Mercurial en remplacement de SVN, un développeur lambda va être perdu, et risque de merger à tort et à travers des choses qu'il ne devrait pas merger.
Parce que même avec une formation, je les connais mes développeurs, ils vont faire des bêtises, déjà que certains ont du mal avec SVN.
Il me semble que la dernière version (1.3) n'a plus ce problème puisqu'il n'affiche plus le message d'avertissement dans le cas où toutes les têtes appartiennent à des branches nommées.
Il apparait cependant toujours s'il y a plusieurs têtes n'ayant pas de nom. Dans ce cas, cela vient sûrement d'un merge qui a été oublié avant de faire le push.
@Vincent : je croyais avoir la dernière version, mais en fait non, je suis en 1.2.1 :-)
Mouais, beh j'ai testé la version 1.3.1, c'est la même chose malheureusement :
abort: push creates new remote branch 'ml2'!
(did you forget to merge? use push -f to force)
Ah ! ok !
Ba j'avais pas compris non plus ...