Gitlab2SVN实现思路

Gitlab&SVN

Posted by MistRay on August 19, 2019

git2svn

create by MistRay.

1.需求上下文

适用于希望把版本控制迁移到git上,但由于各种不可抗力无法完全舍弃svn的用户. 在不变动原有svn部署,集成,相关脚本的情况下,无痛迁移git.

2.所需依赖

在与git的交互上使用了expect,同时也需要git&svn客户端

linux用户可以使用yum下载
macOS用户可以使用brew进行下载
windows用户可以使用...我没有使用到windows,应该可以去官网下载

3.实现思路

1.使用命令导出svn项目到git.

# 导出仓库到git(不损失原有提交记录)
git svn clone svn项目地址
# 将项目上传至gitlab仓库.
git remote add origin gitlab项目地址
git push origin master

2.使用gitlab钩子实现根据push事件钩子自动发送http请求,同步代码到svn.
所以我们需要使git的master分支与svn的主分支保持一致,所以使用项目的. hookgitlab 10.6 版本以后为了安全,不允许向本地网络发送webhook请求,如果想向本地网络发送webhook请求,则需要使用管理员帐号登录. 在settings标签中找到OutBound Request,勾选上Allow requests to the local network from hooks and services,保存更改即可解决问题.

3.搭建http服务器接收钩子请求.
由于笔者的技术栈中java为第一语言,推荐通过SpringBoot快速构建一个稳定的web服务.

4.同步git修改到svn

# 拉取最新提交代码
git pull origin
# 将代码提交到svn上
git svn dcommit

4.总结

1.主要使用的特性为,git svn命令,该命令可以操作svn并将项目同时并入git&svn控制.
2.使用了gitlabURL钩子来实现实时同步推送.如果不使用gitlab,可能需要自己实现一个触发器才行.
(其实笔者的操作也属于野路子,该钩子其实主要用于CI/DI中)

5.转载

本文遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。