别人是从svn转化到git,我则相反。。。心好累
最近有一个项目要用到SVN,老大命我搭建环境。昨晚学习大概学习了一下,以下只是我的手记。
至于其他关于SVN的介绍自行百度。。。
自己练习需要安装一个SVN服务器,这里我用的虚拟器VirtualBox,关于虚拟机的使用不再阐述,期间遇到一个和主机共享资源的问题,记录一下。
在虚拟机设置-》高级》常规
将网络设置为桥接网卡
进入虚拟机,安装增强功能
下载VMTransferFiles到本机,解压安装其中的setUp_host.exe
将VMTransferFiles下的GuestSetup.iso挂载到虚拟机中
给虚拟机设置一个ip地址,又get一个命令,在主机arp -a可获取到暂时没被暂用地址
ip地址可在网上邻居》右键属性》Internet协议》属性》
ip地址:填写未被暂用的
子网掩码:255.255.255.0
VisualSVN是一款图形化svn服务器。官网
http://www.visualsvn.com/server/
下载地址:
http://www.visualsvn.com/server/download/
搭建svn服务器,安装步骤见文档,相当简单
之前用过版本控制的,应该对“仓库”这个概念不陌生了
设置用户权限
完成
一般来说,仓库会定时或者实时保存到硬盘上,这样就算服务器崩溃了,在新的服务器上,我们也能快速的恢复数据。
在Repostitories上右键-》所有任务-》import exititing即可导入本地仓库
:表示状态正常
:已修改,需要提交
:提交过程中出现了冲突
:文件设置了svn:needs-lock属性,为只读文件,你必须在必须在编辑之前线得到一个锁
:如果你拥有一个文件的锁,并且SVN状态是正常的,这个图片就提醒你,如果你不使用该文件应该释放锁,允许别人提交对该文件的修改
:当前文件已经被计划从版本控制中删除,或者该文件夹下某个受控文件丢失了
:该文件没有被纳入版本管理系统,此时该文件可以被添加到版本管理或者ignore(忽略)列表中
:被计划加入版本控制中
一个免费的开源svn客户端,避免使用枯燥且不实用的命令
下载地址http://tortoisesvn.net/downloads
右键>SVN commit提交代码
右键>TortosiseSvn-> show log,可以查看进行提交代码版本,选择相应的版本进行回滚
冲突的产生:程序员李彦宏修改了a.java文件后提交,这时,程序员马化腾没有先更新a.java文件,直接修改后提交,由于李彦宏已经提交过新的版本,即当前马化腾手上的文件不是最近的,但是他也做了修改,这就产生了冲突了
三种选择:
1,放弃自己的修改,回滚(svn revert)后重新提交
2,手动解决
当我们提交有冲突的文件后,会在本地生成以下文件
.mine是当前修改的内容
.r5:当前修改之前的内容
.r6:服务器上新版本新增的内容
这时,刚刚产生的几个临时文件就消失了,留下的文件是svn帮我们合并后的结果,是不合法的文件,
《《《.mine表示是自己修改的内容
=====是分割号
》》》.r4:表示服务器上的内容
这时我们就可以手动调整代码冲突的部分了,调整完重新提交即可
1,编写后,应尽快提交,频繁的提交/更新可以降低冲突发生的几率和复杂度
2,提交时写上明确的message(git强制要求写上, svn则没有),方便以后解决问题
3,养成好习惯,每天下班提交代码,上班更新代码,使用SVN每次都是先提交后更新
前面在创建仓库时提到SVN的标准目录结构,下面简单介绍一下
Trunk:主分支,这里包含的都是最新的开发代码,这里的代码将会工作到下一个主要发布版本
Baranches:分支。可以用于处理trunk上发现的bug,或者进行一些新技术的尝试,协同开发
Tags:保存可用版本,一般都是只读的
打开仓库可以看到一下目录
可以看到,在tag下有两个稳定版本,但是这时我们发现V2.0上有个bug 需要修复,为了保证代码的完整性,我们不能在主分支上修改
在tag/V2.0下右键选择copy to…
所填的路径就是分支的url
我们在svn checkout时选择该url即可将分支上的代码下载下来修改
修改完提交后
SVN更新的原则是要随时更新,随时提交。当完成了一个小功能,能够通过编译并且自己测试之后,谨慎地提交。
如果在修改的期间别人也更改了svn的对应文件,那么commit就可能会失败。如果别人和自 己更改的是同一个文件,那么update时会自动进行合并,如果修改的是同一行,那么合并时会产生冲突,这种情况就需要同之前的开发人员联系,两个人一起协商解决冲突,解决冲突之后,需要两人一起测试保证解决冲突之后,程序不会影响其他功能。
在更新时注意所更新文件的列表,如果提交过程中产生了更新,则也是需要重新编译并且完成自己的一些必要测试,再进行提交。这样既能了解别人修改了哪些文件,同时也能避免SVN合并错误导致代码有错。
每次提交的间歇尽可能地短,以几个小时的开发工作为宜。例如在更改UI界面的时候,可以每完成一个UI界面的修改或者设计,就提交一次。在开发功能模块的时候,可以每完成一个小细节功能的测试,就提交一次,在修改bug的时候,每修改掉一个bug并且确认修改了这个bug,也就提交一次。我们提倡多提交,也就能多为代码添加上保险。
代码在提交之前,首先要确认自己能够在本地编译。如果在代码中使用了第三方类库,要考虑到项目组成员中有些成员可能没有安装相应的第三方类库。项目经理在准备项目工作区域的时候,需要考虑到这样的情况,确保开发小组成员在签出代码之后能够在统一的环境中进行编译。
在一个项目组中使用SVN,如果提交空的标注或者不确切的标注将会让项目组中其他的成员感到很无奈,项目经理无法很清晰的掌握工作进度,无法清晰的把握此次提交的概要信息。在发现错误后也无法准确的定位引起错误的文件。所以,在提交工作时,要填写明晰的标注,能够概要的描述所提交文件的信息,让项目组其他成员在看到标注后不用详细看代码就能了解你所做的修改。
例如eclipse中的.classpath文件,Windows生成的缩略图Thumbs.db,项目编译生成的临时文件.obj, .class等等。如果项目中没有进行这方面的配置来强行禁止提交这样的文件,请自觉不要提交这样的文件。提交了这样的文件后,别人在更新后就可能与本地的环境冲突从而影响大家的工作。
代码在提交入SVN之后,你的代码将被项目成员所分享。如果提交了你不明白的代码,你看不懂,别人也看不懂,如果在以后出现了问题将会成为项目质量的隐患。因此在引入任何第三方代码之前,确保你对这个代码有一个很清晰的了解。
慎用锁定功能 在项目中要慎用锁定的功能,在你锁定了一个文件之后别人就无法继续修改提交该文件,虽然可以减少冲突的发生率,但是可能会影响项目组中其他人员的工作。平时只有在编辑那些无法合并的文件(例如图片文件,flash文件等)时,才适当的采用锁定操作。
以上只是我的学习手札并非实践应用。。如有错误的地方望见谅并及时告知博主