svn(subversion)代码管理

想必大家现在都比较喜欢使用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上继续工作。

时间: 2024-11-17 19:24:37

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

Android Studio 配置SVN 及 代码管理

转自:http://www.it165.net/pro/html/201508/51801.html 一.Android Studio配置SVN Android Studio关联配置SVN很简单,在Settings里面,找到Version Control->Subversion:在这个页面的控制面板中的General中将Use command line client打勾勾选上,然后浏览本地的SVN安装目录,选到"svn.exe"即可: 在Use command line clie

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

SVN的好处不必多说了.但是如果希望有一份自己的用来学习和储备的代码仓库,那么能够异地同步是必不可少的了. 参考作者Mike_QSJ的文章,但是实际上做了很大的改动.一方面使用更常见的windows系统环境,另一方面,直接使用TortoiseSVN的本地仓库做云端同步会经常出现错误,因此引入了SVN server做仓库. 关于云盘,只要是同步逻辑与坚果云类似,即[本地盘1文件夹]-同步-[云]-同步-[本地盘2文件夹]的即可. 0.整体逻辑: 1.首先安装坚果云https://www.jiang

inteliJ IDEA使用SVN进行代码管理

inteliJ 自带版本控制,所以不用像网上其他人说的那样,装第三方插件. 首先装完inteliJ 后,在File-->Setting-->Version Control中选择Subversion 把图中那几个地方的勾都勾掉,这样就不会在控制台报说找不到svn了. 接下来就是在SVN库中checkout项目文件了,如图 在弹出的窗口中,输入项目的SVN路径,输入用户名密码,就可以了 下图为subversion中比较的效果图

[学习笔记]坚果云+SVN异地代码管理

流程示意 1.下载坚果云:https://www.jianguoyun.com/选择各自适应的版本,下文使用的是Mac OSX,Windows类似 2.创建自动同步文件夹 同步完成后会得到如下的文件夹 3.SVN进场,MAC OSX下采用的是Cornerstone,Windows下面就使用TortoiseSVN 安装完成后打开Cornerstone,如下图 3.1添加代码仓库(就是坚果云同步下来的workspace) 3.2选择workspace 3.3Nickname(昵称)可以不填 3.4检

高效代码管理--本地svn环境搭建

工作中一直使用svn做代码管理,平时自己在家写代码基本没有什么管理,顶多每隔一段时间或者每次大修改前做个备份,也就是复制.粘贴,然后文件名加个时间戳,这种方式与版本管理工具比,基本可以用简单.粗放.低级.笨拙来形容.由于我的印象里一直觉得搭建svn服务器是件很复杂的事,可能要写一堆配置和命令,感觉单机个人搞开发,这么干似乎有点得不偿失.直到最近在写程序时,某个功能模块实现的始终不是很满意,尝试了好几种方案,转了一圈发现还是第一种方案靠谱,但是第一种方案所写的代码还没有备份就已经手贱的删干净了,只

最近项目中代码管理学习

之前项目用的都是SVN进行代码管理的,最新的两个项目開始用git了.非常早之前就開始接触git.可是一直没有正规的使用过,所以对git的命令并非非常熟悉,基本上的命令都是使用诸如clone.checkout.add.commit之类的命令.没有使用过创建分支(branch)和打tag之类的操作.眼下项目中常常出现一种情况:项目開始的时候我们都在master分支上开发,然后等到一个阶段完毕之后我们会公布这个版本号,然后再创建一个develop分支.接着在develop分支上开发,然后对master

2、IDEA下Git做代码管理

2.IDEA下Git做代码管理 1.介绍 1.1 Git概述 Git是类似于SVN等代码管理软件,使用分布式技术实现.Github是互联网代码仓库,每个人可以在上面创建自己的仓库,使用git完成同github仓库的代码同步等管理工作. IntelliJ idea->Git: 使用 Git->GitHub: 同步资源 1.2 Git逻辑架构 git架构上分为远程仓库.本地仓库和工作空间.远程仓库就是位于GitHub上的仓库,本地仓库是为用户本机的仓库目录,工作空间是用户开发所处的目录.三者关系与

IDEA下通过Git实现代码管理

IDEA下通过Git实现代码管理 1.介绍 1.1 Git概述 Git是类似于SVN等代码管理软件,使用分布式技术实现.Github是互联网代码仓库,每个人可以在上面创建自己的仓库,使用git完成同github仓库的代码同步等管理工作. IntelliJ idea->Git: 使用 Git->GitHub: 同步资源 1.2 Git逻辑架构 git架构上分为远程仓库.本地仓库和工作空间.远程仓库就是位于GitHub上的仓库,本地仓库是为用户本机的仓库目录,工作空间是用户开发所处的目录.三者关系

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

概述 这是产品研发管理系列文章的第二篇:使用SubVersion进行代码管理. 介绍怎样使用SubVersion的资料已经很多,这里不准备介绍怎样使用SubVersion.这篇文章主要介绍怎样进行代码版本管理. 使用SubVersion进行代码管理 时间点(1) (1)的起始时间是3.0开发的开始. 在(1)期间,没有任何用户使用3.0(因为它还没有发布),所以所有开发人员直接在3.0Trunk上开发. (1)的结束时间是3.0开发的结束时间.结束时发布3.0产品,在SVN上创建3.0 Tag,