GitLab幕后故事——SVN迁移篇

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

一、迁移动机

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

二、准备工作

1、SVN 账号导出

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

2、创建 GitLab 账号

  • Python 核心代块:
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、建立账号对应关系

sh 复制代码
#!/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 远程并推送所有更改。这会推送所有提交、分支和标签。
    sql 复制代码
    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
    • 如果要调整作者和分支映射,编辑以下文件:

    bash 复制代码
    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。

相关推荐
int WINGsssss18 小时前
Git使用
git
用户07605303543819 小时前
Git Revert:安全移除错误提交的方式
git
Good_Starry1 天前
Git介绍--github/gitee/gitlab使用
git·gitee·gitlab·github
云端奇趣2 天前
探索 3 个有趣的 GitHub 学习资源库
经验分享·git·学习·github
陌殇殇殇2 天前
使用GitLab CI构建持续集成案例
运维·ci/cd·云原生·容器·kubernetes·gitlab
吕玉生2 天前
基于GitLab 的持续集成环境
ci/cd·gitlab
F_D_Z2 天前
【解决办法】git clone报错unable to access ‘xxx‘: SSL certificate problem:
网络·git·网络协议·ssl
等风来不如迎风去2 天前
【git】main|REBASE 2/6
git
艾伦~耶格尔2 天前
IDEA 配置 Git 详解
java·ide·git·后端·intellij-idea
云兮杜康2 天前
IDEA中用过git之后文件名颜色全变红
java·git·intellij-idea