2010-07-09 13 views
4

Je travaille principalement avec Git et j'ai beaucoup de code sur github. Je voudrais aussi l'avoir sur Bitbucket, pour les personnes qui utilisent mercurial mais surtout parce que je veux aussi avoir le code sur mon domian, et BItbucket supporte Cnames pour le code hébergé.Git bridge to Mercurial

Donc, est-ce qu'il y a un moyen pour moi de travailler principalement avec Git, mais aussi de pouvoir pousser vers HG.

Github a créé un projet dans une autre direction, (Pour HG repos to git), mais y en at-il un pour la direction que je cherche.

+2

hg-git est bidirectionnel. –

+0

duplication possible de [interopérabilité Git avec un référentiel Mercurial] (http://stackoverflow.com/questions/883452/git-interoperability-with-a-mercurial-repository) – skolima

Répondre

4

Si vous faites juste un miroir du repo Git (s), vous pouvez configurer une tâche cron pour exécuter le script suivant:

#!/bin/bash 

USER=bitbucketuser 
ERROR_FILE=clone_update_err 
CLONES=/path/to/clones 

cd $CLONES 

if [ $# -ne 1 ]; then 
    for DIR in *; do 
     if [ -d $DIR ]; then 
      ./update.sh $DIR 2> $ERROR_FILE 
      if [ -s $ERROR_FILE ]; then 
       echo $DIR >&2 
       cat -n $ERROR_FILE >&2 
      fi 
     fi 
    done 
else 
    DIR=$1 
    echo $DIR 
    cd $DIR 

    if [ -a source ]; then 
     cd source 
     if [ -d .hg ]; then 
      hg pull 
     elif [ -d .git ]; then 
      git pull 
     elif [ -d .bzr ]; then 
      bzr pull 
     elif [ -d .svn ]; then 
      svn up 
     else 
      echo "$DIR is not a known repository type." 
      return 1 
     fi 

     cd .. 
     hg convert source hg 

     URL=ssh://[email protected]/$USER/$DIR/ 
     cd hg 
     hg pull $URL 
     hg push $URL # You can add -f here if you don't mind multiple heads 
     cd .. 
    else 
     # hg dir or hg-git 
     cd hg 
     hg pull 
     hg push $URL 
     cd .. 
    fi 

    cd .. 

    sleep 5 
fi 

Cela suppose que vous disposez d'une clé SSH installé. Comme vous pouvez le voir, il reflétera également d'autres VCS. Elle suppose une structure de répertoire comme ceci:

clones/ 
    project1/ 
    source/ # Original Git/Bazaar/SVN/Mercurial repo 
    hg/  # Mercurial repo 

De toute évidence, c'est à sens unique, mais si vous faites tout votre travail dans Git, il ne sera pas question.

7

J'allais ajouter ceci à mon autre réponse, mais ça a pris un peu de temps, donc nous allons le faire comme une réponse séparée.

Si vous voulez aller dans les deux sens, vous pouvez utiliser hg-git pour obtenir une version hg du repo sur votre machine. Vous pouvez toujours faire tout votre travail dans Git, cela signifie simplement que vous utiliserez GitHub comme intermédiaire.

$ cd src 
# do some work 
# push to GitHub 
$ cd ../hg 
$ hg pull 
$ hg push bitbucket 

Cependant, il a l'avantage que si vous voulez tirer des modifications d'un utilisateur Mercurial, vous pouvez les tirer dans le repo hg, et les pousser vers GitHub.

$ cd hg 
$ hg pull someotherrepo 
    # Probably merge 
$ hg push # Changes go to GitHub 
$ cd ../src 
$ git pull 
    # Continue working in Git