SVN全称Subversion,是一个开放源代码的版本控制系统,Subversion 在 2000 年由 CollabNet Inc 开发,现在发展成为 Apache 软件基金会的一个项目,同样是一个丰富的开发者和用户社区的一部分。
SVN是一个开放源代码的版本控制系统,管理着随时间改变的数据。这些数据放置在一个中央资料档案库(repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。
二、主要作用
1.目录版本控制
Subversion 实现了一个 “虚拟” 的版本控管文件系统, 能够依时间跟踪整个目录的变动。 目录和文件都能进行版本控制。
2.真实的版本历史
Subversion中,可以增加(add)、删除(delete)、复制(copy)和重命名(rename),无论是文件还是目录。所有的新加的文件都从一个新的、干净的版本开始。
3.自动提交
一个提交动作,不是全部更新到了档案库中,就是完全不更新。这允许开发人员以逻辑区间建立并提交变动,以防止当部分提交成功时出现的问题。
三、工作流程
1、从服务器下载项目组最新代码。(Checkout)
2、如果已经Checkout并且有人已Commit了代码,你可以更新以获得最新代码。(Update)
3、进入自己的分支,进行工作,每隔一个小时向服务器自己的分支提交一次代码(很多人都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了)。(Commit)
4、下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。(Commit)
注意:如果两个程序员同时修改了同一个文件, SVN可以合并这两个程序员的改动,实际上SVN管理源代码是以行为单位的,就是说两个程序员只要不是修改了同一行程序,SVN都会自动合并两种修改。如果是同一行,SVN会提示文件Confict, 冲突,需要手动确认。
四、注意事项
1. 提交之前必须更新,因为在你提交之前你并不知道别人是否对你提交的文件已经做了修改。需要将文件更新到最新状态,才可以修改。当完成了一个小功能,自己反复检测无误后,谨慎提交。如果在在修改期间别人也更改了SVN的对应文件,那么commit就可能会失败。如果别人和自己更改的是同一个文件,那么update时会自动进行合并,如果修改的是同一行,那么合并时会产生冲突,这种情况就需要同之前的开发人员联系,协商解决冲突,解决冲突后,两人一起测试确保冲突完美解决并不影响程序的其它功能。在更新时注意所更新文件的列表,如果提交过程中产生了更新。则也是需要重新编译并且完成自己的一些必要测试,再进行提交。这样既能了解别人修改了哪些文件,同时也能避免SVN合并错误导致代码有错。
2. 提交时注意不要提交本地自动生成的文件,一般配置管理员都会将项目中一些自动生成的文件或者与本地配置环境有关的文件屏蔽提交(例如eclipse中的.classpath文件等)。如果项目中没有进行这方面的配置来强行禁止提交这样的文件,请自觉不要提交这样的文件。提交了这样的文件后,别人在更新后就可能与本地的环境冲突从而影响大家的工作。
3. 提交时必须填写日志,团队开发中一个文件可能被多个人操作,如果每个人提交的时候不记录本次需要提交的内容,可能会造成以后该文件出错时,无法及时定位到哪一次提交时出现了问题,而且对以后的bug回顾也不方便。所以写日志的时候要把修改了哪些地方,哪些地方还有偏差,及接下来怎么去解决偏差记录下来。
4. 提前协调好项目组成员的工作计划。项目经理合理分配了工作计划后,每个成员在准备开始进行某项功能的修改之前,如果有可能,先跟工作小组的成员谈谈自己的修改计划,让大家都能了解你的想法,了解你即将对软件作出的修改,这样能尽可能的减少在开发过程中可能出现的冲突,提高开发效率。同时你也能够在和成员的交流中发现自己之前设计的不足,完善你的设计。
5. 提交只提交自己修改的文件,不需要提交的千万别选。提交之前检查是否需要提交的文件。反复查看确保正确后勤更新亲提交。
6. 慎用锁定功能 。在项目中要慎用锁定的功能,在你锁定了一个文件之后别人就无法继续修改提交该文件,虽然可以减少冲突的发生率,但是可能会影响项目组中其他人员的工作。平时只有在编辑那些无法合并的文件(例如图片文件,flash文件等)时,才适当的采用锁定操作。
7. 对SVN的操作,一般不建议直接右击项目---team---更新/提交;建议统一在资源库中进行更新、添加、提交等一系列事务。因为在资源库中,对各项待改变或以改变的文件有很直观的比较。
8. SVN的其他操作:
查看某一文件历史提交记录:右键该文件 ---->Team ---->显示资源历史记录
比较当前文件与资源库中的文件差异:右键该文件 ----> compare with
替换文件/还原:右键该文件 ----> replace with
注意:替换操作不可逆!!此操作要谨慎,必要时请先备份。
五、解决冲突:
如果commit时出现"You have to update your work copy first.”红色警告,说明版本库中的此文件已经被其他人修改了。请先点“ok”按钮退出。执行update,然后再commit。
如果修改与update得到的代码不冲突,则自动合并。如果冲突(比如对同一行代码进行了修改),则出现”One or more files are in a conflicted state.“红色警告,并产生几个文件记录冲突。
【1】:资源库-->本地(更新)
【2】:本地-->资源库(提交)
【3】:包含【1】【2】
【4】:冲突文件
这个蓝色的按钮,在没有冲突的前提下,蓝色按钮里面的都是你要更新的。直接更新即可
这个灰色的按钮,灰色按钮里面的都是你要提交的。挨个文件看一下,是不是你要提交的东西。是的话 commit
点击【4】标注的红色箭头,这里会显示所有有冲突的文件:有冲突的文件又包括两类:
一是多个人修改该文件,但修改的是不同的部分;
二是多人修改该文件,其中两人或以上操作了同一段代码。
针对第一种可以直接更新无需特殊处理,
针对第二种,就需要谨慎操作,切不可一股脑的更新。可以先把自己的代码copy下来,和另一个人商量后再决定如何操作。冲突代码,需要责任人之间进行协调处理。