likes
comments
collection
share

GitLab幕后故事——SVN迁移篇

作者站长头像
站长
· 阅读数 12

在现代软件开发中,版本控制是一个至关重要的环节。传统的中央版本控制系统如 SVN 逐渐被分布式版本控制系统如 Git 取代。本文将详细介绍如何将项目从 SVN 迁移到 GitLab,以便能够更好地利用 GitLa b的协作和持续集成功能。

一、迁移动机

SVN,也称为 Subversion,是一种中央版本控制系统,曾经在许多项目中发挥重要作用。然而,随着时间的推移,Git 的兴起使得 GitLab 逐渐崭露头角。GitLab 是一种基于 Git 的版本控制系统,集成了代码托管、项目管理、CI/CD 等功能,受到越来越多开发者的青睐。

二、准备工作

1、SVN 账号导出

  • 在 SVN 的管理页面中找到 Users,导出 txt 格式的用户列表 users.txt。

2、创建 GitLab 账号

  • Python 核心代块:
  •   import gitlab  
      import requests
    
      # 用户文件
      path = 'user.txt'
    
      # 新增用户
      with open(path, encoding = 'utf-8', mode = 'r') as file:  
        for i in file.readlines():  
          # 拆分字段  用户名  姓名  邮箱  密码  
            key = i.strip()  
            username = key.split(',')[0]
            name = key.split(',')[1]  
            email = key.split(',')[2]  
            password = key.split(',')[3]  
            # 创建用户  
            data = {'email':email, 
                    'password':password, 
                    'username':username, 
                    'name':name
                   }  
            user = gl.users.create(data)  
            print(user.name, user.id)  
            print('创建用户成功')  
            f.close()  
    

3、建立账号对应关系

#!/bin/bash

svn log --quiet | grep -E "r[0-9]+ \| .+ \|" | cut -d'|' -f2 | sed 's/ //g' | sort | uniq >> authors.txt

三、开始迁移

1、svn2git 切换迁移

当前正在使用 SVN 存储库,则可以将存储库迁移到 Git 和 GitLab。建议进行硬切换,即运行一次迁移命令,然后让相关团队人员立即开始使用新的 GitLab 存储库。

  • 安装svn2git

    • sudo gem install svn2git
  • 转换存储库:

    • svn2git https://svn.example.com/path/to/repo --authors /path/to/authors.txt
    • 如果 SVN 存储库需要用户名和密码,将 --username <username>--password <password>标志添加到上述命令中。此外svn2git还支持排除某些文件路径、分支、标签等。
  • 推送:

    • 创建一个新的 GitLab 项目,将转换后的代码推送到其中。从项目页面复制 SSH 或 HTTP(S) 存储库 URL。将 GitLab 存储库添加为 Git 远程并推送所有更改。这会推送所有提交、分支和标签。
    • git remote add origin git@gitlab.com:<group>/<project>.git
      git push --all origin
      git push --tags origin
      

2、## SubGit 平滑迁移

SubGit 是一个平滑、无压力的 SVN 到 Git 迁移的工具。它创建本地或远程 Subversion 存储库的可写 Git 镜像,这样您就可以根据需要同时使用 Subversion 和 Git。它需要访问 GitLab 服务器,因为它直接在文件系统级别与 Git 存储库进行通信。

  • SubGit 配置:

    • 在 GitLab 中镜像 SVN 存储库的第一步是创建一个用作镜像的新空项目。

    • 对于 Omnibus 安装,存储库的默认路径是 /var/opt/gitlab/git-data/repositories/USER/REPO.git

    • 对于从源安装,默认存储库目录是 /home/git/repositories/USER/REPO.git

    • 为了方便起见,将此路径分配给一个变量:

      • GIT_REPO_PATH=/var/opt/gitlab/git-data/repositories/USER/REPOS.git
    • SubGit 使该存储库与远程 SVN 项目保持同步。为了方便起见,将远程 SVN 项目 URL 分配给一个变量:

      • SVN_PROJECT_URL=http://svn.company.com/repos/project
    • 运行 SubGit 来设置 Git/SVN 镜像。确保 subgit代表保留 GitLab Git 存储库所有权的同一用户运行以下命令(默认情况下git):

      • subgit configure --layout auto $SVN_PROJECT_URL $GIT_REPO_PATH
    • 如果要调整作者和分支映射,编辑以下文件:

    edit $GIT_REPO_PATH/subgit/authors.txt
    edit $GIT_REPO_PATH/subgit/config
    
  • 转换:

    • 现在 SubGit 已经配置了 Git/SVN 存储库,运行subgit以将现有 SVN 修订版初始转换到 Git 存储库中:
      • subgit install $GIT_REPO_PATH
    • 初始转换完成后,subgit保持 Git 存储库和 SVN 项目同步(新的 Git 提交将转换为 SVN 修订版,新的 SVN 修订版将转换为 Git 提交)。镜像工作透明,不需要任何特殊命令。
    • 如果想使用 执行一次性切换迁移subgit,请使用import命令:
      • subgit import $GIT_REPO_PATH

结语

从 SVN 到 GitLab 的迁移可能是一项挑战,但它对的项目带来许多好处。GitLab 提供了丰富的功能,使项目管理更加容易,团队协作更加高效。随着持续集成和部署的集成,将能够更快地交付高质量的软件。希望本文能帮助成功迁移到 GitLab。