C'est ma première fois à l'aide d'un DVC et aussi de développeur isolé, la première fois que j'ai réellement utilisé des branches, alors peut-être que je manque quelque chose ici.
J'ai un référentiel à distance à partir de laquelle j'ai tiré le fichiers et commencé à travailler. Les modifications ont été poussées sur le référentiel à distance et bien sûr que ce scénario simple fonctionne bien. P>
Maintenant que mon application Web dispose de fonctionnalités stables, j'aimerais commencer à le déployer et j'ai donc cloné le référentiel à distance à un Nouvelles branches / répertoire stable en dehors de mon répertoire de travail pour la branche par défaut et utilisé: p> pour créer une nouvelle branche nommée. J'ai créé un tas de scripts de déploiement qui ne sont nécessaires que par la branche stable et je les ai commis au besoin. Encore une fois, cela a fonctionné bien. P> Maintenant, quand je suis retourné à mon répertoire de travail initial pour travailler sur certaines nouvelles fonctionnalités, j'ai découvert que Mercurial insiste sur une seule tête dans le référentiel à distance. En d'autres termes, je devrais fusionner les deux branches (par défaut et stable), en ajoutant dans les scripts de déploiement inutiles à ma branche par défaut afin de pousser jusqu'au référentiel principal. Cela pourrait s'aggraver, si je devais modifier un fichier dans ma branche stable afin de déployer. P> Comment puis-je garder mes branches nommées séparées dans Mercurial? Dois-je créer deux référentiels distincts à distance pour le faire? Auquel cas les branches nommées perdent leur valeur. Est-ce que je manque quelque chose ici? P> p>
4 Réponses :
Vous avez écrit: p>
J'ai découvert que Mercurial insiste sur une seule tête dans le référentiel à distance. P> blockQuote>
Pourquoi pensez-vous que c'est le cas? p>
de l'aide pour
hg poussant code>: p>
Par défaut, la poussée refusera de fonctionner si elle détecte le résultat serait Augmentez le nombre de têtes distantes. Cela indique généralement la Le client a oublié de tirer et de fusionner avant de pousser. P> blockQuote>
Si vous savez que vous créez intentionnellement une nouvelle tête dans le référentiel à distance et que cela est souhaitable, utilisez le drapeau -f. P>
Est-ce la pratique acceptée? Avoir plusieurs têtes sur le référentiel distant d'accord?
J'ai vu quelques postes de blogs mentionnés que c'est une mauvaise pratique d'avoir plusieurs têtes dans un référentiel partagé et cela a du sens.
Avoir plusieurs têtes sur la même branche dans un référentiel partagé est un point de confusion potentiel. Avoir de multiples têtes, une branche nommée, ne conduit pas au même type de problèmes, tant que tous les développeurs partageant les reposer sont conscients que les branches nommées sont utilisées.
Après avoir lisé le Section sur le développement boursier nommé dans le livre mercurial, j'ai conclu que pour moi personnellement, la meilleure pratique consiste à avoir des référentiels partagés séparés, un pour chaque branche. J'étais sur le compte gratuit à Bitbucket.org, alors j'essayais de me forcer à n'utiliser qu'un seul référentiel partagé, ce qui a créé le problème. P>
J'ai un peu la balle et j'ai eu un compte payant afin que je puisse conserver un référentiel commun distinct pour mes versions stables. P>
Qu'est-ce qui vous a fait conclure cela? Je ne vois rien de là qui dit que "les branches nommées sont mauvaises". Je pense personnellement qu'ils sont beaucoup plus faciles à travailler avec des référentiels multiples.
"Dans la plupart des cas, isoler les branches des référentiels est la bonne approche. Sa simplicité facilite la compréhension; et il est donc difficile de faire des erreurs. Il y a une relation individuelle entre branches que vous travaillez dans votre système . Cela vous permet d'utiliser des outils normaux (non-mercuriels) pour travailler sur des fichiers dans une branche / référentiel. " - Du livre mercurial personnellement, pour moi, la suggestion indiquée ci-dessus conduit à un modèle mental plus simple. J'ai aussi modifié ma réponse.
Ah, je suppose que je ne suis pas d'accord que cela rend les choses plus simples. Et si votre code doit être dans un emplacement spécifique sur votre système de fichiers? Copiez-vous / renommer des dossiers chaque fois que vous souhaitez commuter des succursales? Si quelqu'un veut obtenir toutes les succursales d'un projet, il devrait-il vraiment avoir à cloner tout ce qui est à plusieurs reprises?
Afaict, le seul moyen de traiter avec plusieurs branches de code avec des exigences de chemin durs où toutes les branches doivent être poussées que toutes les branches ne doivent pas maintenir les maîtres dans un endroit alternatif et "HG Strip 0; HG Tirez la branche 'selon les besoins, ou utilisez simplement GIT. Mercurial ne semble pas supporter des branches nommées jetables en dehors du système MQ quelque peu clunky (ou si cela le fait, j'aimerais voir la documentation sur la manière dont elle est censée travailler).
@ZED B> Qu'est-ce qui ne va pas avec HG Push BrightName-to-Push code>? Seulement pousser les branches que vous voulez pousser. Si vous voulez une branche jetable, ne le poussez pas à ne pas le pousser, puis à le dépouiller une fois que vous décidez que vous ne le voulez plus.
Oups, faites que HG Push -R -R -RA-nom-to-pousser code> dans le dernier commentaire.
Utiliser La raison La branche x x ressemble à ceci dans le repo télécommandé: p> Quelle tête faut-il un nouveau développeur si ils vérifient la branche? Qui sait. P> p> hg push -f code> pour forcer la création d'une nouvelle tête distante.
Push code> ne le fera pas par défaut est qu'il essaie de Rappelez-vous de tirer et de fusionner au cas où vous avez oublié. Ce que vous ne veux pas em> veux arriver est: p>
Je pense que le développeur doit cloner tout le référentiel et mettre à jour la succursale X. Il finirait ensuite à la révision 102 (la révision la plus basse sur X). Le développeur peut alors simplement fusionner les deux têtes s'il sait comment, ou il peut laisser cela à quelqu'un d'autre.
Je suis venu de Git attendant la même chose. Il suffit de pousser le sommet semble être une approche. P>
HG Push -R Tip -R P> blockQuote>