La lecture de quelques "Pourquoi un DVCS est meilleur" répond à plusieurs questions sur les programmeurs. Ils semblent tous dire qu'en général, le DVCS est meilleur car vous n'avez pas de course de commit dans les grands projets, IE commit, obsolète donc mise à jour, validation, obsolète à nouveau, validation, toujours obsolète, etc.
DVCS limite cela avec le concept de push. Mais dans les très gros projets, n'y aurait-il pas de «push race», surtout en fin de compte? Je sais que dans Git, cela est quelque peu remédié par la ramification constante pour tout, mais dans Mercurial vous ne branchez pas, vous créez une nouvelle tête.
Problème que je vois
- L'utilisateur tente de pousser
- Obsolète (mercurial ne vous laissera pas pousser si votre repo local est obsolète), donc vous tirez et fusionnez vos modifications locales
- L'utilisateur tente de pousser à nouveau, mais pendant qu'il fusionnait, quelqu'un d'autre a poussé, il est donc à nouveau obsolète
- Tirez et fusionnez à nouveau
- Toujours obsolète
- Répéter
Semble familier?
Est-ce un problème réel avec des dépôts mercuriels très importants et populaires? Qu'en est-il à l'intérieur d'une entreprise lorsque tout le monde fait son dernier effort de la journée?
hg branch myfeature; hg ci -m "Starting feature branch"; hg push --new-branch
--close-branch
lors de la validation - et mercurial a nommé des branches, vous n'avez pas besoin de cloner dans un nouveau répertoireRéponses:
Pour autant que je sache, la plupart des grands projets open source utilisant DVCS utilisent des «pull request» au lieu de push, c'est-à-dire qu'un utilisateur demande que le projet tire de sa branche, et le prject peut choisir d'entreprendre ces pull pulls dans n'importe quel ordre. , le cas échéant. Cela élimine les besoins de la «course push», comme vous l'avez nommé.
Dans d'autres entreprises, je ne peux pas garantir le processus, mais là où je travaille, ce n'est pas un problème.
Vous voyez, lorsque vous travaillez sur un cas, vous travaillez sur une branche de l'ensemble du référentiel, de sorte que vos demandes push vont à une version distante du tronc principal. Lorsque vous souhaitez intégrer votre changement (terminé) dans le coffre, vous chargez le coffre, tirez, fusionnez, poussez.
À l'occasion ( très occasionnellement), deux personnes essaieront de le faire en même temps (ce qui est généralement dû à des problèmes de communication). Dans ce cas, celui qui "perd" n'aura plus qu'à tirer, fusionner, pousser. Comme il n'y a pas de précipitation à 17 heures pour valider un référentiel central, le problème que vous avez décrit n'est pas vraiment là.
C'est la beauté du DVCS: la ramification est indolore, donc tout le monde peut travailler sur sa propre branche.
ÉDITER
Oh, je viens de remarquer votre commentaire "Dans Mercurial, vous ne branchez pas ...": Oui, vous le faites. Vous n'avez pas à le faire, mais comme il est si facile de le faire et que les avantages de le faire l'emportent sur le fait de ne pas le faire, vous avez tendance à ne faire que brancher les dépôts.
la source
Non, il n'y a pas de course push car le travail se fait dans des branches thématiques . Un maître de fusion gère la complexité (relativement inférieure) de la combinaison des branches en une branche d'intégration . Cela se fait généralement en continu. Pour plus d'informations sur les workflows de contrôle de version distribuée, la première source serait la bouche du cheval:
man gitworkflows
en ligne ici . Les flux de travail Mercurial font ramification utilisation malgré votre demande et les techniques sont similaires.la source