`
llyzq
  • 浏览: 577740 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Subversion的有用配置

阅读更多

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

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

本文来自[Svn中文网]转发请保留本站地址:http://www.svn8.com/svnpz/20090624/6771.html

分享到:
评论

相关推荐

    使用Subversion进行版本控制(针对 Subversion 1.4)

    混合版本很有用 混合版本有限制 总结 2. 基本使用 求助! 导入数据到你的版本库 svn import 推荐的版本库布局 初始化检出 禁用密码缓存 用其它身份认证 基本的工作周期 更新你的工作拷贝 修改你的工作拷贝 检查你的...

    利用Subversion进行版本控制

    个人编写的利用Subversion进行版本控制的配置说明,很有用的,呵呵

    在线版本控制之SubVersion与MyEclipse整合_好资源0分送

    好久以前学习的SubVersion,这几天突然觉得它很有用,现在又重新学习了一下,发现真的从中学了好多知识,特别是风中叶老师的pdf给了我很大帮助。 Subversion能够实现在线版本管理,这样在一个大的项目里,就不会因为...

    scm-manager:通过http共享和管理Git,Mercurial和Subversion存储库的最简单方法

    无需修改配置文件,SCM-Manager完全可以从其Web接口进行配置 无需Apache,无需安装数据库 中央用户,组和权限管理 对Git,Mercurial和Subversion的开箱即用支持 完整的RESTFul Web服务API(JSON和XML) 丰富的用户...

    vagrant-proxyconf:Vagrant插件,用于配置虚拟机以使用代理

    该插件可以设置: 许多程序支持的通用http_proxy等环境变量所有Chef预配者的默认代理配置Apt的代理配置Docker的代理配置Git的代理配置npm的代理配置PEAR的代理配置Subversion的代理配置Yum的代理配置Windows的简单...

    Cornerstone_4.1破解版mac版SVN客户端

    这意味着您可以在Mac上安装项目后立即开始工作,因为它允许您使用最新版本的Subversion而无需担心升级安装或从头开始安装Subversion并浪费时间将其配置为在您的计算机上正常工作。 作为一个额外的优势,Cornerstone...

    SVN使用手册中文版快速入门

    其他有用的命令 svn cleanup svn import 摘要 4. 分支与合并 什么是分支? 使用分支 创建分支 在分支上工作 分支背后的关键概念 在分支间拷贝修改 拷贝特定的修改 合并背后的关键概念 合并的最佳实践 手工追踪合并 ...

    SVN使用手册中文版.chm

    其他有用的命令 svn cleanup svn import 摘要 4. 分支与合并 什么是分支? 使用分支 创建分支 在分支上工作 分支背后的关键概念 在分支间拷贝修改 拷贝特定的修改 合并背后的关键概念 合并的最佳实践 手工追踪合并 ...

    SVN服务器VS2005客户端part2

    通过 Elliotte 的介绍,您可看到如何在 Eclipse 中配置 Subversion 支持(通过 Subclipse 插件)、检出一个项目、与您的存储库同步,随后执行一些常用的操作,如合并、修补、比较和删除。 版本控制之于程序员,就...

    SVN服务器与VS2005客户端par1

    通过 Elliotte 的介绍,您可看到如何在 Eclipse 中配置 Subversion 支持(通过 Subclipse 插件)、检出一个项目、与您的存储库同步,随后执行一些常用的操作,如合并、修补、比较和删除。 版本控制之于程序员,就...

    liquidprompt:针对Bash和Zsh的功能齐全且经过精心设计的自适应提示

    Liquid Prompt(液体提示)— Bash和zsh的有用的自适应提示 当需要时,Liquid Prompt会为您提供一个显示良好的提示,其中包含有用的信息。 它向您显示您在需要时需要的东西。 您会注意到变化时会发生什么变化,从而...

    Nick's Python Toolchest:一堆有用的Python杂物-开源

    Nxpy是一个Python库,它将通用功能与一组更适合于构建自动化和源代码管理的工具结合在一起。 它提供了方便的方法来... 它还包含ClearCase,Maven和Subversion的包装,以及用于操纵Maven和Visual Studio配置文件的工具。

    progit(git中文文档)

    *第九章*对比 Git 和其它 VCSs,包括在 Subversion(SVN)的世界使用 Git 以及从其它 VCSs 迁移到 Git。很多 组织 仍在使用 SVN,并且也没有计划改变,此时,你将了解到 Git 不可思议的能力——本章将展示,在你不得不 ...

    MSDN杂志 2008年新产品特刊

    <br>IIS 7.0: 构建具有端到端可扩展性的 Web 服务器解决方案 Mike Volodarsky 通过将“响应修改”扩展到可配置的 Web 服务器模块和 IIS 管理器的自定义管理页,向用户演示了 IIS 7.0 的可扩展模型。...

    TortoiseSVN中文手册

    2.3. Subversion 实战 ..................................................... 9 2.3.1. 工作副本 ...................................................... 9 2.3.2. 版本库的 URL .................................

Global site tag (gtag.js) - Google Analytics