想必大家现在都比较喜欢使用svn(subversion)完成代码管理了,因为它的开源,轻巧,易用。但是这样一个宝贝如果不知道其正确的用法,也会让我们百思不得其解,甚至耽误项目进度,浪费程序员的心血和结晶。
   下面就我们在外事项目中使用SVN的经验简单做个说明。
   如何正确提交代码?
   可能很多人用过微软的VISUAL SOURCESAFE 或者 Team Foundation Server,就认为那还不简单,checkout/checkin 不就完了吗。孰不知由于SVN采用了另一种源代码管理机制(merge模式),而微软采用的是传统的(lock/unlock)机制,由于机制不同,提交方式也不同。LOCK模式更适合小团队工作,谁修改,谁加锁,提交后解锁。MERGE模式却是谁都可以修改,而后提交时通过比较和合并解决分歧。所以,大家要按如下方式更新才能正确提交。
   常见情况是:假定项目名称是FAMS。
   (一) 用户张三CHECKOUT 了 FAMS的 revision 101,然后开始工作。
   (二)用户李四CHECKOUT 了 FAMS的 revision 101,然后开始工作。
   (三) 现在李四完成了工作,进行提交,SVN 版本号变为revision 102,一切OK.
   (四) 现在张三完成了工作,也要进行提交,由于其工作的基础版本(workingbase)是revision 101,这时SVN会提示版本已过期,需要先更新(svn-update).但这时真正的问题就来了:
    注意SVN的机制是提交时合并,如果它发现服务器上文件版本比本地文件版本新,它会自动把服务器上的文件更新到本地,如果这个文件李四从未改过,一切OK,更新就可以了。
                                   svn尊重、重视新的版本

但是,如果李四也对此文件比如名字叫 fillform.java做了修改, 这又分三种情况:
     第一种情况:李四新增方法或内容,张三也是新增的内容,各不冲突,一切OK,SVN会自动合并。
     第二种情况:李四删除了部分代码,但服务器上此文件(张三提交的)此部分代码未动,而版本却比本地新,则SVN会自动把服务器上此文件内容合并到本地李四的版本中,注意啊:它把李四正确的删除工作给反复了,这就是SVN这种增量合并机制导致的最大问题。
    正确方法是: 首先拷贝此文件到另一个临时目录,比如D:\TEMP,然后SVN-UPDATE此文件,第三步拷贝此文件回来,由于此时工作基础版本已更新至revision101,则可以正常对比,修改。最后提交即可。
    第三种情况:如果SVN-UPDATE时发生了冲突(conflict),会产生三个文件:
    一个是.mine 本地版本,
    一个是.r101,你的工作基准版本,
    一个是.r102,服务器端的最新版本。
    则手工修改冲突,然后先SVN-resolved, 注意这是告诉SVN你已经解决了冲突。然后执行下一步SVN-COMMIT即提交,就可以把新代码更新上去了。
    怎么样?说的还够清楚吧?
    这时,有读者会问,一个文件这样可以,那整个项目怎么办呢?特别是我怎么知道哪些文件改了呢?别急,这个办法是有滴。
    一种方法是利用SVN-check FOR modification .
    另一种方法是利用 SVN-show log。 在弹出的项目版本列表上选择最新的版本(注意你的工作基础版本会用黑体列示出来)然后在右键菜单上选择 comparing working copy 就可以找到服务器上最新版本与你本地工作版本的所有不一致的文件了。然后对这些文件逐一处理,提交即可。

最后,一点提醒:注意你的代码全部提交后,一般是用SVN-CHECKOUT 重新下载一个新版本进行工作,这样能确保代码最新,而不是在原WORKING COPY上继续工作。

svn(subversion)代码管理的更多相关文章

  1. Visual SVN 企业版代码管理平台的建设

    通常需要完整的SVN的代码管理平台系统的搭建,需要安装三个文件,Visual SVN server  , TortoiseSVN, Visual SVN. Visual SVN server  企业版 ...

  2. Android Studio 配置SVN实现代码管理

    Refference From:http://iaiai.iteye.com/blog/2267346 一.Android Studio配置SVN Android Studio关联配置SVN很简单,在 ...

  3. [学习笔记]坚果云网盘,SVN异地代码管理

    SVN的好处不必多说了.但是如果希望有一份自己的用来学习和储备的代码仓库,那么能够异地同步是必不可少的了. 参考作者Mike_QSJ的文章,但是实际上做了很大的改动.一方面使用更常见的windows系 ...

  4. svn(subversion)代码版本管理在linux下的一些常见使用命令

    以下的操作都是默认你的服务器安装有svn的大前提下进行的. 一.创建版本库 我的版本库存放路径为: /var/svn : 下面我们来创建一个名为 svntet 的版本库    注释: svnadmin ...

  5. inteliJ IDEA使用SVN进行代码管理

    inteliJ 自带版本控制,所以不用像网上其他人说的那样,装第三方插件. 首先装完inteliJ 后,在File-->Setting-->Version Control中选择Subver ...

  6. IDEA下通过Git实现代码管理

    IDEA下通过Git实现代码管理 1.介绍 1.1 Git概述 Git是类似于SVN等代码管理软件,使用分布式技术实现.Github是互联网代码仓库,每个人可以在上面创建自己的仓库,使用git完成同g ...

  7. 代码管理 – SVN

    代码管理工具也用了不少年了,整理下. 管理工具比较 用过VSS,CVS,TFS,SVN还有一个微软内部使用的不记得什么名字了.这里进行一些简单比较,重点介绍SVN的用法. CVS历史悠久,1986年就 ...

  8. 在Windows Server 2008上部署SVN代码管理总结

    这段时间在公司开发Flex程序,所以使用TortoiseSVN作为团队代码管理器,今天在公司服务器上部署SVN服务器,并实验成功,总结如下: 服务器环境: 操作系统:Windows Server 20 ...

  9. 产品研发管理(二):使用SubVersion进行代码管理

    概述 这是产品研发管理系列文章的第二篇:使用SubVersion进行代码管理. 介绍如何使用SubVersion的资料已经许多,这里不准备介绍如何使用SubVersion. 这篇文章主要介绍如何进行代 ...

随机推荐

  1. BGP中IBGP和EBGP的区别和联系

    我们知道,在自治系统内部使用IGP路由协议:而在不同自治系统之间使用BGP路由协议(严格来讲,BGP不是路由协议).BGP产生的原因是为了在不同自治系统(AS)之间进行路由转发,而其中又提出了EBGP ...

  2. python 3389爆破机

    前言: = =上学后的第一个星期假期,写了个3389爆破器 - 0x01 准备: hydra 钟馗之眼API 0x02代码: import optparse import os import requ ...

  3. 常见的HTTP Header

    文件信息: Content-Type: application/x-javascript Content-Length: 2000 Content-Type:指定请求和响应的内容类型,如果未指定即为t ...

  4. Rhythmk 一步一步学 JAVA (12) Spring-1 之入门

    (一)简单对象Spring  XML配置说明 使用Spring (Spring 3.0) 实现最简单的类映射以及引用,属性赋值: 1.1.新建类UserModel: package com.sprin ...

  5. mysql 挑选列导入

    insert into boleht_development.`htprojects`(id,pname,`general`,imgsrc,whatwedo,howwedo,bp) select ci ...

  6. Delphi 三层框架开发 服务端开发

    采用Delphi7+SQL2008 一.创建数据库和表 CREATE TABLE [dbo].[tb_Department]( [FKey] [uniqueidentifier] NOT NULL, ...

  7. aop编程术语

  8. ios-loadView

      // 先判断当前控制器是不是从storyBoard中加载,如果是,就会加载stroyBoard的view //   判断是否是xib加载 // 否则创建一个空白的view // 如果重写了此方法, ...

  9. Java基础知识常识总结

    Java基础知识常识总结 1.面向对象的特征以及对他的理解? 封装,继承,多态,如果再增加一条就是抽象. 2.Object有几种方法,分别是什么? 在JDK1.5中的11种方法,分别有: toStri ...

  10. ActiveMQ 使用文档

    一.为什么使用ActiveMQ 在总线的设计中可能会使用到JMS(Java Message Service)通道, Java消息服务(JMS)超越了生产商专有的MOM(Message-Oriented ...