J'utilise Git depuis un moment et je souhaite convertir mon flux de production habituel en Mercurial. En particulier, je suis intéressé à convertir le flux de travail que j'utiliserais pour contribuer à un projet Git afin de pouvoir contribuer à un projet Mercurial.Conversion du flux de production Git en Mercurial
En règle générale, pour un projet sur GitHub, je bifurquer le projet sur GibHub du projet d'origine, puis aller chercher les deux localement, avec deux noms différents à distance:
# Clone the initial repository and call the remote repository 'github-origin'
git clone -o github-origin git://github.com/orig_author/project.git
# Add the forked GitHub repo as an additional remote repo ('github-mine')
cd project
git remote add github-mine git://github.com/me/project.git
git fetch github-mine
Lorsque je liste les branches avec git branch -a
, je reçois quelque chose comme ceci:
* master
remotes/github-mine/some_feature
remotes/github-mine/master
remotes/github-origin/HEAD -> github-origin/master
remotes/github-origin/some_feature
remotes/github-origin/master
je peux créer mes propres succursales locales en utilisant git checkout -b new_feature
puis repoussez à mon dépôt GitHub, ajoutant ainsi deux références:
* my_feature
remotes/github-mine/my_feature
Je peux ensuite contacter l'auteur original pour discuter de cette fonctionnalité, soumettre une demande d'extraction et ainsi de suite. Tout ce flux de travail est en fait assez indépendant de la ligne de temps de travail de l'auteur d'origine. Cela rend assez facile de discuter des fonctionnalités expérimentales sans poluer le référentiel du projet principal.
Si l'auteur d'origine a effectué plus de modifications, je peux suivre git fetch github-orig
et éventuellement fusionner ou rebaser mes modifications locales en conséquence. En tant que test rapide (en supposant par branche courante est my_feature
):
git fetch github-origin
git checkout -b temp
git rebase github-origin/master
Un point essentiel de ce flux de travail est d'être en mesure de savoir où la branche de chaque dépôt est situé par rapport à mes propres branches. En particulier, il est important de savoir que mes branches ne sont pas les mêmes que les branches distantes avec le même nom (même entre les deux référentiels GitHub, les deux branches master
n'ont pas besoin d'être identiques, par exemple). Voir tout cela est quelque chose de très facile en utilisant gitk --all
.
Je ne suis pas sûr de savoir comment faire la même chose sur un projet Mercurial (par exemple sur BitBucket).
Voici ce que j'ai essayé de faire, à partir de cette Command Equivalence Table:
hg clone https://bitbucket.org/orig_author/project
# Edit .hg/hgrc and add 'bb-mine=https://bitbucket.org/.../project' to [paths]
# Apparently equivalent to git fetch.
hg pull bb-mine
Cela semble fonctionner, et il tire les commits à distance (en fait, je l'ai essayé cela sur un référentiel dans lequel J'ai déjà poussé une de mes branches). Je peux voir toutes les branches en utilisant hg branches
, mais aucune indication quant à d'où ils viennent. hg view
ne montre vraiment rien. Plus important encore, mon tip
est maintenant le dernier de mes commits, mais je n'ai pas un équivalent de l'étiquette github-origin/master
que j'aurais (que ce soit avant mes propres commits ou après si un autre auteur a fait plus de changements). Je voudrais être en mesure de faire un hg pull
(équivalent de git fetch
) à tout moment dans le futur pour voir quelles sont les différences entre ma copie locale et les nouvelles modifications apportées par l'autre auteur (s) sont sans changer nécessairement quelque chose dans mon référentiel local ou dans mon dépôt BitBucket (au moins jusqu'à ce que j'ai résolu les conflits potentiels dus à ces changements). De plus, j'ai aussi tendance à avoir mon propre dépôt backup
lorsque j'utilise Git (qui est un serveur SSH où je peux pousser toutes les branches, même en cours de développement qui n'est pas encore destiné à être publié).Je me rends compte que la voie de Mercurial de ramification n'est pas tout à fait la même que la manière de Git. Cependant, y a-t-il un flux de travail équivalent pour Mercurial, ou devrais-je simplement changer d'approche? Comment puis-je voir où se trouvent chacun des dépôts que j'utilise avec leurs succursales respectives (dont certaines peuvent avoir en commun)?
Une raison pour laquelle vous auriez besoin d'utiliser Hg? –
@AdamDymitruk Les projets que je voudrais fourcher utilisent Hg. J'ai regardé dans l'utilisation du pont hg-git, mais cela semble rendre le workflow plus compliqué, surtout si je dois utiliser ma propre branche Hg du projet sur quelque chose comme BitBucket pour les requêtes pull. – Bruno