在现代软件开发中,版本控制是一个至关重要的环节。传统的中央版本控制系统如 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 远程并推送所有更改。这会推送所有提交、分支和标签。
sqlgit 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
-
如果要调整作者和分支映射,编辑以下文件:
bashedit $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
- 现在 SubGit 已经配置了 Git/SVN 存储库,运行
结语
从 SVN 到 GitLab 的迁移可能是一项挑战,但它对的项目带来许多好处。GitLab 提供了丰富的功能,使项目管理更加容易,团队协作更加高效。随着持续集成和部署的集成,将能够更快地交付高质量的软件。希望本文能帮助成功迁移到 GitLab。