svn搬移到gitlab及使用
svn是一款非常简便,易用的源代码管理工具,用了这么多年,对它情有独钟。都说习惯最难改,那为何要搬移到gitlab上呢? 喜欢尝试新东西,前提还是git比较强大,svn有的它都有,svn没有的它也有。
这次是把公司有7年历史的svn项目搬移到gitlab上,期间各种折腾,有几点原因:
1、第一次使用git。
2、gitlab托管到linux服务器上,对命令不熟悉。
3、跟着前人的路走,以为这样能少走弯路,结果方法没对,没搞懂原理就跟随。
4、svn服务器上很多历史版本已经损毁。
后来才知道以上问题跟转移库其实没多大关系,刚开始都想的复杂了,接触“新事物”还是需要不断尝试,成功之后总结的步骤:
1、安装工具:Git-1.9.0-preview20140217.exe、Git-1.7.0.2-preview20100309.exe
2、转换现有svn为git库(所谓的克隆),任何一台机器上都可以操作,只要能访问到svn库所在的服务器。
3、登录gitlab;创建项目库;拷贝项目库地址;切换到本地机器将本地克隆好的git库提交到gitlab上的项目库。
克隆SVN库命令,克隆成功整个任务就已经完成90%了
git svn clone svn_url --authors-file=c:\users.txt 库保存路径
svn_url:指定你的svn服务器地址, 如:http://×.×.×.×:88/svn/trd/trd_work/Carpa.NET
库路径 : 如:D:\gitclone\CarpaNET(指定克隆库保存路径)
users.txt:存储svn账号与gitlab上账号的关联性,如下:
VisualSVN Server = wssf2014<zqhym***@gmail.com> yqdong = yqdong<×××@163.com> user11 = yqdong<×××@163.com> yyong = yyong<×××@gmail.com> msfei = mashifei<×××fei@foxmail.com>............ 格式: svn用户名 = git用户名<git用户对应的邮箱帐号>
通过svn里面的log工具,可以找出svn项目里面所有的提交者,完成上面的user.txt(必须步骤,应该有命令),点击下图的“Show All”之后,按Author排序,就可以很方便的找出所有的提交者,然后做关联。

注意:凡是执行了一次git svn clone命令,不管成功失败,第二次执行该命令前,请删除前一条命令中指定的库路径(避免重复,只要库路径不相同就可以)
如果以上克隆没有遇到问题,那恭喜你已经成功了,不需要进行下一步。
下一步:
问题在于svn_url对应的服务器本身,服务器有6w多条日志,其中部分日志已经损坏,导致整个克隆失败,而一次克隆命令至少要执行一个小时,上面有7年的log日志,是很宝贵的东西,因此无论如何也要想办法把它们抓出来。其实就是想删除1-6w条日志中部分有问题的日志,这样clone时候就不会出现中断的情况,这个方法亲自尝试过,非常之麻烦,不提倡这种做法,google半天没有找到别人的经验,这事反复折腾了Two days.
后来发现git有合并功能,这下简单了,换了做法,不去纠结svn服务器的问题,只要git svn clone能执行就ok(毫无顾虑),其它事情就跟提交代码到git一样简单。
新步骤:
1、先克隆svn上1~5000版本号,存放到库1; git svn clone -r0:5000 svn_url --authors-file=c:\users.txt 库保存路径1(不能重复)
2、克隆svn上5010~最新,存放到库2; git svn clone -r5010:HEAD svn_url --authors-file=c:\users.txt 库保存路径2(不能重复)
3、将库1提交到分支1
4、将库2提交到分支2
5、本地合并分支1、2,合并分支的时候必然会有冲突,而且冲突不少,全部处理就行了,都是历史记录没什么影响。
这样做就跳过了svn上某些版本导致无法克隆的问题,舍弃一小部分日志没影响,要顾全大局。
git库推送图解:

如果安装了工具,还是不能执行git svn clone命令,请乖乖设置环境变量吧!
1、gitlab上创建Group.

2、在group上创建project.

3、copy服务器创建的git项目地址:

4、进入本地库1所在路径,使用GitExtensions工具推送代码,同理操作库2、库3....

5、合并库1和库2分支,最后提交.

gitlab取代svn,势不可挡啊!!!看图!!!


svn搬移到gitlab及使用的更多相关文章
- 重构第2天:方法搬移(Move Method)
现在就重构来说是非常普通的,虽然我们经常会漏掉或忽略一些需要重构的地方.方法搬移,正如所定义的那样,把方法搬移到更适合他的位置.让我们看看下面这一段重构前的代码: 理解:方法搬移,正如所定义的那样,把 ...
- hdu3487 伸展树(区间搬移 区间旋转)
对于区间旋转使用lazy思想就能解决.然后对于区间搬移,先把a-1结点做根,b+1作为它的右孩子,这样ch[ch[root][1]][0]就是区间[a,b],现将他取出. 然后在将当前的树伸展,把c结 ...
- poj3580 伸展树(区间翻转 区间搬移 删除结点 加入结点 成段更新)
好题.我做了很久,学了大牛们的区间搬移.主要的代码都有注释. #include<cstdio> #include<cstring> #include<iostream&g ...
- 【Java重构系列】重构31式之搬移方法
重构第二式:搬移方法 (Refactoring 2: Move Method) 毋容置疑,搬移方法(Move Method)应该是最常用的重构手段之一,正因为太常用而且较为简单,以至于很多人并不认为它 ...
- 代码从stepping stone搬移到内存
为什么要搬移代码?如何搬移代码?arm启动流程回顾:2440:这里我们分析的是从nand flash 启动.2440的启动主要依赖于一个部件(SRAM),又名stepping stone.它的地址为0 ...
- 重构改善既有代码设计--重构手法11:Move Field (搬移字段)
你的程序中,某个字段被其所驻类之外的另一个类更多的用到.在目标类建立一个新字段,修改源字段的所有用户,令它们改用新字段. 动机:在类之间移动状态和行为,是重构过程中必不可少的措施.随着系 ...
- 重构改善既有代码设计--重构手法10:Move Method (搬移函数)
你的程序中,有个函数与其所驻类之外的另一个类进行更多的交流:调用后者,或被后者调用.在该函数最常用引用的类中建立一个有着类似行为的新函数.将旧函数编程一个单纯的委托函数,或是将旧函数完全移除. 动机: ...
- Part9---代码搬移不可少
1.回顾ARM启动流程就可知道需要执行代码搬移 2.代码搬移 1)起点:NAND FLASH,今天的起点是SRAM垫脚石.为什么?因为我们要从nandflash取搬移数据需要先对其进行初始化,二而我们 ...
- uboot搬移部分和重定位部分的代码分析
来看一下搬移部分和重定位部分的代码: relocate: /* 把U-BOOT重新定位到RAM*/ //r0=0; adr r0, _start /* r0是代码的当前位置*/ ld ...
随机推荐
- HTML5学习总结-09 拖放和手机触屏事件
一 拖放 拖放(Drag 和 drop)是 HTML5 标准的组成部分.拖放是一种常见的特性,即抓取对象以后拖到另一个位置.在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 课程参考 ht ...
- 增量式PID简单翻板角度控制
1.研究背景 随着电子技术.信息技术和自动控制理论技术的完善与发展,近来微型处理器在控制方面的应用也越来越多.随之逐渐渗透到我们生活的各个领域.如导弹导航装置,飞机上仪表的控制,网络通讯与数据传输,工 ...
- Objective-C复合
正所谓复合,便是定义的这个类中的成员是另外类的实例方法. 也就是把其他对象作为自身的题部分,以提升自身的功能, 就相当于C语言中的函数嵌套.下面是一段代码(多个文件放在一块了): /***Comput ...
- Java单例模式——并非看起来那么简单
版权声明:本文为[viclee]原创,如需转载请注明出处~ Java中单例(Singleton)模式是一种广泛使用的设计模式.单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在.一些管理 ...
- 批处理学习:for语句详解【经典】
大纲 一 前言 二 for语句的基本用法 三 for /f (delims.tokens.skip.eol.userbackq.变量延迟) 四 for /r (递归遍历) 五 for /d (遍历目录 ...
- Curl http_code 状态码 意义及信息
shell命令:curl -I -m 10 -o /dev/null -s -w %{http_code} http://test.com curl_init — 初始化一个curl会话curl_co ...
- 第5章 jQuery对表单、表格的操作及更多应用
本章主要是对前面4章的小结和应用. 一. 表单form应用 表单分为3个组成部分 (1)form标签 表单可包含文本域,复选框,单选按钮等等.表单用于向指定的 URL 传递用户数据. (2)表单域 - ...
- Cache-Aside Pattern解析
使用这种模式,可以帮助我们维护Cache中的数据. 使用Cache容易遇到的问题: 使用缓存,主要是为了将一些重复访问的数据存到缓存,开发者希望缓存中的数据和数据源中的保持一致,这就需要程序中有相应的 ...
- AspNet Identity and IoC Container Registration
https://github.com/trailmax/IoCIdentitySample TL;DR: Registration code for Autofac, for SimpleInject ...
- [webgrid] – selecterow - (Get Selected Row from ASP.NET MVC 3 WebGrid)
Get Selected Row from ASP.NET MVC 3 WebGrid Abstract: The following article demonstrates how to get ...