... donc je me suis habitué aux trucs simples avec Mercurial (add
, commit
, diff
) et j'ai découvert le fichier .hgignore (yay!) et ont appris à créer et à basculer entre les branches (branch
, update -C
).
J'ai cependant deux questions majeures:
Si je suis dans la branche "Branch1" et que je souhaite retirer certaines des modifications de la branche "Branch2", mais pas toutes, comment dois-je procéder? Surtout si toutes les modifications sont dans un seul sous-répertoire. (Je suppose que je pourrais simplement cloner l'ensemble du référentiel, puis utiliser un outil de fusion de répertoires comme Beyond Compare pour choisir et choisir mes modifications. Il semble qu'il devrait y avoir un moyen d'isoler simplement les modifications dans un fichier ou un répertoire.)
Basculer entre les branches avec update -C
semble si facile, je me demande pourquoi je prendrais la peine d'utiliser clone
. Je ne peux penser qu'à quelques raisons (voir ci-dessous) - y a-t-il d'autres raisons qui me manquent?
une. si j'ai besoin d'agir sur deux versions/branches à la fois (par exemple, faire un diff de performance métrique)
b. pour une sauvegarde (clone
le référentiel sur un lecteur réseau dans un emplacement physiquement différent)
c. pour faire le pick & choose merge comme je l'ai mentionné ci-dessus.
J'utilise clone pour:
L'ancienne utilisation est assez rare pour moi - principalement lorsque j'essaie une idée que je pourrais vouloir abandonner totalement. Si je veux fusionner, je veux fusionner TOUTES les modifications. Ce type de branchement sert principalement à suivre les branches de différents développeurs afin qu'ils ne se dérangent pas. Juste pour clarifier ce dernier point:
Pour les branches de fonctionnalité ou les branches à durée de vie plus longue, j'utilise des branches nommées qui sont partagées plus confortablement entre les référentiels sans fusion. Il se sent également mieux lorsque vous souhaitez fusionner de manière sélective.
Fondamentalement, je le vois de cette façon:
C'est mon point de vue, mais c'est vraiment une question de politique.
Pour la question 1, vous devez être un peu plus clair sur ce que vous entendez par "changements". Laquelle de celles-ci voulez-vous dire:
Si vous voulez dire l'élément 1, vous devriez vous pencher sur l'extension Transplant , en particulier sur l'idée de sélectionner quelques ensembles de modifications.
Si vous voulez dire l'élément 2, vous feriez ce qui suit:
hg revert -r <branch you want to merge> --include <files to update>
pour modifier le contenu de ces fichiers comme ils le sont dans l'autre branche.hg commit
pour valider ces modifications dans la branche en tant que nouvel ensemble de modifications.Quant à la question 2, je n'utilise jamais de clones de référentiel pour me ramifier, donc je ne sais pas. J'utilise des branches nommées ou des branches anonymes (parfois avec des signets).
J'ai une autre option à explorer: les files d'attente Mercurial.
L'idée est d'avoir une pile de correctifs (sans commits, "vrais" correctifs) au-dessus de votre répertoire de travail actuel. Ensuite, vous pouvez ajouter ou supprimer les correctifs appliqués, en ajouter un, le supprimer, en ajouter un autre, etc. Un seul correctif ou un sous-ensemble de ceux-ci finit par être une nouvelle "fonctionnalité" comme vous le souhaitez probablement avec les branches. Après cela, vous pouvez appliquer le patch comme d'habitude (car c'est un changement). Les succursales sont probablement plus utiles si vous travaillez avec quelqu'un d'autre ...?