J'ai toujours utilisé Git auparavant, mais je veux contribuer à python Donc maintenant que je dois apprendre mercurial et je le trouve très frustrant.
Donc, j'ai fait quelques petites patchs et je voulais les suivre comme commettre mon référentiel mercurial local. Apparemment, il y a 4 façons de gérer la ramification dans Mercurial . 1 et 4 semblaient complètement ridicules pour moi, des branches nommées semblent être des poids lourds et je sens que je ne suis pas censé les utiliser pour des corrections rapides à 1 validation, alors j'ai utilisé des signets.
Maintenant, mon patch est rejeté et je veux supprimer l'une de mes branches de ma marque de signets de mon référentiel. Ok, dans Git, je voudrais juste forcer ma branche et oublie de cela, alors je supprime mon signet et maintenant j'ai suivi des problèmes:
Tortoisehg et hg log
Montrez toujours que la branche de validation et de default
a 2 têtes. Et si je comprends bien correctement, vous ne pouvez pas supprimer les engagements dans HG sans plugins supplémentaires.
Mercurial a non seulement des hachages, mais aussi des numéros de révision. Comme j'ai ajouté deux de mes propres engagements, tous les engagements sont tirés après avoir différents numéros de révision du repo central principal.
Je fais hg update
Après avoir tiré pour déplacer mon signet master
au dernier commis automatiquement, mais je n'ai pas trouvé de moyen de le faire à Tortoisehg.
Qu'est-ce que je fais mal? Est-ce normal et attendu et devrais-je simplement ignorer ces problèmes? Ou comment suis-je censé travailler avec mes branches?
Apparemment, il y a 4 façons de gérer la ramification en mercuriat. 1 et 4 semblaient complètement ridicules pour moi, nommé des branches semblent être un poids lourd
Dans Mercurial, vous ne Créez Branches. Chaque commit est efficacement une succursale, tout commettre peut avoir plusieurs parents et plusieurs enfants. Celles-ci sont donc les quatre manières différentes d'organiser les mêmes entités.
Vous CAN Donnez-leur des noms différents, vous ne pas avoir à, mais c'est une bonne idée. Il n'y a rien de poids lourd sur les branches nommées - ce n'est que des métadonnées supplémentaires. Personnellement, je préfère nommé des branches à rien d'autre dans une situation.
Les journaux Tortoisehg et HG montrent toujours que la branche de validation et de défaillance a 2 têtes.
Ce qui est exactement la raison d'utiliser des branches nommées au lieu de tout dévisser dans default
.
Et si je comprends bien correctement, vous ne pouvez pas supprimer les engagements dans HG sans plugins supplémentaires.
Vous ne pouvez pas réellement Supprimer quoi que ce soit dans Mercurial du tout et vous ne devriez pas. Vous pouvez utiliser hg strip
Mais ce n'est pas enregistré - vous basicaly vient de couper une partie de votre repo local. Vous ne pouvez pas pousser cela, et si vous tirez d'un repo qui a la branche que vous avez dépouillé localement, cela revient.
Mercurial a non seulement des hachages, mais aussi des numéros de révision. Comme j'ai ajouté deux de mes propres engagements, tous les engagements sont tirés après avoir différents numéros de révision du repo central principal.
Les chiffres ne veulent rien dire. Vous pouvez les ignorer si elles vous confondent.
Je fais la mise à jour HG après avoir tiré pour déplacer mon favori Master Markmark vers le dernier commis, mais je n'ai pas pu trouver un moyen de le faire à Tortoisehg.
Je n'ai pas utilisé de tortuehg mais hg pull -u
fera la fois pull
et update
.
J'ai toujours utilisé Git auparavant, mais je veux contribuer à python Donc maintenant que je dois apprendre mercurial et je le trouve très frustrant.
C'est bon, de nombreux utilisateurs mercuriels ressentent la même chose à propos de Git (y compris de moi).
Même lorsque Mercurial et Git sont similaires, ils ont des dessins différents, étant peut-être la différence de conception la plus importante, c'est que, dans la modification mercurciale, l'historique n'est pas aussi flexible que dans Git (car il est un peu découragé).
Réponse courte: Peu importe si vous avez une petite quantité de changements, vous pouvez toujours utiliser une branche. Si vous envisagez de supprimer cette succursale, utilisez A Bookmark Pour que vous puissiez la supprimer ultérieurement et bande Les changements ultérieurs.
Tout d'abord, essayant de perdre une petite lumière sur certaines des choses que vous mentionnez:
1 et 4 sont considérés comme une ramification est parce que Chaque fois que vous vous engagez, vous créez efficacement une branche sans nom (s'il y a un autre commit à la fois à votre source/béni-répo), qui est techniquement une branche. Dans la méthode 4, vous créez une nouvelle "tête" lors de la méthode 1 que vous n'êtes pas. Les têtes sont censées être fusionnées. Je conviens que la méthode 1 est une sorte d'idiot, mais certains semblent aimer cela ... pour de petits projets, je suppose.
En ce qui concerne méthode 2, ce n'est pas que les branches sont lourdes, c'est qu'ils sont permanents. Vous ne pouvez pas supprimer une branche à moins d'utiliser quelque chose comme l'extension de la bande. Encore une fois, la philosophie de design de Mercurial ne va pas à modifier l'histoire (mais elle s'est améliorée à cela).
En ce qui concerne Numéros de révision, ils ne sont qu'une référence locale et plus humaine lisible Pour que vous utilisiez toutes les commandes qui ont à voir avec les révisions. Si vous aimez utiliser HASHES, vous pouvez toujours le faire. Les numéros de révision ne sont qu'un raccourci et ne sont pas pris en compte par Mercurial pour toute opération interne entre différents référentiels.
Maintenant, pour répondre à vos autres questions:
hg heads
, si vous voyez 2+ têtes dans une seule branche nommée, il est préférable qu'elles soient fusionnées. C'est probablement là que votre marque-page est.hg rollback
, mais je suppose que ce n'est pas le cas.hg bookmark --delete yourbookmark
En outre, En git, vous pouvez avoir des "branches locales privées" parce que vous devez les pousser explicitement et que vous pouvez les supprimer ensuite. Dans Mercurial, vous poussez tout ce que vous avez, Toutefois, Si vous souhaitez éviter cela Vous pouvez utiliser la fonctionnalité Fonction Phases et = Marquez un ensemble de révisions comme secret. Les révisions secrètes ne seront pas poussées.
Enfin, Vous ne faites rien de mal, il suffit de garder à l'esprit qu'ils ne sont que des outils différents construits avec des espèces d'esprit légèrement différents, qui font bouillir à peu près à: modifier l'historique (git) ou ne pas modifier l'historique (hg). En mercurial, il est plus difficile de vous tirer dans le pied de modifier l'historique (spécialement avec des phases) et c'est pourquoi certains comme ça mieux que GIT.