SVN与TortoiseSVN实战:文件加锁详解

硬广:《SVN与TortoiseSVN实战》系列已经写了八篇,本篇是完结篇,整个系列结合TortoiseSVN对SVN中容易被忽视的部分进行了详解,以技巧性为主。

本篇详解使用TortoiseSVN对文件进行加锁和解锁的技巧,其中涉及到了之前介绍的SVN属性知识,关于属性可以翻看《SVN与TortoiseSVN实战:属性的奇技淫巧(一)》、《SVN与TortoiseSVN实战:属性的奇技淫巧(二)》。

加锁与解锁的操作对于项目中的二进制文件,如图片、声音、动态库等不可合并文件是非常有用的,可以让这些文件防止产生恼人的冲突,但TortoiseSVN中的Get lock的其实并不能满足需要,并不能在编辑前获得对文件的独占访问,这也是本文要结合属性来详解文件加锁的原因。

本篇内容概要:

1、版本控制系统的加锁策略:乐观加锁、严格加锁;

2、使用TortoiseSVN获取锁和释放锁;

3、使用属性,将文件设置为只读;

4、关于锁的建议;

1、版本控制系统的加锁策略:乐观加锁、严格加锁



为了避免多个人同一时间对同一个文件改动的相互覆盖,版本控制系统就必须有一套冲突处理机制。

对于解决冲突,有两种处理办法:乐观加锁和严格加锁。

严格加锁:所有签出的文件都是只读的,任何对文件的修改必须要获得文件的锁,如果其他人没有拥有该文件的锁,那么版本控制系统就会授权给你文件的锁,并将文件设置为可编辑的。

乐观加锁:所有签出的文件都是可读写的,对文件的修改不必获得文件的锁,当你修改完文件签入时,会首先要求你更新本地文件,版本控制系统不会覆盖你的本地修改,而是会让你自己合并冲突后签入。

SVN使用的是乐观加锁策略,而像TFS一类的版本控制系统允许你对加锁策略进行选择。

相比于严格加锁,乐观加锁可能会有较高的产生冲突的概率,但允许团队成员任何时间对文件进行编辑,拥有极大的协作效率。

对于像不可合并的二进制文件或想在某些文件和目录上采取严格加锁策略,SVN也提供了严格加锁的办法,就是对文件的加锁解锁操作。

2、使用TortoiseSVN获取锁和释放锁;



SVN默认情况下,所有的文件都没有锁定,只要有提交权限的人都可以在任何时候提交任何的文件。其他人会定时更新他们的工作目录,在库中的改变的东西都会与本地合并。

如果你对一个文件获得锁定,那么只有你可以提交这个文件。其他用户的提交都会被拒绝,直到你释放了这个锁。

获取锁:

选择你想要获取锁定的文件,然后右键菜单点击TortoiseSVN Get lock,将会弹出锁定窗口:

一个良好的习惯是每次获取锁定时,在红色标注位置输入获取锁的原因。

释放锁:

有两种情况会释放锁:

1、选择你想要释放锁定的文件,然后右键菜单点击TortoiseSVN Release lock;

2、TortoiseSVN为了确保你不会忘记释放锁,在提交对话框中,总是会显示锁定的文件,并总是默认被选中。如果你继续提交,选中的文件中的锁就被移除了,就算你从没有修改过。可以在锁定文件的目录上使用Commit,打开提交对话框验证一下。

如果你不希望释放文件的锁,就必须取消选中它。

问题是什么?

如果实际操作过,使用过TortoiseSVN 的 Get lock来加锁,就会发现并不如你所预期的,对文件实现了严格加锁,本篇也就不必要写了。

问题在哪?使用TortoiseSVN 的 Get lock锁定文件后,其他用户并不知道你对这个文件已经锁定,即时他们签出最新的版本,依然能够对文件在本地进行修改,文件依然是可读写的状态。

这是一个在其他成员电脑上已经Get lock的文件,可以看到与其他文件在状态上没有任何区别:

这样其实是没有意义的,别人依然会对你锁定的文件进行修改,只有当他们在签入时才会发现文件已经被锁定:

这种加锁操作下,团队成员需要定期的检查文件的锁定状态,可以使用TortoiseSVN的check for modifications:

3、使用属性,将文件设置为只读;



之所以存在被锁定后其他成员依然可以在本地修改,是因为SVN所采取的是乐观加锁的策略。

如果我们想对某个文件或某个目录采取严格加锁策略,更明确的说是:所有文件默认为只读,在文件修改前需要先获取锁,只有其他人不拥有锁时才可以锁定文件并修改。

要实现严格加锁,就需要使用SVN的svn:needs-lock属性。

在想要采取严格加锁的文件或目录上点击右键,使用TortoiseSVN Properties属性菜单,点击News新建属性,选择Needs-lock:

设置为Locking required,签入属性修改操作,可以发现文件的图标状态改变了,并变为只读:

当设置了svn:needs-lock属性时,实际上对文件就采取严格加锁策略,对文件的任何修改都必须先使用TortoiseSVN 的 Get lock锁定文件。

4、关于锁的建议



对于项目中的二进制文件,如图片、声音、动态库等,可以在目录上统一设置svn:needs-lock属性,避免在这些文件上产生冲突,浪费解决冲突的时间。

结语:本系列一共九篇,对SVN中的技巧基本上进行了全面的介绍,希望对大家有所帮助。如果想要系统的学习SVN,可以阅读《版本控制之道》这本书,本系列所讲的内容与书中的内容并不完全重复,更侧重于实战性和技巧性的内容,最后希望大家在项目开发中能正确、合理运用SVN。

时间: 2024-08-19 00:06:49

SVN与TortoiseSVN实战:文件加锁详解的相关文章

SVN与TortoiseSVN实战:补丁详解

硬广:<SVN与TortoiseSVN实战>系列已经写了五篇,第二篇<SVN与TortoiseSVN实战:标签与分支>和第三篇<SVN与TortoiseSVN实战:TortoiseSVN新建及合并分支>重点介绍了标签和分支的概念及实际操作演示,关注人数较多,三.四篇<SVN与TortoiseSVN实战:冲突详解(二)>详解了SVN如何判定冲突及冲突文件说明和解决冲突方法. 本篇详细SVN中补丁的概念,版本控制之道这本书对于SVN的讲解比较全面了,但书中也没有

SVN与TortoiseSVN实战:冲突详解(一)

硬广:<SVN与TortoiseSVN实战>系列已经写了三篇,第一篇<SVN与TortoiseSVN实战:从入门到精通>,第二篇<SVN与TortoiseSVN实战:标签与分支>和第三篇<SVN与TortoiseSVN实战:TortoiseSVN新建及合并分支>重点介绍了标签和分支的概念及实际操作演示. 在写到SVN分支合并时,有评论中也提到合并后发生冲突的问题,相信关于冲突的知识也是开发人员的痛点. 关于冲突的知识,重点介绍以下几个方面: 1.什么情况会产

SVN与TortoiseSVN实战:冲突详解(二)

硬广:<SVN与TortoiseSVN实战>系列已经写了四篇,第二篇<SVN与TortoiseSVN实战:标签与分支>和第三篇<SVN与TortoiseSVN实战:TortoiseSVN新建及合并分支>重点介绍了标签和分支的概念及实际操作演示,关注人数较多. 上一篇提到关于冲突的知识,其中已经说明了第1点: 1.什么情况会产生冲突? 2.冲突发生时产生的三个文件是什么含义? 3.怎样使用TortoiseSVN解决冲突? SVN是根据同时对相同位置上内容的修改来判断冲突的

SVN与TortoiseSVN实战:从入门到精通

SVN,版本控制程序,是支撑项目开发的基础工具. 在团队开发中,不管是程序员还是美工.测试等人员,都会用到SVN,通常会把SVN视为源代码管理工具,但对于SVN更准确的理解是: “帮助参与项目人员的管理他们的项目资产,其中项目资产包括:源代码.文档.测试和构建脚本等.” SVN带来的优势: 1.提供项目级别撤销的可能: 2.协调团队开发,避免团队成员开发的代码相互覆盖: 3.SVN记录每次提交的改动,它允许你恢复旧版本的数据,或者追查数据变化的历史: 4.SVN允许团队在保持主线开发的同时,建立

SVN与TortoiseSVN实战:TortoiseSVN新建及合并分支

硬广:<SVN与TortoiseSVN实战>系列已经写了两篇,第一篇<SVN与TortoiseSVN实战:从入门到精通>,关于分支和标签的知识介绍可翻阅第二篇<SVN与TortoiseSVN实战:标签与分支>,本篇重点通过例子讲解TortoiseSVN新建及合并分支的实际操作. 先提示一下,网上大部分关于分支合并的讲解都是错的,对于其他资料请谨慎,本文本着科学严谨的精神,确保讲解正确. 我这里已经新建好一个SVN项目仓库,并按照第二篇介绍的标准项目仓库的目录结构新建好t

【java项目实战】Servlet详解以及Servlet编写登陆页面(二)

Servlet是Sun公司提供的一门用于开发动态web网页的技术.Sun公司在API中提供了一个servlet接口,我们如果想使用java程序开发一个动态的web网页,只需要实现servelet接口,并把类部署到web服务器上就可以运行了. 到底什么是Servlet呢? 通俗一点,只要是实现了servlet接口的java程序,均称Servlet.Servlet是由sun公司命名的,Servlet = Server + Applet(Applet表示小应用程序),Servlet是在服务器端运行的小

Windows DIB文件操作详解-4.使用DIB Section

前面讲了为了提高DIB的显示性能和效率,我们将DIB转换成DDB,但是这又遇到一个问题,如果我想操作DIB的数据的话,显然是不能使用DDB:一是因为DIB转DDB时发生了颜色转换,再就是DDB无法直接提取指定像素点的数据.那么我们怎么办呢,Windows使用一种折中的方式来达到这一目标(既提高了显示效率和性能,又可以直接操作像素点). 1.DIB Section存储和显示 Windows使用DIB块(DIB Section)来存储DIB数据,其内存结构示意图如下 其实,和我们自己读入DIB数据到

磁盘及文件系统管理详解---急需加强

磁盘管理: 机械式硬盘 U盘.光盘.软盘.硬件.磁带 MBR:Master Boot Record 主引导记录 ln [-s -v] SRC DEST:创建链接文件,默认硬链接 -s:创建软连接 -v:显示过程 硬链接: 1.只能对文件创建,不能应用于目录 2.不能跨文件系统 3.创建硬链接会增加文件被链接的次数 符号链接(软连接): 1.可以应用于目录 2.可以跨文件系统 3.不会增加被链接文件的链接次数 4.其大小为指定的路径所包含的字符个数 du -s -h df:显示整个磁盘分区使用情况

Linux文件权限详解

在Linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录. 通过设定权限可以从以下三种访问方式限制访问权限:只允许用户自己访问:允许一个预先指定的用户组中的用户访问:允许系统中的任何用户访问.同时,用户能够控制一个给定的文件或目录的访问程度.一个文件活目录可能有读.写及执行权限.当创建一个文件时,系统会自动地赋予文件所有者读和写的权限,这样可以允许所有者能够显示文件内容和修改文件.文件所有者可以将这些权限改变为任何他想指定的权限.一个文件也许只有读权限