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的主分支保持一致,所以使用项目的.
在
gitlab 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.使用了gitlab
的URL
钩子来实现实时同步推送.如果不使用gitlab
,可能需要自己实现一个触发器才行.
(其实笔者的操作也属于野路子,该钩子其实主要用于CI/DI
中)
5.转载
本文遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。