网易首页 > 网易号 > 正文 申请入驻

GitLab技术文章|徒手从SVN迁移到极狐GitLab

0
分享至


二、SVN配置使用


一直以来,SVN(Subversion)和Git都是非常优秀版本控制工具,只不过近些年基于Git的GitHub/GitLab/极狐GitLab发展势头迅猛,让很多人忘记了SVN。今天文章的主题,将给大家解析如何从SVN迁移到极狐GitLab。

首先,是迁移的前提条件,其一是可用的SVN环境;其二是极狐GitLab账号(自建或SaaS均可,SaaS可登陆https://gitlab.cn,右上角登申请注册);其三是服务器至少一台。

其次,是SVN的安装和配置使用相关教程。

一、SVN的安装

执行如下命令即可在Ubuntu 20.04上完成SVN的安装:

使用svn --version来检查安装是否成功:

SVN可以通过svn/http/https协议来使用。

三、SVN协议配置使用

在SVN服务器上创建一个svn的目录:

使用svnadmin命令创建一个svn项目:

接着就可以在/var/www/svn/jh目录下看到如下内容:

所有的配置信息都在conf目录下面:

修改passwd文件来完成用户验证设置:

修改authz文件来完成对用户权限的设置:

修改svnserve.conf文件完成对svnserver的设置:

接着执行如下命令,启动svnserver:

在另外一台服务器上,用svn客户端命令查看svn服务器配置过程是否正确:

$ svn checkout svn://your-svn-server-ip-or-domain/jh --username svn-username --password svn-password
Checked out revision 0.

上述完成了svn服务器的配置以及用svn协议来使用svn。

四、HTTP/HTTPS协议配置使用

关于SVN HTTP/HTTPS的配置使用,可以参考SVN HTTP配置以及SVN HTTPS配置这两篇文章。下图展示了配置完HTTPS并用HTTPS来登录SVN的情况:

SVN到极狐GitLab的迁移

从SVN到极狐GitLab的迁移有两种方式:svn2git 和 SubGit。

下面先介绍使用svn2git来完成从SVN到极狐GitLab的迁移。

使用svn2git来迁移

svn2git的安装

svn2git是一个用来将项目从SVN迁移到Git的工具。其核心原理是使用 git-svn来克隆svn仓库,然后做一些清理工作,以便branch和tags能被正确导入。

svn2git有多种安装方式,在安装了Ruby和Git的情况下,可以用如下命令安装:

基于Debian的Linux系统,可以用如下命令安装:

当然,极狐GitLab团队已经将编译好的二进制文件包托管到了极狐GitLab SaaS上:https://jihulab.com/jihulab/customersuccess/common/svn2git/-/releases。下载解压即可使用。

可以用svn2git --help来查看是否安装成功:

$ svn2git --help
Usage: svn2git SVN_URL [options]
Specific options:
--rebase Instead of cloning a new project, rebase an existing one against SVN
--username NAME Username for transports that needs it (http(s), svn)
--password PASSWORD Password for transports that need it (http(s), svn)
--trunk TRUNK_PATH Subpath to trunk from repository URL (default: trunk)
--branches BRANCHES_PATH Subpath to branches from repository URL (default: branches); can be used multiple times
--tags TAGS_PATH Subpath to tags from repository URL (default: tags); can be used multiple times
--rootistrunk Use this if the root level of the repo is equivalent to the trunk and there are no tags or branches
--notrunk Do not import anything from trunk
--nobranches Do not try to import any branches
--notags Do not try to import any tags
--no-minimize-url Accept URLs as-is without attempting to connect to a higher level directory
--revision START_REV[:END_REV]
Start importing from SVN revision START_REV; optionally end at END_REV
-m, --metadata Include metadata in git logs (git-svn-id)
--authors AUTHORS_FILE Path to file containing svn-to-git authors mapping (default: ~/.svn2git/authors)
--exclude REGEX Specify a Perl regular expression to filter paths when fetching; can be used multiple times
-v, --verbose Be verbose in logging -- useful for debugging issues
--rebasebranch REBASEBRANCH Rebase specified branch.
-h, --help Show this message

使用svn2git进行迁移

文章最开始的svn仓库有一个trunk分支,三个branch(01,02,03),三个tags(v1.0.0,v2.0.0,v3.0.0):

用户信息匹配(可选)

可以将svn的用户信息和极狐GitLab的用户信息做一个映射,以便代码提交信息可以和正确的极狐GitLab用户相互匹配。用下面的命令可以导出svn中用户的信息:

用下面的信息格式,将上述内容写入一个authors.txt文件:

比如:

上述的authors.txt文件可以在后面用到。

使用svn2git检出svn代码并转换为Git仓库

如果需要做用户匹配,则需要在命令行后面加参数--authors /path/to/authors.txt。同时,上述命令适用于具有标准目录结构(具有trunk,branches,tags等目录)的svn仓库。对于非标准的svn仓库,需要在迁移的时候通过 --branches,--tags等参数来做branch和tag的映射,详细使用可以用--help来查看。

接着可以查看branch和tag:

在极狐GitLab上创建一个空仓库

登陆https://jihulab.com,创建一个空仓库(如果还未进行注册,可以登陆https://gitlab.cn,点击右上角进行注册)

添加远端仓库地址

推送本地代码到远端仓库

$ git push --all origin
Counting objects: 616, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (424/424), done.
Writing objects: 100% (616/616), 633.54 KiB | 0 bytes/s, done.
Total 616 (delta 179), reused 616 (delta 179)
remote: Resolving deltas: 100% (179/179), done.
remote:
remote: To create a merge request for 01, visit:
remote: https://jihulab.com/svn-2-git/svt-2-git/-/merge_requests/new?merge_request%5Bsource_branch%5D=01
remote:
remote:
remote: To create a merge request for 02, visit:
remote: https://jihulab.com/svn-2-git/svt-2-git/-/merge_requests/new?merge_request%5Bsource_branch%5D=02
remote:
remote:
remote: To create a merge request for 03, visit:
remote: https://jihulab.com/svn-2-git/svt-2-git/-/merge_requests/new?merge_request%5Bsource_branch%5D=03
remote:
remote:
remote: To create a merge request for master, visit:
remote: https://jihulab.com/svn-2-git/svt-2-git/-/merge_requests/new?merge_request%5Bsource_branch%5D=master
remote:
git push --tags origin
Counting objects: 6, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 718 bytes | 0 bytes/s, done.
Total 6 (delta 2), reused 5 (delta 2)
To git@jihulab.com:svn-2-git/svt-2-git.git
* [new tag] v1.0.0 -> v1.0.0
* [new tag] v2.0.0 -> v2.0.0
* [new tag] v3.0.0 -> v3.0.0

接着就可以在极狐GitLab界面上看到相应的branch,tags都推送成功了:

由于极狐GitLab的默认分支是main,svn转换过来的是master,可以将master分支merge到main分支,后续以main分支开展后续工作,以避免一些不便。

使用SubGit来迁移

SubGit的安装

SubGit安装的前提需要JRE>1.8的环境。然后直接在SubGit官网[4]上下载安装包,解压即可:

通过subgit --version 命令来确认安装是否成功:

SubGit的配置

SubGit是安装在极狐GitLab服务器上的,因为它需要和服务器上的Repo文件系统进行直接通信,所以下面的操作流程适合自管理(Self-managed)版本的极狐GitLab实例,如果是SaaS服务,则和下面的svn2git的方法类似。

首先需要设置一个空库用来做镜像,在极狐GitLab实例上面创建一个空仓库:

可以在极狐GitLab服务器的上找到这个仓库所对应的文件系统路径:

$ /var/opt/gitlab/git-data/repositories/@hashed/d4/73/d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35.git
$ cat config
[core]
repositoryformatversion = 0
filemode = true
bare = true
logallrefupdates = true
autocrlf = false
eol = lf
symlinks = true
[gitlab]
fullpath = xiaomage/svn-2-git

将环境变量GIT_REPO_PATH的值设置为上述路径:

$ GIT_REPO_PATH=/var/opt/gitlab/git-data/repositories/@hashed/d4/73/d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35.git

通过环境变量设置svn仓库的地址:

通过SubGit来设置Git/SVN的镜像:

至此,Git/SVN仓库之间的镜像已经设置成功,接着可以用subgit install命令来完成初始传输,也即让SVN的信息流向Git:

此后SVN仓库上的改动会自动同步至Git仓库,Git仓库侧的改动会自动同步至SVN仓库。比如,目前SVN仓库的代码目录结构如下:

在Git仓库侧的branch和tags信息为:

现在在SVN仓库侧,做一个修改,新建一个tag:

接着查看Git仓库的tag变化:

可以看到v5.0.0这个tag已经从SVN侧同步到Git仓库侧了,在极狐GitLab上,可以看到如下的branch,tag界面:

install命令是让svn仓库和Git仓库保持同步,如果只是想一次性从svn切到Git,则直接使用import命令即可。

针对极狐GitLab SaaS 的话,由于无法准确获知GIT_REPO_PATH的值(非admin),则可以将GIT_REPO_PATH设置。

为 GIT_REPO_PATH=/var/opt/gitlab/git-data/repositories/USER/REPOS.git,在执行subgit install 之后,直接使用svn2git的方式:添加远端仓库,然后将branch和tag直接push到极狐GitLab SaaS 的空库上面。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
布林肯桌上的神秘饮料布林肯桌子上的那瓶饮料火了!

布林肯桌上的神秘饮料布林肯桌子上的那瓶饮料火了!

楚楚的留香
2024-04-29 16:48:46
1-4!湖人没了!穆雷绝杀了NBA的一个时代

1-4!湖人没了!穆雷绝杀了NBA的一个时代

篮球教学论坛
2024-04-30 13:03:32
迈腾男捉奸暴打女友后续:双方家庭已知情,曝出轨对象也有女友

迈腾男捉奸暴打女友后续:双方家庭已知情,曝出轨对象也有女友

180°视角
2024-04-30 11:46:37
女子花万元买来的衬衣手洗一次后现划痕 商家拒绝退货:不能水洗|追踪到底

女子花万元买来的衬衣手洗一次后现划痕 商家拒绝退货:不能水洗|追踪到底

封面新闻
2024-04-30 15:17:33
明日五一为“凶日”,记得:1不开、2不去、3不动,尊重老传统

明日五一为“凶日”,记得:1不开、2不去、3不动,尊重老传统

书中自有颜如玉
2024-04-30 17:21:37
中国科学界巨匠“杨振宁”传来最新消息!是整个科学界的损失悲哀

中国科学界巨匠“杨振宁”传来最新消息!是整个科学界的损失悲哀

搞笑的阿票
2024-04-30 18:38:57
北京:优化调整本市住房限购政策

北京:优化调整本市住房限购政策

财联社
2024-04-30 20:06:39
妻子爬山后续,两人将被调查,知情人透露隐情,更多信息曝光

妻子爬山后续,两人将被调查,知情人透露隐情,更多信息曝光

鬼谷子思维
2024-04-30 16:46:59
傅政华长期违规持枪的真相!

傅政华长期违规持枪的真相!

仕道
2024-04-30 15:49:29
做男科手术刚脱裤子就产生生理反应…被护士姐姐还这么嘲讽我!

做男科手术刚脱裤子就产生生理反应…被护士姐姐还这么嘲讽我!

荷兰豆爱健康
2024-04-30 18:17:35
重庆榜一大哥与女主播大打出手!刷30万礼物被甩,男子真容遭曝光

重庆榜一大哥与女主播大打出手!刷30万礼物被甩,男子真容遭曝光

洛洛女巫
2024-04-30 16:05:52
成都女子出轨遭男友捉奸暴打,求饶视频曝光太辣眼,网友爆笑点评

成都女子出轨遭男友捉奸暴打,求饶视频曝光太辣眼,网友爆笑点评

闻言
2024-04-30 18:46:58
周鸿祎迈巴赫买家退出二手车公司

周鸿祎迈巴赫买家退出二手车公司

鞭牛士
2024-04-30 16:23:20
海外谈中国:“福建”号航母将开始第一次海试 作战能力显著提升

海外谈中国:“福建”号航母将开始第一次海试 作战能力显著提升

hawk26讲武堂
2024-04-30 15:01:49
清华教授王文湛发声说:凭什么拿我们纳税人的钱去供养留学生!

清华教授王文湛发声说:凭什么拿我们纳税人的钱去供养留学生!

夜宵说钱
2024-04-30 14:56:53
有性生活的人和没有性生活的人,竟有如此多不同,看完涨知识了

有性生活的人和没有性生活的人,竟有如此多不同,看完涨知识了

肿瘤的真相与误区
2024-04-28 19:43:36
中央政治局会议,释放楼市重要信号

中央政治局会议,释放楼市重要信号

小白读财经
2024-04-30 15:58:40
凯特王妃新照曝光,健康漂亮不像病人,女儿剪短头发,真实度存疑

凯特王妃新照曝光,健康漂亮不像病人,女儿剪短头发,真实度存疑

刘哥谈体育
2024-04-30 18:44:33
向太新店开业:郭碧婷向佐招待,李连杰父女C位,马伊琍送花篮!

向太新店开业:郭碧婷向佐招待,李连杰父女C位,马伊琍送花篮!

古希腊掌管月桂的神
2024-04-30 19:36:22
74岁刘松仁哭到脸通红情绪失控!登台致谢口齿不清,旁人全程搀扶

74岁刘松仁哭到脸通红情绪失控!登台致谢口齿不清,旁人全程搀扶

柠檬有娱乐
2024-04-30 11:40:51
2024-04-30 21:34:44
科技趣玩
科技趣玩
每天给你最喜欢的内容
46文章数 76629关注度
往期回顾 全部

科技要闻

华为一季度营收1784.5亿 净利196.5亿

头条要闻

博主称买到常州机场的无主行李箱 还坚称"绝不是剧本"

头条要闻

博主称买到常州机场的无主行李箱 还坚称"绝不是剧本"

体育要闻

穆雷,绝杀了一个时代

娱乐要闻

黄子韬被曝求婚徐艺洋 大量亲密照曝光

财经要闻

查道炯:中国经济的外部挑战与应对思考

汽车要闻

越野老炮最爱 哈弗新H9新增2.4T柴油机

态度原创

家居
艺术
旅游
本地
公开课

家居要闻

心之所栖 黑白灰色系打造设计专属感

艺术要闻

用耳朵看展览?西岸美术馆最新特展关注声音艺术

旅游要闻

五一大雨,浇灭了多少旅游城市的心气?

本地新闻

食味印象 | 潍坊:碳水脑袋的人间乐园

公开课

父亲年龄越大孩子越不聪明?

无障碍浏览 进入关怀版