更新时间:2025-02-28 gmt 08:00

迁移svn代码仓-九游平台

约束限制

  • 该功能需要保证被导入的仓库域名和服务节点网络连通。
  • 用户需要新建项目或者已有项目。
  • 用户需要有新建仓库的权限,如果用户没有权限,可以参考配置代码仓库级的权限

在线导入svn平台的代码仓库到codearts repo

  1. 进入codearts repo九游平台首页后,单击“新建仓库”,在“归属项目”下拉框中选择已有的项目或者“新建项目”
  2. 仓库类型选择“导入仓库”,导入方式选择“svn”,参数填写请参考表1
    表1 导入svn平台代码仓库的参数表格

    字段名称

    说明

    源仓库路径

    该参数必填,该参数表示要导入的仓库路径。源仓库路径需要以(http://)开头。

    源仓库访问权限

    必填。分两种情况填写:

    • 如果用户导入的源仓可见范围是对所有访客公开,勾选“不需要校验权限”
    • 如果用户导入的源仓可见范围是私仓,请勾选“需要校验权限”。当前支持两种鉴权方式,“通过服务扩展点”“通过用户名密码授权”,参数填写请参考校验导仓权限
  3. 单击“下一步”,进入“填写基本信息”页,请参考填写参数。
  4. 请参考表1 同步仓库设置的参数表格,填写“同步仓库”设置参数。

迁移svn代码仓常见问题

通过git bash导入svn平台的代码仓库到codearts repo

  1. 获取svn代码库提交者信息。
    1. 通过tortoisesvn将待迁移的代码仓库下载到本地。
    2. 进入本地svn代码仓库(本文为kotlingallery),在git bash客户端执行如下命令:
      svn log --xml | grep "^' '{print $2}' | awk -f '' '{print $1}' > userinfo.txt

      执行完毕后,“kotlingallery”目录下将生成文件“userinfo.txt”,如下图所示。

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

      修改“userinfo.txt”,使每一行中,svn作者 = git作者昵称 <邮箱地址>,映射关系的格式如下图所示。

  2. 建立本地git仓库
    1. 执行命令git init,在本地新建一个空的git代码仓库目录。
    2. 步骤1中的“userinfo.txt”文件复制到该目录下,并执行如下命令切换到该目录下。
      cd 目标目录地址
    3. 在该目录下启动git bash客户端,并执行如下命令克隆一个git版本库。
      git svn clone svn仓库地址 --no-metadata --authors-file=userinfo.txt --trunk=trunk --tags=tags --branches=branches

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

      参数

      说明

      --no-metadata

      表示不将 svn 的元数据导入到git仓库中,这样可以减小git代码仓库的大小,但是可能会丢失一些svn的历史信息。

      --authors-file=userinfo.txt

      表示使用指定的用户信息文件来进行作者信息的映射。

      --trunk=trunk

      表示将svn仓库中的“trunk”分支作为git代码仓库的主分支。

      --tags=tags

      表示将svn代码仓库中的tags目录作为git代码仓库的标签。

      --branches=branches

      表示将svn代码仓库中的branches目录作为git代码仓库的分支。

      执行成功后,本地将生成一个名为kotlingallery的git代码仓库。

    4. 执行以下命令,进入“kotlingallery”文件夹,并验证当前git仓库分支结构。
      cd kotlingallery
      git branch -a

      如上图所示,所有svn中的目录结构均以git分支的形式迁移成功。

  3. 本地分支修正。

    因此在上传到代码托管仓库前,需要先对本地分支进行调整,使之符合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. 上传本地代码仓到cocdearts repo。
    1. 参考配置ssh密钥,设置代码仓库的ssh密钥。
    2. 进入codearts repo九游平台首页,单击“新建仓库”,在“归属项目”下拉框中选择已有的项目或者“新建项目”
    3. 仓库类型选择“普通仓库”,填写对应参数信息并去勾选“允许生成readme文件”“选择gitignore”,完成新的代码仓库创建,并自动跳转到该代码仓库九游平台首页。
    4. 选择右上角的“克隆/下载” > “用https克隆”,复制https地址。
    5. 执行以下命令,将本地代码仓库与codearts repo进行关联,并推送master分支到codearts repo的代码仓库。在执行命令时,需要用户输入coearts repo的https账号和密码。
      git remote add origin 新建的代码仓库的https地址
      git push --set-upstream origin master

      推送成功后,进入该代码仓库九游平台首页,选择“代码” > “分支”,查看到当前代码仓库下的master分支。

    6. 继续执行以下命令,把本地其余分支推送到codearts repo。
      git push origin --all

      推送成功后,进入该代码仓库九游平台首页,选择“代码” > “分支”,代码仓库下新增了r1.1_hotfix分支。

    7. 执行以下命令,从本地推送tags到codearts repo。
      git push origin --tags

      推送成功后,进入该代码仓库九游平台首页,选择“代码” > “tags”,代码仓库下已有标签“r1.0”“r1.1”

相关文档

网站地图