4

我主要使用 Git,并且在 github 上有很多代码。我也想把它放在 Bitbucket 上,供使用 mercurial 的人使用,但更重要的是,我希望在我的 domian 上也有代码,并且 BItbucket 支持托管代码的 Cnames。

那么有没有办法让我主要使用 Git,但也能够推送到 HG。

Github 在另一个方向创建了一个项目,(对于 HG repos 到 git),但是有一个我正在寻找的方向。

4

2 回答 2

7

我打算将此添加到我的另一个答案中,但它有点长,所以我们将它作为一个单独的答案来做。

如果你想双向使用,你可以使用hg-git在你的机器上获取一个hg版本的 repo。你仍然可以在 Git 中完成所有工作,这只是意味着你将使用 GitHub 作为你的中介。

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

但是,它确实有一个好处,如果您想从 Mercurial 用户那里提取更改,您可以将它们拉入hgrepo,然后将它们推送到 GitHub。

$ cd hg
$ hg pull someotherrepo
  # Probably merge
$ hg push # Changes go to GitHub
$ cd ../src
$ git pull
  # Continue working in Git
于 2010-07-09T18:08:24.357 回答
4

如果您只是在做 Git 存储库的镜像,那么您可以设置一个 cron 作业来运行以下脚本:

#!/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://hg@bitbucket.org/$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 中完成所有工作,那就没关系了。

于 2010-07-09T18:03:55.767 回答