文档首页/ 代码托管 CodeArts Repo/ 用户指南/ 旧版/ 仓库迁移/ 将SVN代码仓库迁移至代码托管
更新时间:2023-07-25 GMT+08:00

将SVN代码仓库迁移至代码托管

迁移方法:Git Bash客户端导入

  1. 获取SVN代码库提交者信息。

    1. 通过TortoiseSVN将待迁移的代码仓库下载到本地。
    2. 进入本地SVN代码仓库(本文为KotlinGallery),在Git Bash客户端执行如下命令:
      svn log --xml | grep "^<author" | sort -u | \awk -F '<author>' '{print $2}' | awk -F '</author>' '{print $1}' > userinfo.txt

      执行完毕后,该目录下将生成文件“userinfo.txt”

    3. 打开文件“userinfo.txt”,可看到文件中显示所有对该仓库有提交操作的提交者信息。
    4. 因为Git是用邮箱来标识一个提交者的,为了更好的将SVN已有的信息映射到Git仓库里,需要从SVN用户名到Git作一个映射关系。

      修改“userinfo.txt”,使每一行中,svn作者 = Git作者昵称 <邮箱地址>,用如下格式表示映射关系:

  2. 建立本地Git仓库

    1. 本地新建一个空的Git仓库目录,并将步骤一中的“userinfo.txt”文件拷贝到该目录下。
    2. 在该目录下启动GitBash客户端,并执行如下命令克隆一个Git版本库。
      git svn clone SVN仓库地址 --no-metadata --authors-file=userinfo.txt --trunk=trunk --tags=tags --branches=branches

      命令行中的参数说明如下,请根据实际情况选择相应参数:

      参数

      说明

      --no-metadata

      阻止git导出SVN包含的一些无用信息。

      --authors-file

      SVN帐号映射到git帐号文件,所有svn作者都要做映射。

      --trunk

      主开发项目

      --branches

      分支项目

      --tags

      标签

      执行成功后,本地将生成一个Git仓库。

    3. 输入以下命令,进入“KotlinGallery”文件夹,并验证当前Git仓库分支结构。
      cd KotlinGallery
      git branch -a

      从图中可以看到所有SVN中的目录结构均以Git分支的形式迁移成功。

  3. 本地分支修正。

    步骤二中,使用git svn clone命令将SVN仓库中tags文件夹也作为分支进行保存,这个明显不符合Git的使用规范。因此在上传到远端仓库前,需要先对本地分支进行调整,使之更符合Git使用规范。

    1. 进入本地Git仓库中,使用Git Bash客户端执行如下命令,把tags分支变成合适的Git标签。
      cp -Rf .git/refs/remotes/origin/tags/* .git/refs/tags/
      rm -Rf .git/refs/remotes/origin/tags
      git branch -a
      git tag

    2. 输入以下命令,把“refs/remotes”下面剩下的索引变成本地分支。
      cp -Rf .git/refs/remotes/origin/* .git/refs/heads/
      rm -Rf .git/refs/remotes/origin
      git branch -a
      git tag

    3. 输入以下命令,将trunk分支合入master分支,并删除trunk分支。
      git merge trunk
      git branch -d trunk
      git branch -a
      git tag

  4. 本地代码上传。

    1. 参考设置SSH密钥/HTTPS密码,设置代码仓库SSH密钥。
    2. 通过如下命令将本地仓库与代码托管仓库进行关联,并推送master分支到代码托管服务的仓库。
      git remote add origin 代码仓库地址
      git push --set-upstream origin master

      推送成功后,登录代码托管,可在“分支”页面中查看到当前仓库下的master分支。

    3. 输入以下命令,从本地推送其余分支至代码托管。
      git push origin --all

      推送成功后,可在“分支”页面中查看到,当前仓库下新增了r1.1_hotfix分支。

    4. 输入以下命令,从本地推送tags至代码托管。
      git push origin --tags

      推送成功后,可在代码托管“标签”页面中查看到当前仓库下已有标签“r1.0”“r1.1”