2010-07-09 3 views
4

Я работаю в основном с Git и имею много кода на github. Я также хотел бы иметь его на Bitbucket, для людей, использующих mercurial, но что более важно, поскольку я хочу также иметь код на моем domian, а BItbucket поддерживает Cnames для размещенного кода.Git bridge to Mercurial

Так есть способ для меня в основном работать с Git, но также иметь возможность нажать на HG.

Github создал проект в другом направлении (для HG repos to git), но есть один для направления, которое я ищу.

+2

hg-git двусторонний. –

+0

Возможный дубликат [совместимости Git с Mercurial Repository] (http://stackoverflow.com/questions/883452/git-interoperability-with-a-mercurial-repository) – skolima

ответ

4

Если вы просто делаете зеркало репо Git (ы), то вы можете настроить работу хрон, чтобы выполнить следующий сценарий:

#!/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 

Это предполагает, что вы установили ключ SSH. Как вы можете видеть, это отразит и другие VCS. Она предполагает структуру каталогов, как это:

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

Очевидно, что это только в одну сторону, но если вы делаете все ваши работы в Git, то это не будет иметь значения.

7

Я собирался добавить это к своему другому ответу, но он немного затянулся, поэтому мы сделаем это как отдельный ответ.

Если вы хотите пойти в обе стороны, вы можете использовать hg-git, чтобы получить версию репо на hg. Вы все еще можете выполнять всю свою работу в Git, это просто означает, что вы будете использовать GitHub в качестве вашего посредника.

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

Однако он имеет то преимущество, что если вы хотите, чтобы тянуть изменения из Mercurial пользователя, вы можете вытащить их в hg репо, и подтолкнуть их к GitHub.

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