2010-07-09 8 views
4

나는 힘내 주머니에서 주로 일하고 github에 많은 코드가있다. 또한 Bitbucket을 사용하고 싶습니다. 수은을 사용하지만 더 중요한 것은 내 도미넌트에 코드를 넣고 싶기 때문입니다. 그리고 BItbucket은 호스팅 된 코드에 대해 Cnames를 지원합니다.Git bridge to Mercurial

그래서 나는 힘내와 함께 일하는 대부분의 방법이 있지만 또한 HG로 밀어 넣을 수 있습니다.

Github는 다른 방향으로 프로젝트를 만들었지 만 (찾고있는 HG repos에서는) 내가 찾고있는 방향에 대한 프로젝트가 있습니다.

+2

hg-git는 양방향입니다. –

+0

[Mercurial Repository와의 상호 운용성] (http://stackoverflow.com/questions/883452/git-interoperability-with-a-mercurial-repository) 중복 가능 – skolima

답변

4

그냥 힘내의 repo (들)의 거울을하고 있다면, 당신은 다음과 같은 스크립트를 실행하는 cron 작업을 설정할 수 있습니다 : 이것은 당신이 SSH 키가 설치되어 가정

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

. 보시다시피, 다른 VCS도 미러링합니다. 그것은이 같은 디렉토리 구조를 가정

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

는 물론, 이것은 단지 하나의 방법이지만, 당신이 망할 놈의 모든 작업을 할 경우, 그것은 중요하지 않습니다.

7

나는 이것을 다른 답변에 추가하려고했으나 조금 길어서 별도의 답변으로 처리 할 것입니다.

두 가지 방법을 모두 수행하려면 hg-git을 사용하여 기기에 hg 버전의 리포지토리를 가져올 수 있습니다. Git에서 모든 작업을 계속할 수는 있습니다. GitHub를 중개자로 사용한다는 의미입니다.

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

그러나, 당신은 의욕 사용자의 변경 사항을 끌어하려는 경우, 당신은 hg REPO로 끌어와 GitHub의에 그들을 밀어 수 있다는 장점을 가지고있다.

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