前段时间在 github 上建了一个 PyPy 的 镜像仓库 (官方 PyPy 仓库是个存放在 bitbucket 上的 Mercurial(Hg) 仓库)。本文将记录我使用 git-remote-hg 镜像 Hg 仓库的步骤以及后续的同步更新操作。
-
安装 git 2.x (如果系统上的 git 是 2.x 版本可以跳过本步骤)。由于我用的是 CentOS 6 系统,通过 yum 安装的 git 版本是 1.x ,所以需要编译安装 2.x 版本的 git。详细步骤在这里: 在 CentOS 6 上编译安装 git 2.x
-
安装 Python 包:mercurial
cd /tmp wget https://bootstrap.pypa.io/get-pip.py python get-pip.py pip install mercurial
-
mkdir /usr/local/bin curl -o /usr/local/bin/git-remote-hg https://raw.githubusercontent.com/fingolfin/git-remote-hg/master/git-remote-hg chmod +x /usr/local/bin/git-remote-hg
-
配置
PATH
环境变量:echo 'export PATH=/usr/local/bin:$PATH' >> ~/.bashrc source ~/.bashrc
-
配置 git:
git config --global core.notesRef refs/notes/hg
-
clone Hg 仓库,假设仓库存放在 /www
cd /www git clone "hg::https://mozillazg@bitbucket.org/pypy/pypy"
-
配置 github 仓库地址
cd /www/pypy/ git remote add mine git@github.com:mozillazg/pypy.git
-
同步分支信息
- 下载 fetch_remote_branch_name_to_local.py
- 执行脚本
cd /www/pypy/ python fetch_remote_branch_name_to_local.py
-
push 到 github 仓库
git push mine --all git push mine --tags
-
定时同步代码
- 下载同步分支信息的脚本: fetch_remote_branch_name_to_local.py
-
将下面的代码同步脚本保存为 update.sh:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#!/usr/bin/env bash source ~/.bashrc echo "step 0" cd /www/pypy/ echo "step 1" for remote in `git branch|grep -v '\* master'`; do git branch -d $remote ; done echo "step 2" git fetch origin echo "step 3" python track_all_remote_branches.py echo "step 4" git pull echo "step 5" git push mine --all -f echo "step 6" git push mine --tags -f
-
配置 crontab 定时任务,每天 3 点同步一次代码
$ crontab -e 0 3 * * * cd /www/pypy && /usr/bin/env bash /www/pypy/update.sh > /var/log/mirror_pypy.log 2>&1
想抢先查看实际效果?欢迎围观我创建的 PyPy 镜像仓库
Comments