硬广:《SVN与TortoiseSVN实战》系列已经写了八篇,本篇是完结篇,整个系列结合TortoiseSVN对SVN中容易被忽视的部分进行了详解,以技巧性为主。html
本篇详解使用TortoiseSVN对文件进行加锁和解锁的技巧,其中涉及到了以前介绍的SVN属性知识,关于属性能够翻看《SVN与TortoiseSVN实战:属性的奇技淫巧(一)》、《SVN与TortoiseSVN实战:属性的奇技淫巧(二)》。svn
加锁与解锁的操做对于项目中的二进制文件,如图片、声音、动态库等不可合并文件是很是有用的,可让这些文件防止产生恼人的冲突,但TortoiseSVN中的Get lock的其实并不能知足须要,并不能在编辑前得到对文件的独占访问,这也是本文要结合属性来详解文件加锁的缘由。post
本篇内容概要:学习
一、版本控制系统的加锁策略:乐观加锁、严格加锁;ui
二、使用TortoiseSVN获取锁和释放锁;3d
三、使用属性,将文件设置为只读;版本控制
四、关于锁的建议;htm
一、版本控制系统的加锁策略:乐观加锁、严格加锁blog
为了不多我的同一时间对同一个文件改动的相互覆盖,版本控制系统就必须有一套冲突处理机制。图片
对于解决冲突,有两种处理办法:乐观加锁和严格加锁。
严格加锁:全部签出的文件都是只读的,任何对文件的修改必需要得到文件的锁,若是其余人没有拥有该文件的锁,那么版本控制系统就会受权给你文件的锁,并将文件设置为可编辑的。
乐观加锁:全部签出的文件都是可读写的,对文件的修改没必要得到文件的锁,当你修改完文件签入时,会首先要求你更新本地文件,版本控制系统不会覆盖你的本地修改,而是会让你本身合并冲突后签入。
SVN使用的是乐观加锁策略,而像TFS一类的版本控制系统容许你对加锁策略进行选择。
相比于严格加锁,乐观加锁可能会有较高的产生冲突的几率,但容许团队成员任什么时候间对文件进行编辑,拥有极大的协做效率。
对于像不可合并的二进制文件或想在某些文件和目录上采起严格加锁策略,SVN也提供了严格加锁的办法,就是对文件的加锁解锁操做。
二、使用TortoiseSVN获取锁和释放锁;
SVN默认状况下,全部的文件都没有锁定,只要有提交权限的人均可以在任什么时候候提交任何的文件。其余人会定时更新他们的工做目录,在库中的改变的东西都会与本地合并。
若是你对一个文件得到锁定,那么只有你能够提交这个文件。其余用户的提交都会被拒绝,直到你释放了这个锁。
获取锁:
选择你想要获取锁定的文件,而后右键菜单点击TortoiseSVN Get lock,将会弹出锁定窗口:
一个良好的习惯是每次获取锁定时,在红色标注位置输入获取锁的缘由。
释放锁:
有两种状况会释放锁:
一、选择你想要释放锁定的文件,而后右键菜单点击TortoiseSVN Release lock;
二、TortoiseSVN为了确保你不会忘记释放锁,在提交对话框中,老是会显示锁定的文件,并老是默认被选中。若是你继续提交,选中的文件中的锁就被移除了,就算你从没有修改过。能够在锁定文件的目录上使用Commit,打开提交对话框验证一下。
若是你不但愿释放文件的锁,就必须取消选中它。
问题是什么?
若是实际操做过,使用过TortoiseSVN 的 Get lock来加锁,就会发现并不如你所预期的,对文件实现了严格加锁,本篇也就没必要要写了。
问题在哪?使用TortoiseSVN 的 Get lock锁定文件后,其余用户并不知道你对这个文件已经锁定,即时他们签出最新的版本,依然可以对文件在本地进行修改,文件依然是可读写的状态。
这是一个在其余成员电脑上已经Get lock的文件,能够看到与其余文件在状态上没有任何区别:
这样实际上是没有意义的,别人依然会对你锁定的文件进行修改,只有当他们在签入时才会发现文件已经被锁定:
这种加锁操做下,团队成员须要按期的检查文件的锁定状态,可使用TortoiseSVN的check for modifications:
三、使用属性,将文件设置为只读;
之因此存在被锁定后其余成员依然能够在本地修改,是由于SVN所采起的是乐观加锁的策略。
若是咱们想对某个文件或某个目录采起严格加锁策略,更明确的说是:全部文件默认为只读,在文件修改前须要先获取锁,只有其余人不拥有锁时才能够锁定文件并修改。
要实现严格加锁,就须要使用SVN的svn:needs-lock属性。
在想要采起严格加锁的文件或目录上点击右键,使用TortoiseSVN Properties属性菜单,点击News新建属性,选择Needs-lock:
设置为Locking required,签入属性修改操做,能够发现文件的图标状态改变了,并变为只读:
当设置了svn:needs-lock属性时,实际上对文件就采起严格加锁策略,对文件的任何修改都必须先使用TortoiseSVN 的 Get lock锁定文件。
四、关于锁的建议
对于项目中的二进制文件,如图片、声音、动态库等,能够在目录上统一设置svn:needs-lock属性,避免在这些文件上产生冲突,浪费解决冲突的时间。
结语:本系列一共九篇,对SVN中的技巧基本上进行了全面的介绍,但愿对你们有所帮助。若是想要系统的学习SVN,能够阅读《版本控制之道》这本书,本系列所讲的内容与书中的内容并不彻底重复,更侧重于实战性和技巧性的内容,最后但愿你们在项目开发中能正确、合理运用SVN。