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 版权协议,转载请附上原文出处链接和本声明。