tnblog
首页
视频
资源
登录

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

7413人阅读 2020/5/29 14:05 总访问:400073 评论:0 收藏:0 手机
分类: 小笔记

本篇详解使用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是什么(纯理论)

相信有很多小伙伴一定听说过SVN但SVN到底是干嘛的呢今天就带大家带来SVN的分享希望能对你们有帮助哦 概念:SVN是subversion...

SVN设置忽略某些文件或者整个文件夹

*/bin */obj :忽略 bin下面的与obj下面的所有文件Aaa.txt : 忽略具体的文件

SVN介绍

SVN版本控制作用:用于多人开发项目(文件)的时候,控制项目,不需要拷贝把项目给svn管理,然后用户都可以进行上传和下载...

SVN的初步了解及优缺点

SVN是什么?  svn是Subversion的简称,是一个开源的代码版本控制系统,svn就是用于多人共同开发同一个项目,达到资源共用...

SVN入门使用操作说明

SVN作为源代码文件版本管理的工具,在日常项目中,经常使用到。但是,没有使用过SVN的用户,经常不知道如何操作,本文就为...

SVN配置中文

SVN看不懂多少可以配置中文包安装SVN的步骤略过,安装教程点这里SVN官网下载SVN语言包,根据系统选择32位或者64位下载下载...

SVN 客户端,服务器端下载,安装过程

客户端:首先打开浏览器上百度搜索“SVN”如下图:或者点击:[https://tortoisesvn.net/downloads.html](https://tortoises...

SVN 解决同时提交修改的项目冲突问题

首先为了方便理解,创建两个文件夹。aa 和 bb 里面放一个类cs两个都已经修改过了ab两个内容都不同a,b提交后出现的问题是:...

SVN中文包安装成功后依然不能设定中文

一,首先要查看自己电脑安装的svn版本二,找到和版本相同的svn中文安装包,中文版官方地址 https://sourceforge.net/projec...

SVN更新或提交时报错工作副本 “..........” 已经锁定”的解决办法

出现这种错可能是因为最近改变太多或者从未更新一直是提交造成的原因,只需要右键”清理”(clear up)就可以了原文地址:htt...

SVN 代码提交规范

前言进行团队项目的时候,不要盲目提交代码,确认自己代码准确无误后,并且DLL能够运行成功,谨慎提交代码,提交代码时先拉...

分布式服务架构微服务架构概念的区别联系

分布式:分散压力。微服务:分散能力。当下理解分布式:不同模块部署在不同服务器上作用:分布式解决网站高并发带来问题集...

jsController中分割字符串的方法

js: varstr=OpenRule; varstrs=newArray(); strs=str.split(","); for(vari=0;i<strs.length;i++){ $(&q...

Service-stack.redis配置连接池读写分离(处理并发相关等)

配置连接池与读写分类 //写节点(主节点) List<string>writes=newList<string>(); writes.Add("123456a...

CSS相对定位绝对定位

一般相对定位和绝对定位可以配合起来使用 例如实现如下的效果 只需要在外层div设置为相对定位,在内部设置为绝对定位就...
你之所以觉得时间一年比一年过得快,是因为时间对你一年比一年重要。
排名
13
文章
64
粉丝
20
评论
30
MUI框架页面间的传值指针
XingDy姐 : 不错哦
MUI框架页面间的传值指针
剑轩 : 接口的真实地址可以用xx/yy什么的代替哦,真实地址还是隐藏一下好
.NET EF 用户按钮权限
YOU : 可以,在写文章的时候,有需要写代码的地方,可以选择编辑器上的代...
.NET EF 用户按钮权限
剑轩 : 哈哈哈哈,你这个追女生的逻辑
EF三种模式解析
剑轩 : 好文采!
重要sql语句和linq,lamdba分组条件查询语句
剑轩 : 开头那句诗句写得很好哇!
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术
背上背包,带上行囊,去你的世界旅行。