美文网首页
git svn协同工作

git svn协同工作

作者: 苏格拉第 | 来源:发表于2017-08-26 11:52 被阅读71次

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

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

相关文章

  • git svn协同工作

    svn作为一个优秀源码版本的管理工具,可以适合绝大多数项目。但是因为它的采用中心化管理,不可避免的存在本地代码的备...

  • git 最常用操作

    学习Git 的目的 在开发过程中,需要借助SVN 工具来多人协同工作。 在 github 拉取别人的代码有利于工作...

  • Git的使用以及GitHub的配置

    Git是一款分布式版本控制系统,有别于SVN集中式版本管理控制系统,Git可以让团队更加高效的协同工作,提高工作效...

  • IDEA中常见的git操作

    不知不觉,svn已经退居历史,git闪亮登场。现在的项目多人协同开发,首选git,开发工具idea用的比较多,所以...

  • (超详细、超简单)Git项目部署及项目更新

    GIT和SVN的区别 GIT是一种分布式源码管理工具(每个人的电脑都是一个完整的版本库,当多人协同工作时,比如A修...

  • Git与SVN协同的工作——使用SourceTree管理SVN服

    相信很多使用过Git的人,都感叹过分布式代码管理的强大,吐槽SVN的种种不足。现在我们就来说一下,如何使用Git连...

  • 使用git管理svn项目

    git svn init http://xxxxxxx (svn co 的地址)git svn fetchgit ...

  • Android build.gradle 使用 Svn,Git

    Svn 读取Svn Revision Number 读取Svn日志 读取Svn Tag(不会) Git 读取Git...

  • SVN迁移Git

    参考:GIt - 迁移到Git 构建user.txt 关联svn用户和git用户。 用git svn导入svn库 ...

  • Git使用心得

    之前的项目一直在使用SVN管理项目代码,协同开发的场景较少,SVN也用着也还过得去。切到新项目后,都改为了Git管...

网友评论

      本文标题:git svn协同工作

      本文链接:https://www.haomeiwen.com/subject/yapmdxtx.html