git-svn — 让git和svn协同工作

svn作为一个优秀源码版本的管理工具,可以适合绝大多数项目。但是因为它的采用中心化管理,不可避免的存在本地代码的备份和版本管理问题。也就是说对于尚未或暂无法提交到Subversion服务器的本地代码来说,存在着被误删除和版本更新无法回退两大情形。

git作为一个分布式版本管理工具,可以很好的解决这个问题。因为它的大多数操作是在本地进行的。这里要说的是git是如何做到既可以管理好本地代码又可以与已有的SVN中心库进行同步的。

支持去中心化,是Git与生俱来的特性,它在本地保留了从中心服务器clone出来的源码库的全部信息,这样,你在本地修改完代码后便可以直接提交到本地 的代码版本库中。本地代码的备份和版本管理的问题就这样被Git轻而一举的就解决了。而本地源码库与SVN中心源码库的同步操作则是由Git提供的 git-svn工具来完成的。

下面是一个git-svn的一般使用流程:
1、git-svn clone svn_repository
2、修改本地代码,使用git add/commit将修改提交到本地git库
3、定期使用git-svn rebase获取中心svn repository的更新
4、使用git-svn dcommit命令将本地git库的修改同步到中心svn库

  • 检出一个已存在svn repository(类似于svn checkout)

可以通过git-svn clone命令完成这个操作: git-svn clone svn_repository_url

一般情况下git svn clone这个操作会从第一个版本开始同步,如果版本号已经到了好几万(或更高?),这个操作会相当的费时。这时可以使用参数-r$REVNUMBER:HEAD检出指定版本后的代码。

因此,更好的步骤应该是这样:

svn info svn_repository_url, 记录最后的版本号,假设是260

假设要检出最后5个版本,做个简单的减法: 260 – 5 = 255

开始clone操作了:git-svn clone -r255:HEAD svn_repository_url

  • 从中心服务器的svn repository获取最新更新

这个操作可以通过”git-svn rebase”完成。注意这里用的是rebase,而不是update。update命令对于通过git-svn检出的svn repostory的git版本库是不可用的。

  • 查看提交历史日志

使用”git-svn log”,加上-v选项,还可以提供每次commit操作涉及的相关文件的详细信息。

  • 将本地代码同步到Svn服务器

完成这一操作需要通过”git-svn dcommit”命令。这个命令会将你在本地使用git commit提交到本地代码库的所有更改逐一提交到svn库中。加上-n选项,则该命令不会真正执行commit到svn的操作,而是会显示会有哪些本地 变动将被commit到svn服务器。git-svn dcommit似乎不能单独提交某个本地版本的修改,而是一次批量提交所有与svn中心版本库的差异。

  • 提交时的冲突解决:

如果你正在提交的文件在svn服务器上已经被别人改过,就会发生提交冲突。通常解决方法如下:

首先使用git-svn rebase获取svn服务器上的最新冲突文件,比如:conflict.c,这将导致与本地conflict.c冲突,不过此时svn版本信息已经添加到本地git库中(通过git log可以查看),git-svn rebase提示你在解决conflict.c的冲突后,运行git rebase –continue完成rebase操作

打开conflict.c,修改代码,解决冲突

执行git rebase –continue,git提示:You must edit all merge conflicts and then mark them as resolved using git add

执行git add conflict.c,告知git已完成冲突解决

再次执行git rebase –continue,提示”Applying: git xxx”,此时”git xxx”版本又一次成功加入本地版本库,可通过git log查看;

执行git-svn dcommit将conflict.c的改动同步到svn中心库,到此算是完成一次冲突解决。

转载于:https://www.cnblogs.com/djoel/p/5757674.html

git-svn — 让git和svn协同工作相关推荐

  1. GitHub与Git区别,Git与SVN区别,Git国内镜像下载

    GitHub 又称 GayHub,作为众多开源代码的汇集地,名副其实被誉为全球最大的同性交友社区.我们在这里上传和下载代码,GitHub进行远程托管,拥有代码管理权的人可以对版本和内容进行控制,极大的 ...

  2. 版本控制系统(SVN,Git)与项目托管平台(Github,Gitee,Coding)

    1.版本控制系统 版本控制系统(version control system)是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.版本控制系统不仅可以应用于软件源代码的文本文件,而且 ...

  3. 深圳软件测试培训:SVN与Git的差异

    深圳软件测试培训:SVN与Git的差异 1. Subversion属于集中式的版本控制系统 集中式的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到 ...

  4. 从svn到git开发转变

    前言:目前的公司的开发技术还是处于刀耕火种的年代,react,vue已经火到不行了,可是还在用jQuery一遍遍处理着dom.版本控制用的是svn,这里也不是说svn不好,在windows下svn的& ...

  5. 版本控制器:SVN和Git比较

    在日常运维工作中,经常会用到版本控制系统,目前用到最广泛的版本控制器就是SVN和Git,那么这两者之间有什么不同之处呢?今天在此详细记录下: SVN(Subversion)是集中式管理的版本控制器,而 ...

  6. SVN和Git对比梳理

    在日常运维工作中,经常会用到版本控制系统,目前用到最广泛的版本控制器就是SVN和Git,那么这两者之间有什么不同之处呢? SVN(Subversion)是集中式管理的版本控制器,而Git是分布式管理的 ...

  7. ubuntu搭建svn、git遇到的问题及解决办法

    不错的git笔记博客: http://www.cnblogs.com/wanqieddy/category/406859.html http://blog.csdn.net/zxncvb/articl ...

  8. SVN、Git设置提交时忽略的文件

    个人正在使用的:global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.pyc *.pyo [Tt]humbs.db [Bb]in [ ...

  9. 命令行操作svn和git和git

    前几天在写代码的时候电脑突然坏掉,老大交代的任务没完成,非常痛恨自己用svn或者git保存代码,相信很多程序员遇到过,硬盘坏掉,存在硬盘中的代码丢失,无法找回的问题,svn和git可谓程序员界的福音, ...

  10. SVN和Git的比较

    最近开始学Git,跟以前常用的SVN来做个对比,以便对双方的优缺点了解更多些. 其实Git和SVN还是挺像的,都有提交,合并等操作,看来这是源码管理工具的基本操作. 1. Git是分布式的,SVN是集 ...

最新文章

  1. 读自动驾驶激光雷达物体检测技术(Lidar Obstacle Detection)(3):Segmentation
  2. 如何破解root以及grub密码
  3. python 多进程管道 消息式通信
  4. 小码哥iOS学习笔记第八天: block的底层结构
  5. 各种排序总结(一)直接插入排序
  6. Web安全实践(13)嗅探,arp欺骗,会话劫持与重放攻击(上)
  7. 重启openstack服务_如何“ Kubernetize” OpenStack服务
  8. 2000以内!一加Nord 2渲染图曝光:搭载联发科天玑1200
  9. 计算机院校考研非歧视,2021考研昌吉学院学科教学(语文)045103调剂信息
  10. sql limit 子句_SQL Order by子句概述
  11. 前端相关书籍(转摘)
  12. 惠普打印机换硒鼓图解_惠普打印机墨盒更换步骤
  13. 影视剪辑,视频剪辑的万能剪辑技巧来啦,剪辑技巧合集
  14. 管理员界面html,12套超酷的后台管理员界面网站模板
  15. Java 上传附件后端接口大体流程和逻辑
  16. 怎么判断日出时间早晚_怎样知道当地每天几点日出?
  17. Linux磁盘分区的详细步骤(图解linux分区命令使用方法)
  18. 城 市 名 经 度 纬 度
  19. Gatsby 学习 - 03 Gatsby 插件
  20. 合数 java_java问题:素数,合数,其它

热门文章

  1. Requests库实战(一)---网页采集器
  2. python tkinter控件_Python3 tkinter基础 Label pack 设置控件在窗体中的位置
  3. unity webgl读写txt文件_python Files文件读写操作
  4. php中上传图片怎么显示出来,PHP上传图片类显示缩略图功能
  5. python刷题_11.学习Python,刷题才能让你感受到快(差)乐(距)!
  6. Facebook开源 C++11 组件库,真香!
  7. C语言项目:绽放的玫瑰花
  8. 塞尔达盾反机器人_微软商店惊现《塞尔达传说:旷野之息》!任天堂暗示《喷射战士3》?| Jump简报...
  9. oracle把多行合并成字符串,怎样将Oracle多行转换成字符串?
  10. 4 指针运算_C++用指针访问数组元素(学习笔记:第6章 08)