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进行同步相关推荐

  1. git 进阶系列教程-------git使用流程

    GIT使用流程 前言 初衷 git是一门很容易入门的项目管理工具,但是它是一门很难精通的技术. git pull/git add ./git commit -m "message" ...

  2. svn使用教程_苹果svn使用教程

    我想首先你需要明白一个问题,SVN服务器端是存储了所有的历史版本,而不仅仅是最新版本,所以你可以更新到其中任何一个版本的状态.svn的更新,是将库里的最新. . SVN版本控制器安装一个SVN,我装的 ...

  3. SVN 入门教程 图文教程 (对刚进公司的新人很有帮助) (帮助快速熟练使用公司的SVN版本控制工具)

    SVN 入门教程 1.安装SVN 1.1安装完成后,在电脑中新建一个文件夹,用来存放clone下来的代码. 如果你右键出现如上的图标,就说明你SVN安装成功了! 1.2 使用checkout下载项目 ...

  4. Cannot find command ‘git‘ - do you have ‘git‘ installed and in your PATH?

    命令提示符下安装"git": D:\PycharmProjects\pythonProject\venv\Scripts>pip install -q git+https:/ ...

  5. 将现有Git存储库推送到SVN

    我一直在用Git完成所有工作并推送到GitHub. 我对软件和网站都非常满意,我不想在此时改变我的工作方式. 我的博士生顾问要求所有学生将他们的工作保存在大学托管的SVN存储库中. 我已经找到大量关于 ...

  6. SVN迁移到Git的过程(+ 一些技巧)

    SVN迁移到Git的过程(+ 一些技巧) 李顺利 Key Words SVN,Git,Clone,Conversion,Tips,VCS,Pro Git 关于在VCS中SVN和Git之间的迁移(Clo ...

  7. 代码管理之SVN服务器及Git的创建与使用

    ---恢复内容开始--- SVN和Git的都是用于项目配置项管理的工具,区别很大,各有千秋.但他们之间的区别并非今天我要谈论的重点,因为这些有很多成熟的文章博客介绍.所以今天我主要是介绍一些SVN和G ...

  8. svn 迁移到 git 仓库并保留 commit 历史记录

    1.svn 转换为 git(会提示,让你输入先前 svn 的账号与密码) # 切换至 本地项目目录 cd /Users/jianbao/PhpStormProjects/fiisoo/# 克隆 svn ...

  9. 使用subgit进行svn迁移至git(branch,tags)

    前言: 最近公司需要将整体项目从svn迁移至gitlab上,经过几天的研究,现记录一下流程 整体思路是进行一次导入: 先通过subgit将svn整个import至本地,在与git上的项目进行合并. 1 ...

  10. git - svn 平滑到 git

    1. 建立自己的git仓库,需要是空git仓库 2. checkout 你的 git仓库 3. svn忽略.git文件,忽略.git  .gitignore 4. 把 .git文件拷到你的 svn仓库 ...

最新文章

  1. 2013年度10大Android应用
  2. 我的『MVP.Blazor』快速创建与部署
  3. ArcGIS实验教程——实验三十八:基于ArcGIS的等高线、山体阴影、山顶点提取案例教程
  4. 代码 优化 指南 实践
  5. AE合成自动智能剪裁脚本:Auto Crop for Mac
  6. Java字符串基本认识
  7. 14年,50%市场份额,一家中国公司何以在丹麦成功?
  8. java.sql.preparedstatement的应用
  9. Log4j2 高危漏洞分析
  10. iphone mac地址是否随机_iPad 的 Mac 地址是否会随机更换,如何关闭呢
  11. 配置安装跟踪服务器Tracker 配置FastDFS存储服务器 Storage
  12. 两个指定顶点之间最短路问题Lingo解法
  13. Excel如何将中文快速翻译?
  14. 百度在北京和深圳主攻腾讯 新浪等一些IM公司,大力挖人,甚至爆出15w-20w年薪,有人士对百度的行为做出以下分析:
  15. OpenCV4 快速入门 (学习笔记 全)
  16. 关于office2016 程序停止运行。。。的问题
  17. 前端MUI+H5+HBuilderX开发APP(IOS,android),后台Springboot,java学习与实践文章,更新中(二)
  18. 《权力的游戏》剧情解析全靠它!
  19. [TJOI2017]可乐(矩阵快速幂)
  20. ESP8266制作天气预报海藻球微景观生态缸记录(二)-人体感应开关灯实现

热门文章

  1. 厉害了网页扫码,所有方法都给你总结到这了,赶紧收藏
  2. 威纶通触摸屏制作自定义弹出窗口的具体方法(3种)
  3. 【5步解决】打开Word 2016时出现MathType has detected an error in AutoExecCls.Main 以及 文件未找到:MathPage.WILL.亲测完美方案
  4. tomcat历史版本新特性_Tomcat介绍(三)完结,即将进入正文
  5. java读取配置文件路径问题
  6. EPS数据导入CASS中
  7. 编译原理第三版名词解释和简单
  8. 现代操作系统 第三章 内存管理 习题
  9. matlab 振动,振动系统固有特性的matlab计算
  10. 微信打飞机思路总结 蓝懿教育