将项目从HG迁移至Git

作者:聂勇 欢迎转载,请保留作者信息并说明文章来源!
从HG迁移至Git

GIT对多分支有着非常好的支持,团队的项目逐渐从HG迁移至GIT。迁移后,如何能保留原来HG项目中的提交历史和tag,是一个必须要解决的问题,fast-export正是因此而产生。

一、预备

  • 需要迁移的HG项目本地路径:/devdata/projects/game/threadpool-jws-merge
  • 迁移的目的GIT仓库:git@git.aofeng.local:jws-module/threadpool.git

二、迁移过程

1、获取fast-export工具。

1
2
cd $OPEN_SOURCE_DIR
git clone git://repo.or.cz/fast-export.git

说明:

  • $OPEN_SOURCE_DIR为存放开源项目的目录 ,如:/devdata/projects/open_source/

2、新建GIT本地仓库并初始化。

1
2
3
4
5
cd $GIT_REPO_ROOT
mkdir threadpool-jws
cd threadpool-jws
git init

说明:

  • $GIT_REPO_ROOT为存放GIT项目的目录 ,如:/devdata/projects/git/

3、使用fast-export将HG项目转换成GIT项目。

1
$OPEN_SOURCE_DIR/fast-export/hg-fast-export.sh -r <HG项目本地仓库路径>

说明:

  • 执行上述转换命令后,在$GIT_REPO_ROOT/threadpool-jws下面生成了一个.git目录,存放的是从HG项目转换后的GIT版本信息,原来的HG项目不受影响。
  • 当前例子中<HG项目本地仓库路径>为/devdata/projects/game/threadpool-jws-merge。

4、将本地GIT仓库与远程GIT仓库建立关联并推送代码。

1
2
3
git checkout HEAD
git remote add origin <迁移的目的GIT仓库>
git push origin master

说明;

  • 当前例子中<迁移的目的GIT仓库>为 git@git.aofeng.local:jws-module/threadpool.git

5、将标签(tag)推送至远程GIT仓库。

1
git push origin --tags