Comment puis-je ajouter des référentiels distants dans Mercurial?


99

Je travaille avec les référentiels Git de la manière suivante:

  • J'ai le référentiel maître et plusieurs télécommandes sur les différentes machines de production.
  • Je pousse le code de production vers les télécommandes et je redémarre les services pour que les modifications prennent effet.

Je suis sur le point de passer de Git à Mercurial et j'aimerais savoir à l'avance comment je peux réaliser quelque chose comme ça.

Réponses:


130

Vous ajoutez des entrées à la [paths]section du .hg/hgrcfichier de votre clone local . Voici un exemple de section qui irait dans le .hg/hgrcfichier:

[paths]
remote1 = http://path/to/remote1
remote2 = http://path/to/remote2

Vous pouvez ensuite utiliser des commandes comme hg push remote1pour envoyer des ensembles de modifications à ce dépôt. Si vous souhaitez que ce dépôt distant mette à jour son répertoire de travail, vous devez mettre changegroupen place un hook à cet emplacement distant qui effectue une mise à jour. Cela ressemblerait à quelque chose comme:

[hooks]
changegroup = hg update 2>&1 > /dev/null && path/to/script/restart-server.sh

Tout le monde n'est pas fan de la mise à jour automatique des répertoires de travail par push, et ce n'est certainement pas la valeur par défaut.


23
Pour tous ceux qui veulent juste voir l'utilisation des télécommandes, hg pathsce qui est équivalent git remote -v.
Keyo

5
default-push (au lieu de par exemple remote1) permet de simplement taper "hg push". Le référentiel push par défaut est ensuite utilisé. Très utile.
Christian

6
@Christian default-pushn'est nécessaire / utile que si votre cible de poussée habituelle diffère de votre source de tirage habituelle. S'ils sont identiques (ou si vous ne tirez jamais), cela defaultsuffit.
Ry4an Brase

2
Juste pour ajouter encore plus à ce sujet: si vous avez les deux default-pushet defaultdans votre fichier de configuration, le premier sera utilisé pour pousser et le dernier pour tirer. Si vous voulez pousser et extraire à partir du même référentiel distant (ce que vous faites probablement si vous utilisez Mercurial de manière centralisée), ne placez que defaultle fichier. Ce serait tellement cool s'ils ajoutaient une petite option de ligne de commande pour le faire au premier push ... (ou peut-être que je suis trop une personne CVS ;-))
tiktak

J'ai Mercurial v2.6.2 installé sur mon Mac, et le fichier pour définir les chemins se trouve .hg/hgrc(pas de DOT avant le nom du fichier).
Regis Zaleman

9

si vous souhaitez ajouter un chemin par défaut, vous devez travailler avec defaultdans votre ~project/.hg/hgrcfichier. Comme suit:

[paths]
default = https://path/to/your/repo

Bonne chance.


5

Vous pouvez jeter un œil au plugin hg-git GitHub :

idée générale hg-git

en ajoutant la possibilité de pousser et d'extraire un référentiel de serveur Git à partir de Mercurial.
Cela signifie que vous pouvez collaborer sur des projets basés sur Git depuis Mercurial ou utiliser un serveur Git comme point de collaboration pour une équipe avec des développeurs utilisant à la fois Git et Mercurial.

Remarque: je n'ai pas testé cet outil avec les dernières versions de Mercurial.


1
J'ai la possibilité de tout porter sur mercurial, je voudrais n'utiliser qu'un seul outil pour ma gestion des sources. Convertissez une fois que le référentiel a construit les structures appropriées, puis uniquement les commandes mercurial pour la production. Je suis un peu conscient que git et mercurial peuvent collaborer mais ne l'ont jamais essayé.
topless le

2
^ Chris: ainsi est votre question: comment puis-je convertir les dépôts Git en dépôts Mercurial? ", Ou" comment déclarer / configurer le dépôt Hg distant? "(Comme dans superuser.com/questions/43686/… ), ou" où a remote est déclaré en Hg? "( crazythinking.wordpress.com/2009/03/07/… )
VonC

0

Si vous êtes sous Unix et que Git est installé, vous pouvez utiliser cette fonction bash pour ajouter facilement un chemin vers les télécommandes sans éditeur de texte:

add-hg-path() {
    git config -f $(hg root)/.hg/hgrc --add paths.$1 $2
    awk '{$1=$1}1' $(hg root)/.hg/hgrc > /tmp/hgrc.tmp
    mv /tmp/hgrc.tmp $(hg root)/.hg/hgrc
}

Puis invoquez-le avec:

$ add-hg-path remote1 https://path.to/remote1

Si quelqu'un souhaite construire un équivalent Powershell, j'aimerais également l'inclure. D'autres améliorations potentielles incluent la vérification des erreurs sur les paramètres et la prise en compte de l'appel à $(hg root).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.