Subversion资料加锁
Subversion对于文件的管理分为文本文件和二进制文件,对于文本文件使用subversion可以进行行级别的管理,但是对于二进制文件,subversion使用锁的方式管理,所有的加锁文件都是只读的,而且在本地拷贝对应了一个锁令牌,下面我们模拟下加锁和解锁的过程。
用户Gongqingkui新建readme.doc文件,使用svn status检查状态,发现有了新建的readme.doc文档,使用svn add readme.doc使文档加入到subversion的管理之中,提交这些更改svn commit –m “add the readme doc document.”结果为
D:\www.gongqingkui.cn\hello>svn commit -m "add" 增加 readme.doc 传输文件数据. 提交后的版本为 196。
另外一个用户Dongsuqin更新了readme.doc提交后,用户Gongqingkui如果再提交则会出现
D:\www.gongqingkui.cn\hello>svn commit -m "titlereadme" 正在发送 readme.doc 传输文件数据.svn: 提交失败(细节如下): svn: 文件“/hello/readme.doc”已经过时
使用命令svn update 简写(svn up)查看出现的冲突,显示文件readme.doc有冲突。为了暂时解决冲突执行恢复命令svn revert readme.doc使本地文件恢复到本地上次编辑状态,或者在没有冲突的情况下使用svn up来更新到最新状态。
以上过程在冲突处理时十分麻烦,为了避免麻烦,可以使用文件锁命令,执行:
D:\www.gongqingkui.cn\hello>svn propset svn:needs-lock truereadme.doc 设置属性 “svn:needs-lock” 于 “readme.doc”
将文件readme.doc加上锁,然后再提交到服务器上。加锁其实就是将svn:needs-lock 设定一个任意值,其后的操作必须关和解锁,在编辑文件之前首先要关锁:svn lock readme.doc –m “need to add data.”。显示锁定结果:
D:\www.gongqingkui.cn\hello>svn lock readme.doc -m "addauthor name list" “readme.doc”被用户“gongqingkui”锁定。
此时在本地工作目录使用svninfo readme.doc可以查看本地工作目录文件信息如下:
D:\www.gongqingkui.cn\hello>svn info readme.doc 路径:readme.doc 名称:readme.doc URL: svn://192.168.195.54/hello/readme.doc 版本库根:svn://192.168.195.54 版本库 UUID:d1e122a1-a313-ff47-b797-6c7f1e452954 版本: 202 节点种类: 文件 调度: 正常 最后修改的作者:gongqingkui 最后修改的版本: 202 最后修改的时间:2012-11-07 16:50:05 +0800 (星期三, 2012-11-07) 文本最后更新:2012-11-07 16:46:17 +0800 (星期三, 2012-11-07) 校验和:71d766c5b6726696728905b99fa6a006 锁定令牌:opaquelocktoken:0316280a-d038-ce48-bc41-0a9ed7d1aea5 锁定所有者:gongqingkui 已创建锁定:2012-11-07 16:52:06 +0800 (星期三, 2012-11-07) 锁定注释(1 行): add author name list
可以看出文件被gongqingkui锁定,锁定理由为添加作者列表。此时用户Dongsuqin的工作空间可以看到本文件为只读文件。而gongqingkui本地文件则看出为加锁文件
。需要注意的是,此时在Dongsuqin客户端执行svn
info readme.doc只能看到一般信息,而不能看到加锁信息,这是因为svn info readme.doc是在本地工作拷贝工作,显示的是本地信息。使用svn info svn://192.168.195.54/hello/readme.doc则可以看到加锁信息。在用户gongqingkui提价修改文件后,系统自动解锁文件。
为了在用户gongqingkui长时间不交出锁住文件的情况下解锁,可以使用svn unlock –force svn:// 192.168.195.54/hello/readme.doc的方法解开gongqingkui加在文件上的锁。Subversion使用pre-lock和pre-unlock这两个钩子脚本来实现对加锁用户的约束。
需要注意的是锁是对应用户在本地工作拷贝的锁,同一个用户如在不同的工作拷贝上并不拥有同一个锁。确保沟通高效的前提下,使用锁有利于小组开发者明确开发责任,不越界修改其他用户的代码。加锁的原则尽量是快而且少。需要注意如果一个文件很多小组和开发人员过于频繁的修改的话,那么就需要在物理上对他进行拆分为数个单元,将这些单元与开发人员一一对应起来,降低加锁的需要。