我主要使用Git并且在github上有很多代码。我也希望在Bitbucket上使用mercurial,但更重要的是因为我想在我的domian上使用代码,而BItbucket支持Cnames用于托管代码。
因此,我有一种方法可以与Git合作,但也可以推送给HG。
Github在另一个方向创建了一个项目,(对于HG repos to git),但是我正在寻找一个方向。
答案 0 :(得分:7)
我打算将此添加到我的其他答案中,但它有点长,所以我们将把它作为一个单独的答案。
如果您想双向进行,可以使用hg-git在您的计算机上获取hg
版本的回购。您仍然可以在Git中完成所有工作,这只意味着您将使用GitHub作为中介。
$ cd src
# do some work
# push to GitHub
$ cd ../hg
$ hg pull
$ hg push bitbucket
但是,如果你想从Mercurial用户那里获取更改,你可以将它们拉入hg
repo,并将它们推送到GitHub。
$ cd hg
$ hg pull someotherrepo
# Probably merge
$ hg push # Changes go to GitHub
$ cd ../src
$ git pull
# Continue working in Git
答案 1 :(得分: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中完成所有工作,那就不重要了。