J'ai récemment discuté de dvcs avec un collègue, car notre bureau commence à envisager de passer de TFS (nous sommes un magasin MS). Dans le processus, je suis devenu très confus car il a dit que bien qu'il utilise Mercurial, il n'avait pas entendu parler d'une commande de «succursale» ou de «paiement», et ces termes ne lui étaient pas familiers. Après s'être demandé comment il était possible qu'il ne les connaissait pas et expliquer comment les branches dvcs fonctionnent "en place" sur vos fichiers locaux, il était assez confus.
Il a expliqué que, tout comme le fonctionnement de TFS, quand il veut créer une "branche", il le fait par clonage, donc il a une copie entière de son dépôt. Cela m'a paru vraiment étrange, mais l'avantage que je dois concéder est que vous pouvez regarder ou travailler sur deux branches simultanément car les fichiers sont séparés.
En cherchant sur ce site pour voir si cela a été demandé avant de voir un commentaire selon lequel de nombreuses ressources en ligne font la promotion de cette méthodologie "clone to branch", au grand dam de l'affiche. Est-ce réellement courant dans la communauté dvcs? Et quels sont les avantages et les inconvénients de suivre cette voie? Je ne le ferais jamais car je n'ai pas besoin de voir plusieurs branches à la fois, la commutation est rapide et je n'ai pas besoin de tous les clones pour remplir mon disque.
git
fonctionnement. Avechg
ceci est généralement le premier workflow enseigné et il est toujours très utile.Réponses:
Mis à part l'avantage / l'inconvénient général de pouvoir voir les deux branches, je pense qu'il y a un avantage spécifique à Mercurial à le faire.
Si vous clonez pour créer une branche, vous pouvez supprimer le clone plus tard si vous ne souhaitez pas conserver vos modifications. Si vous décidez de les fusionner, le fait que vous ayez décidé de séparer vos modifications de cette manière n'est visible par personne d'autre.
En revanche, si vous utilisez
hg branch
pour créer une nouvelle branche nommée, le nom de la branche est enregistré dans l'historique lorsque vous vous engagez, est visible pour tout le monde et doit être assez unique afin d'éviter toute confusion potentielle plus tard. Cela peut ne pas être approprié si votre branche est destinée au développement d'une fonctionnalité expérimentale ou à une modification qui pourrait s'avérer minime.Si vous utilisez des branches nommées pour gérer les versions publiées de votre logiciel et que vous les utilisez également pour développer des fonctionnalités à court terme ou des corrections de bogues, il est facile de devenir confus car il n'y a aucun moyen (en dehors des conventions de dénomination) de garder ces deux types de branches séparées.
http://mercurial.selenic.com/wiki/StandardBranching explique cela plus en détail. Il convient également de mentionner que depuis Mercurial 1.8, il est possible de créer un signet (
hg bookmark
) - un nom jetable pour une branche de courte durée. Les signets peuvent être poussés, tirés, déplacés et supprimés.la source
git
, car je m'y suis habituéhg
. De plus, devoir me souvenir explicitementgit branch
chaque fois que je veux créer une branche est ennuyeux, par rapport àhg
la création automatique de branches sans nom.Chaque fois que vous effectuez un commit dans un DVCS, vous créez techniquement une branche dans l'histoire, chaque fois que vous la repoussez dans le dépôt béni que vous réintégrez, voici la partie intéressante:
Rappelez-vous que le bouton "fork" dans Bitbucket / github?, Forking peut être considéré comme synonyme de branchement, et ce que fait le bouton "fork" n'est qu'un clone de ce référentiel sur votre compte.
Le seul avantage du «clonage vers une branche» est de pouvoir travailler simultanément à deux moments de l'histoire, et ironiquement pour votre collègue, c'est un workflow commun pour travailler sur différentes branches en même temps (sans avoir à faire des allers-retours) ).
Dites à votre collègue d'apprendre à créer une branche , c'est très simple, ici, ayez un tutoriel:
Le «clonage vers une branche» est logique lorsque vous travaillez dans différentes branches en même temps ou lorsque vous souhaitez essayer une expérience sans créer de branche permanente dans l'historique tout en étant capable de la réintégrer dans une branche déjà existante. .
Personnellement, je n'aime pas cette pratique et préfère faire des succursales et les fermer si nécessaire. Voici comment vous procédez:
J'espère que cela dissipe vos doutes sur les branchements DVCS, ici les branches ne font plus peur.
la source
Je ne m'inquiéterais pas personnellement du remplissage du code sur mon disque ... d'abord, c'est juste du code, et deuxièmement, vous n'allez pas garder tous vos clones pour toujours.
Cette méthodologie est promue dans de nombreuses ressources en ligne, en particulier pour Hg. Je ne l'ai jamais vu utilisé en production, dans les environnements CI, il est beaucoup plus courant d'avoir des branches de fonctionnalités de courte durée que des clones de référentiel supplémentaires. Je ne vois pas l'avantage de faire cela, si quelque chose va rendre votre histoire plus confuse, pas moins, et cela ne vous rapporte rien non plus. Si vous souhaitez regarder votre nouveau code côte à côte avec l'ancien code, vous pouvez utiliser un outil de diff / fusion pour regarder les deux validations côte à côte, avec l'avantage supplémentaire que vous verrez vos modifications mises en évidence.
la source
hg
. Être capable de pousser et de tirer entre plusieurshg
référentiels peut être un outil collaboratif vraiment puissant. Seul le fait de pouvoir extraire desgit
référentiels non nus peut limiter considérablement vos options avec ce type de flux de travail.