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

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中心库,到此算是完成一次冲突解决。

时间: 2024-08-01 10:42:37

git-svn — 让git和svn协同工作的相关文章

梳理版本控制器:SVN和Git比较

在日常运维工作中,经常会用到版本控制系统,目前用到最广泛的版本控制器就是SVN和Git,那么这两者之间有什么不同之处呢?今天在此详细记录下: SVN(Subversion)是集中式管理的版本控制器,而Git是分布式管理的版本控制器!这是两者之间最核心的区别. Git不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等.如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应Git提供的一些概念和特征. 先来说说集中式版本控制系统: 版本库是集中存放在中央服务器的,而干

版本控制之svn和git简述

参考: Pro git Svn book 1.6 TortoiseSVN-1.8.7-zh_CN 在一个团队的工作中,掌握版本控制系统的使用是对每一个工程师最基本的要求,作为刚入职的菜鸟我来说,更是需要快速掌握的,下面就简单记录一下svn以及git版本控制的基础知识. 1. 版本控制的概念 版本控制(Version Control)的含义就是通过某种方式来记录版本库中文件的内容变化,以达到管理和维护版本的开发.其实,我们在学习编程的时候就一直在使用版本控制的理念.例如,在学习C语言的时候,我们会

SVN和git孰优孰劣

SVN 的主要功能 SVN属于集中化的版本控制系统,有个不太精确的比喻:SVN = 版本控制+ 备份服务器 SVN使用起来有点像是档案仓库的感觉,支持并行读写文件,支持代码的版本化管理,功能包括取出.导入.更新.分支.改名.还原.合并等.      功能有许多我就不一一列了,SVN大都采用图形界面操作,直观,上手快. Git的主要功能 Git是一个分布式版本控制系统,操作命令包括:clone,pull,push,branch ,merge ,push,rebase,Git擅长的是程序代码的版本化

史上最全: svn与git的对照(二):svn与git的相关概念

如图1是svnserver端数据的文件夹结构 以下是gitserver端的文件夹结构 纵观svn和git服务端的文件夹结构我们非常easy发现 1.有些目录还是蛮像的.甚至是一样的比方说svn中的conf,hooks等git中也有,svn中的db类似与git中的objects. 2.git中的内容好像是比svn中.主要是多了head文件,branches,refs等 以下我们就具体来看一下这些目录或文件的作用 先说同样的 1.conf意思非常easy理解.configure,配置文件,里面的文件

命令行操作svn和git和git

前几天在写代码的时候电脑突然坏掉,老大交代的任务没完成,非常痛恨自己用svn或者git保存代码,相信很多程序员遇到过,硬盘坏掉,存在硬盘中的代码丢失,无法找回的问题,svn和git可谓程序员界的福音,那么问题来了,什么是svn和git呢? svn和git其实都是一种用来管理项目的控制版本工具,他们有很多好处,比如 1.防止代码丢失----可以把自己的代码上传到服务器上 2.适合多人开发----合并代码超级简单 3.能够进行版本回退 4.能解决冲突和bug 5.可以做分支 6.责任到人----可以

源代码管理工具Svn和Git

一.源代码管理工具诞生的原因: 1.无法后悔:做错了一个操作后,没有后悔药可以吃: 注解:在用Xcode编程的时候,我们做了一个代码修改,忽然Xcode崩了,或者是不小心关掉了.那么刚才所写的好代码就丢失了,即使Command+Z也无法后退 2.版本备份:费空间.费时间: 如果我们为了防止写完一个模块或者一个功能的代码后Xcode因不小心关闭而丢失代码,就去做版本备份,那写完一个项目,岂不是备份了成百上千份?耗时耗空间! 3.版本混乱:因版本备份过多造成混乱,难于找回正确的想要的版本: 备份过多

【实习记】2014-08-25版本管理svn与git学习对比+看书UNIX网络编程

git也算中等熟练了,对其哲学也明白.但是svn一直半桶水. 上网搜索了几篇svn的好文,做一下总结: <svn分支开发与主干合并(branch & merge) >http://blog.csdn.net/bbirdsky/article/details/24620155 TortoiseSVN图形操作,适合初学者. <SVN中Branch的创建与合并>http://www.cnblogs.com/huang0925/p/3254243.html命令行的svn,适合真正要

初识SVN与GIT代码上传

最近开始进行多人项目,但是从来没有做过多人项目,所以Google了一下多人项目需要的一些注意事项 首先 第一点:在多人开发项目时候要在自己建立的类,在建立类的时候要在前缀加上自己的标识符用来区分类名,避免冲突 第二点:在书写代码时,两个开发者不要在同一个类中同时写一个类方法内容,这样在合并代码时会导致代码冲突,会引发很多问题 Git:git是一种分散式的代码上传方式,每个人在自己的电脑上都有一个完整的本地仓库,从网络仓库上克隆下来的都是完整的仓库,每个人都能看到整个项目的完整代码,当服务器宕机或

SVN和git的使用(附github的简单玩法)

今天简单的总结了下SVN和git的使用,也尝试了下github,应该好好提高下自己的英文水平了,梦想有一天不再使用任何翻译软件. [svn]:集中式的代码管理工具(版本控制工具--版本记录) 1>合并代码:团队操作2>版本覆盖 冲突3>删除的历史版本再使用4>遇到问题时追查提交人,明确责任 [tortoiseSVN]1>官网2>验证安装成功 电脑的任意地方鼠标右键查看有没有软件选项 使用: 1>本地代码,提交到服务器commit提交 2>从服务器把代码拉下来

本地如何将svn和git管理的代码做关联

svn和git都是广为流传的代码版本管理工具,实际项目中往往会将两者结合使用,那么如何将本地的一份代码和两者做有机的关联呢! 前提假设:项目已经在开发阶段中,此时变更了svn代码库的地址:或者是组里来的新人,需要你帮忙配置环境,你怎么搞? 我的实践流程如下:(ps:不一定是最优操作和最优方案,问题是可以解决的) 1.在本地workspace目录下,svn co 'svn路径'; 2.进入checkout的项目根目录下,执行git init命令,初始化git(会在根目录下生成.git文件夹); 3