考以下转载文章。配置“[auto-props]”,新添加到SVN的文件都会自动加锁,在AnkhSVN插件中,会看到文件前有锁图标,和VSS类似了。
注意,已经添中到SVN中的文件是不会自动有锁属性,需要重新添加。或者不怕麻烦的话,一个个文件的SVN属性中手工加,如下图
以下是按下面文章配的图
Subversion的有用配置
 

2008-12-26 来源:subversion.org.cn

 

本文介绍了配置管理员和高级用户可能用到的其他功能,分别为:

1,使用“锁定-编辑-解锁”模型

2,自动化属性

3,忽略文件

4,关键字替换

5,外部定义

1,使用“锁定-编辑-解锁”模型

Subversion使用与CVS相似的工作模型,也就是“拷贝-修改-合并”,但是有时候还是很有必要使用“锁定-编辑-解锁”模型,例如对于二进制文件,或者其他不太适合合并的文件。

属性在《使用Subversion进行版本控制》这本书里也被称为元数据,是附加到版本控制下的文件之上的属性,就像最后的修改日期是一个文件的属性一样,你可以为Subversion控制之下的文件和目录设置自定义的属性。关于属性的详细信息可以看:http://www.subversion.org.cn/svnbook/1.2/svn.advanced.locking.html#svn.advanced.locking.lock-communication 。

在Subversion 里是通过内置的属性“svn:needs-lock”实现“锁定-编辑-解锁”模型的,例如我们有一个word文件“介绍.doc”,大家很清楚Word 文件是二进制格式(据说以后都是XML的,但是可能也无法灵活的合并),不可能使用“拷贝-修改-合并”模型,所以我们要使用“锁定-编辑-解锁”模型。你可以将它设置属性“svn:needs-lock”,然后提交,之后其他人在更新这个文件的时候,就会得到一个只读的文件,他们想修改这个文件必须首先获得锁,获得锁的过程会将文件置为可写,而其他人此时如果想得到锁就会发现做不到,只有得到锁的人放弃锁定,别人才能得到锁,继续工作。下面分别讲述了如何使用svn命令行和TortoiseSVN设置锁和使用锁。

1) 设定“svn:needs-lock”属性

使用命令行锁定“介绍.doc”:

svn propset svn:needs-lock 'x' 介绍.doc

运行这个命令后,“介绍.doc”就已经是设置了“svn:needs-lock ”,但为了使之生效还要运行“svn commit”,之后其他用户update的时候就会发现这个文件已经是只读的了。需要注意的是我们设置的属性值是“x”,实际上任意值都可以, Subversion会忽略其内容。

使用TortoiseSVN设定属性也很简单:

“介绍.doc”右键选中- >属性->Subversion选项夹->properties->add,然后在弹出的窗口中的property name选择“svn:needs-lock”,值任意,然后选择OK。之后再提交“介绍.doc”即可。

2)获取锁

在设定了这个属性之后,我们要想修改“介绍.doc”,就必须首先获得锁,使用命令行操作如下:

svn lock 介绍.doc

这样“介绍.doc”就变成了可写文件,你可以进行编辑修改了,这个时候如果有人和你一样期望获得这个文件的锁就会得到错误的提示,表示文件已经被你锁定了。

使用TortoiseSVN的操作依然简单,“介绍.doc”右键选中-> TortoiseSVN -> Get Lock... ,然后输入锁定的注释,选择“OK”,既完成了锁定。

3)释放锁

当你完成了修改,选择提交后,默认就会释放锁,别人就可以重新获得锁。当然你也可以放弃修改,直接选择释放锁,操作如下:

svn unlock 介绍.doc

这样“介绍.doc”就重新变成只读,别人就可以获得锁并进行修改了。

使用TortoiseSVN的操作为,“介绍.doc”右键选中-> TortoiseSVN -> Release Lock,然后选择确认即可。

2,自动化属性

论坛里曾经有人问到如何实现前一个问题,然后又问到如果有很多文件需要做这样的设置该如何处理。这时可能就需要自动化属性功能,通过文件名匹配的方式将某类文件设置某种属性。我们还是以Word文档为例,设定将所有Word文档设置为只读。

这里我们用到了Subversion的运行配置区特性,Subversion的许多全局的配置参数都是放在运行配置区中,运行配置区实际上就是一个目录,在我的XP操作系统这个目录是“C:\Documents and Settings\rock\Application Data\Subversion”,其中rock是我的用户名,在UNIX下这个目录可能是“.subversion”。在这个目录里config文件是客户端操作的一些属性,而servers则是服务器端的属性,这一部分我们要使用config文件。

打开运行配置区的config文件,去掉“enable-auto-props = yes”前面的“#”和空格,然后找到“[auto-props]”小节,增加下面的属性并保存即可实现Word文件的自动添加需要锁定的属性:

*.doc = svn:needs-lock=x

作了这个设置后,以后通过“svn add”和“svn import”添加的*.doc文件都会有“svn:needs-lock”属性,当然你愿意,你也可以把上面的值修改为“* = svn:needs-lock=x”,这样所有新加的文件都是进入了“锁定-编辑-解锁”模型。

需要注意的是这些设置是针对客户端的,其他用户还需要做同样的设置。

3,忽略文件

在执行svn status等操作时,我们不想看到某些文件,就要使用设置属性进行忽略。在Subversion有两种方式进行这个设置,一个是更改全局设置,也就是前面提到的config文件,另一个是使用svn的内置属性“svn:ignore”。

1)使用config的global-ignores配置

假定我们的程序会编译出很多exe文件,如果不使用忽略属性,当我们执行“svn status”结果会是这个样子:

? admin\test.exe

M admin\test.txt

为了不让exe文件打扰我们,我们只需找到config文件的[miscellany]小节,修改global-ignores,增加对exe的忽略,我修改后的这一行变成:

global-ignores = *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store *.exe

然后再执行“svn status”,结果如下:

M admin\test.txt

2)使用svn的内置属性“svn:ignore”

有时候匹配没有这么普遍,例如Java的工程会在bin目录生成的很多临时Jar文件,我们只需要a.jar,而不希望temp.jar影响我们的视线,所以我们只需要设置bin的属性“svn:ignore”为temp.jar即可,具体设置同上。

关于忽略的更多信息见:http://www.subversion.org.cn/svnbook/1.2/svn.advanced.props.html#svn.advanced.props.special.ignore

4,关键字替换

在CVS里有一个很有用的功能,就是将源文件中的一些关键字替换,例如提交时间,作者等。Subversion默认不会对此类关键字进行处理,需要设置一些属性,才能实现。

例如我们要在某个源文件的头上自动添加最后一个修改人的名字和提交的时间,首先我们为这个文件设置属性svn:keywords的值为“Date Author”,然后在这个文件需要添加作者和提交时间的地方增加下面这样的字段:

$LastChangedDate$
$Author$

这样这个文件提交后,对应的字符变成了下面的样子:

$LastChangedDate: 2006-11-29 22:58:16 +0800 (星期三, 29 十一月 2006) $
$Author: root $

这里还存在一个问题,就是Subversion总是使用UTF-8替换文本,文件必须使用UTF-8编码。如果我们的文件编码是GBK,而日期显示格式是上面的汉字形式,那得到的时间将是乱码的。目前最实际的解决办法是所有的文件使用UTF-8编码;或者是尽量使出现的数据没有汉字,例如对于路径都是使用英文,对于时间使用英语的区域选项(我调整了中文的格式,但是无效)。

这部分的问题我想也可以通过属性实现,但是需要修改源程序,可能还不能马上实现。

更多可以使用关键字可以见:

http://www.subversion.org.cn/svnbook/1.2/svn.advanced.props.html#svn.advanced.props.special.keywords

5,外部定义

这个功能也是论坛里经常被问到的一个问题,就是很多人希望有VSS的share功能,也就是一个文件在版本库的多个位置有映像,一个地方修改,其它所有位置都能够看到。

Subversion通过外部定义(svn:externals)属性,能够实现目录的共享,但是对于文件,则只能支持类UNIX下的链接,这部分内容《使用Subversion进行版本控制》已经说得很清楚了,所以大家直接看书吧:

http://www.subversion.org.cn/svnbook/1.2/svn.advanced.externals.html

关于“共享(share)”功能,《软件配置管理》一书有过评价,它认为这个功能不是很好的软件配置管理习惯,如果一个文件可以被共享,也意味这个文件似乎可以成为独立的模块,需要重新规划了。

AnkhSVN的自动加锁相关推荐

  1. 【转】事务和锁机制是什么关系? 开启事务就自动加锁了吗?

    数据库锁 因为数据库要解决并发控制问题.在同一时刻,可能会有多个客户端对同一张表进行操作,比如有的在读取该行数据,其他的尝试去删除它.为了保证数据的一致性,数据库就要对这种并发操作进行控制,因此就有了 ...

  2. linux让新生成的文件自动加锁,Linux_实用技巧一则 Linux系统对文件进行加锁,当有多个工作线程要同时对一 - phpStudy...

    实用技巧一则 Linux系统对文件进行加锁 当有多个工作线程要同时对一个文件进行写操作时,如果不对该文件进行加锁就可能会因误操作而引起一系列的问题. 解决这个问题有多种方法.我们这里考虑使用文件锁来对 ...

  3. 转SQLSERVER 会不会自动加锁

    [SQL]提升查询效率与避免LOCK发生nolock: 可能把没有提交事务的数据也显示出来,可能会产生脏读readpast: 会把被锁住的行不显示出来  所有Select加 With (NoLock) ...

  4. mysql加锁语法_MySql 加锁问题

    1.设置非自动提交 set autocommit=0;  这时候 for update才会起作用 2.一般用法 set autocommit=0;  for update(加锁)  ;  commit ...

  5. C++之lock_guard和unique_lock自动加解锁区别

    一.std::unique_lock也可以提供自动加锁.解锁功能,比std::lock_guard更加灵活.1.std::lock_guard std::lock_guard是RAII模板类的简单实现 ...

  6. 多线程同时写socket是否需要加锁(转)

    [打印] [订阅] [收藏] [推荐给朋友] [本帖文本页] yuangong 精灵 UID:453868 注册:2006-8-14 最后登录: 2008-01-14 帖子:164 精华:0 可用积分 ...

  7. mysql limit锁_我所理解的MySQL五:锁及加锁规则

    mysql教程栏目介绍MySQL的第五篇文章,关于锁及加锁规则. MySQL 系列的第五篇,主要内容是锁(Lock),包括锁的粒度分类.行锁.间隙锁以及加锁规则等. MySQL 引入锁的目的是为了解决 ...

  8. 数据库锁的详解, 共享锁, 更新锁, 排它锁, 意向锁, 加锁原理

    一,锁的种类 1.共享锁--Shared lock 又称读锁(S锁),共享锁不阻塞其他事务的读操作,但阻塞写操作,同一数据对象A可以共存多个共享锁,这被称为共享锁兼容. 当T1为数据对象A加上共享锁后 ...

  9. 多线程:pthread_cond_wait 实现原理

    函数原型 int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) 第一个参数为需要等待的条件,第二个参数为互斥锁 一般该 ...

最新文章

  1. jQuery EasyUI 表单插件 - Datebox 日期框
  2. HDOJ 2012 素数判定 解题报告
  3. 5G NGC — BSF 会话绑定支持功能
  4. 大厂面试必问!给培训班出身的程序员一些建议
  5. JVM内存管理机制线上问题排查
  6. 计算机将成为学生们的老师英语,七年级英语(牛津版)第一学期7A完成句子练习题...
  7. 征文通知:第三届(2016)科学数据大会——科学数据与创新发展
  8. 乐视网1354项商标1.3亿元成交,接盘的是这家公司
  9. np.dot、np.outer、np.matmul、np.multipy、np.inner、np.outer与np.cross几个函数之间的区别
  10. Dashboard Design 4.0(Xcelsius)数据直接绑定功能:瑕瑜互见
  11. linux系统怎么设任务计划,在Linux系统上设置计划任务
  12. Taro 小程序开发大型实战(六):尝鲜微信小程序云(上篇)
  13. 图片上传系统在淘系中的实践
  14. sort by age(vector)
  15. 键盘VK键值表---完整
  16. 《Android Studio实战 快速、高效地构建Android应用》--二、在Android Studio中编程
  17. [历史档案]月光如水静静泻
  18. 爬虫中xpath的使用
  19. 感恩工作平台心得体会_心得体会-感恩工作心得体会
  20. 前馈神经网络之神经元及激活函数简介

热门文章

  1. rust模组服如何切换标准服_送给玩模组服的萌新们
  2. python画同心圆程序_python – matplotlib:如何在给定的半径范围内绘制同心圆
  3. hp代码改成linux代码,HP Database Archiving Software远程任意代码执行漏洞
  4. python list遍历删除_Python中list循环遍历删除数据的正确方法
  5. 编写python程序 兀 3_帮忙写一个简单的python程序π_π 要求就是图上的那样 其实挺简单的但我就是写不出来。拜托了,...
  6. java 解析csv 乱码_Java采用opencsv解析csv文件以及解析中文乱码问题
  7. jsessionid
  8. 第五人格pcmac_第五人格:未上线,勘探员已经让庄园内的CP乱了分寸,祭司最绝...
  9. python经典类新式类_Python新式类与经典类(旧式类)的区别
  10. 性能测试报告模板_性能测试新手误区