1. TortoiseSVN属性
1.1. 文件夹属性tsvn:
属性tsvn:只能在文件夹设置。当你提交文件或文件夹时,这些属性从文件夹读取。如果没有发现这些属性,TortoiseSVN会向上级目录搜索,直到未版本控制的文件夹,或到达根目录(例如 C:\) 。如果你确认每个用户都是从同一个目录检出,例如 trunk/,而不是其它子目录,那么只在 trunk/设置属性就足够了。如果你不能确定,那么应当递归的设置每个子目录。深层的设置覆盖高层的设置 (靠近 trunk/)。
对于tsvn:属性,你只能对于所有子目录使用递归检查框设置属性,不能设置文件的属性。
1.1.1. tsvn:logminsize
设置提交日志的最小长度。如果你输入的日志短于预设值,提交会被禁止。这个属性对于提醒你为每次提交提供一个适当的描述信息非常有用。如果不设置这个属性,或者设置为0,那么就允许空提交信息。
1.1.2. tsvn:lockmsgminsize
设置锁定日志的最小长度。如果你输入的日志短于预设值,加锁会被禁止。这个属性对于提醒你为每次加锁提供一个适当的描述信息非常有用。如果不设置这个属性,或者设置为0,那么就允许空加锁信息。
1.1.3. tsvn:logwidthmarker
用在要求日志信息被格式化为在最大宽度(典型是80字符)处换行非常有用。设置此属性为大于0的值会在日志消息对话框中做两件事:放置一个标记指示最大宽度,和禁止自动换行,于是你可以看到输入的信息是否太长。注意:这个特性仅在你选择的消息使用固定宽度字体时才能正确工作。
1.1.4. tsvn:logtemplate
在需要定义日志消息格式化规则的工程中使用。在你开始提交时,这个属性的多行消息会被插入日志消息编辑框。你可以编辑它以便包含需要的信息。注意:如果你使用了tsvn:logminsize属性,请确认这个长度大于模版的长度,不然就会失去其保护作用。
1.1.5. tsvn:logfilelistenglish
在提交对话框,你可以复制修改的文件列表,包含每个文件的状态(增加,修改等)。tsvn:logfilelistenglish定义了文件状态用英文插入,还是用本地消息插入。此属性的默认值是真。
1.1.6. tsvn:projectlanguage
TortoiseSVN可以使用OpenOffice和Mozilla使用的拼写检查模块。如果你安装了这些模块,那么这个属性将检测使用哪个拼写检查模块。也就是,你的工程的日志信息用的语言。tsvn:projectlanguage设置拼写检查引擎应该使用什么语言模块来检查日志信息。你可以在这个叶面找到你的语言的取值:MSDN: 语言标示符。
你可以用十进制输入取值,如果用0x前缀的话,也可以用十六进制。例如英语(美国英语)可以输入0x0409或者1033。
一些 tsvn: 属性需要 true/false值。它也理解 yes 是 true 的同义词,no 是 false的同义词。
1.2. 文件属性svn:
1.2.1. svn:executable
- • svn:executable属性用来控制一个版本化的文件自动执行文件权限设定,这个属性没有特定的值—它只是说明一个Subversion可以保留的文件权限的期望值,删除这个属性会恢复操作系统对这些权限的完全控制。
- 在多数操作系统,执行一个文件或命令的能力是由执行位管理的,这些位通常是关闭的,必须由用户显式的指定,这意味着你必须改变文件的执行位,然后更新你的工作拷贝,燃火如果你的文件成为更新的一部分,它的执行位会被关闭,所以Subversion提供了svn:executable这个属性来保持打开执行位。
- 这个属性对于没有可执行权限位的文件系统无效,如FAT32和NTFS。 [33] 也就是说,尽管它没有定义的值,在设置这个属性时,Subversion会强制它的值为*,最后,这个属性只对文件有效,目录无效。
1.2.2. svn:mime-type
- svn:mime-type属性为Subversion的许多目的服务,除了保存一个文件的多用途网际邮件扩展(MIME)分类以外,这个属性值也描述了一些Subversion自己使用的行为特性。
- 举个例子,如果一个文件svn:mime -type属性设置为非文本的MIME类型(通常是那些不是text/开头的类型,但也有例外),Subversion会假定这个文件保存了二进制内容— 也就是不可读的—数据。一个好处就是Subversion通常在更新到工作拷贝时提供了一个前后相关的以行为基础的修改合并,但是对于保存二进制数据的文件,没有“行”的概念,所以对这些文件,Subversion不会在更新时尝试执行合并操作,相反,任何时候你在本地修改的一个二进制文件有了更新,你的文件会被重命名为.orig为扩展名,然后Subversion保存一个新的工作拷贝文件,保存更新时得到的修改,但原来的文件名已经不是你自己的本地修改。这个行为模式是用来保护用户在对不可文本合并的文件尝试执行文本的合并时失败的情形。
- 另外,如果svn:mime-type属性被设置,Subversion的Apache模块会使用这个值来在HTTP头里输入Content-type:,这给了web浏览器如何显示一个文件提供了至关重要的线索。
1.2.3. svn:ignore
- 这个svn:ignore属性保存了一个Subversion特定操作忽略的文件模式列表,或许这个是最常用的属性,它可以与global-ignores运行配置选项配合使用(见“config”一节)来过滤svn status、svn add和svn import命令中操作的未版本化文件。
- svn:ignore背后的基本原理很容易解释,Subversion不会假定工作拷贝中的所有文件或子目录是版本控制的一部分,资源必须被显式的使用svn add或者svn import放到Subversion的管理控制之下,作为结果,经常有许多工作拷贝的资源并没有版本化。
- 现在,svn status命令会的显示会包括所有未纳入版本控制且没有用global-ignores(或是内置的缺省值)过滤掉的文件和子目录,这样可以帮助用户查看是否忘记了把某些自愿加入到版本控制。
- 但是Subversion不可能猜测到每个需要忽略的资源的名字,但是也有一些资源是所有特定版本库的工作拷贝都有忽略的,强制版本库的每个用户来添加这些模式到他们的运行配置区域不仅仅是一个负担,也会与用户取出的其他工作拷贝配置需要存在潜在的冲突。
- 解决方案是保存的忽略模式必须对出现在给定目录和这个目录本身的资源是独立的,一个常见的例子就是一个未版本化资源对一个目录来说是唯一的,会出现在那个位置,包括程序编译的输出,或者是—用一个本书的例子—DocBook的文件生成的HTML、PDF或者是PostScript文件。
1.2.4. svn:keywords
- Subversion具备有添加关键字的能力—一些有用的,关于版本化的文件动态信息的片断—不必直接添加到文件本身。关键字通常会用来描述文件最后一次修改的一些信息,因为这些信息每次都有改变,更重要的一点,这是在文件修改之后,除了版本控制系统,对于任何处理完全保持最新的数据都是一场争论,作为人类作者,信息变得陈旧是不可避免的。
- 举个例子,你有一个文档希望显示最后修改的日期,你需要麻烦每个作者提交之前做这件事情,同时会改变描述这部分细细的部分,但是迟早会有人忘记做这件事,不选择简单的告诉Subversion来执行替换LastChangedDate关键字的操作,在你的文档需要放置这个关键字的地方放置一个keyword anchor,这个anchor只是一个格式为$KeywordName$字符串。
- 所有作为anchor出现在文件里的关键字是大小写敏感的:为了关键字的扩展,你必须使用正确的按顺序大写。你必须考虑svn:keywords的属性值也是大小写敏感—特定的关键字名会忽略大小写,但是这个特性已经被废弃了。
- Subversion定义了用来替换的关键字列表,这个列表保存了如下五个关键字,有一些也包括了可用的别名:
Date
这个关键字保存了文件最后一次在版本库修改的日期,看起来类似于$Date: 2002-07-2221:42:37 -0700 (Mon, 22 Jul 2002) $,它也可以用LastChangedDate来指定。
Revision
这个关键字描述了这个文件最后一次修改的修订版本,看起来像$Revision: 144 $,也可以通过LastChangedRevision或者Rev引用。
Author
这个关键字描述了最后一个修改这个文件的用户,看起来类似$Author: harry $,也可以用LastChangedBy来指定。
HeadURL
这个关键字描述了这个文件在版本库最新的版本的完全URL,可以缩写为URL。
Id
这个关键字是其他关键字一个压缩组合,它看起来就像$Id: calc.c 1482002-07-28 21:30:43Z sally $,可以解释为文件calc.c上一次修改的修订版本号是148,时间是2002年7月28日,作者是sally。
· 只在你的文件增加关键字anchor不会做什么特别的事情,Subversion不会尝试对你的文件内容执行文本替换,除非明确的被告知这样做,毕竟,你可以撰写一个文档 [36] 关于如何使用关键字,你希望Subversion不会替代你漂亮的关于不需要替换的关键字anchor实例!
· 为了告诉Subversion是否替代某个文件的关键字,我们要再次求助于属性相关的子命令,当svn:keywords属性设置到一个版本化的文件,这些属性控制了那些关键字将会替换到那个文件。这个值是空格分隔的前面列表的名称或是别名列表。
1.2.5. svn:eol-style
- 不像我们说过的版本化文件的svn:mime-type属性,Subversion假定这个文件保存了可读的数据,一般来讲,Subversion因为这个属性来判断一个文件是否可以用上下文区别报告,否则,对Subversion来说只是字节。
- 这意味着缺省情况下,Subversion不会关注任何行结束标记(end-of-line,EOL),不幸的是不同的操作系统在文本文件使用不同的行结束标志,举个例子,Windows平台下的A编辑工具使用一对SCII控制字符—回车(CR)和一个移行(LF)。Unix软件,只使用一个LF来表示一个行的结束。
- 并不是所有操作系统的工具准备好了理解与本地行结束样式不一样的行结束格式,一个常见的结果是Unix程序会把Windows文件中的CR当作一个不同的字符(通常表现为^M),而 Windows程序会把Unix文件合并为一个非常大的行,因为没有发现标志行结束的回车加换行(或者是CRLF)字符。
- 对外来EOL标志的敏感会让在各个操作系统分享文件的人们感到沮丧,例如,考虑有一个源代码文件,开发者会在Windows和Unix系统上编辑这个文件,如果所有的用户使用的工具可以展示文件的行结束,那就没有问题。
- 但实践中,许多常用的工具不会正确的读取外来的EOL标志,或者是将文件的行结束转化为本地的样式,如果是前者,他需要一个外部的转化工具(如 dos2unix或是他的伴侣,unix2dos)来准备需要编辑的文件。后一种情况不需要额外的准备工作,两种方法都会造成文件会与原来的文件在每一行上都不一样!在提交之前,用户有两个选择,或者选择用一个转化工具恢复文件的行结束样式,或者是简单的提交文件—包含新的EOL标志。
- 这个情景的结局看起来像是要浪费时间对提交的文件作不必要的修改,浪费时间是痛苦的,但是如果提交修改了文件的每一行,判断那个文件是通过正常的方式修改的会是一件复杂的工作,bug在那一行修正的?那一行引入了语法错误?
- 这个问题的解决方案是svn:eol-style属性,当这个属性设置为一个正确的值,Subversion使用它来判断针对行结束样式执行何种特殊的操作,而不会因为多种操作系统的每次提交发生震荡。正确的值有:
native
- 这会导致保存EOL标志的文件使用Subversion运行的操作系统的本地编码,换句话说,如果一个Windows用户取出一个工作拷贝包含的一个文件有svn:eol-style的属性设置为native,这个文件会使用CRLF的EOL标志,一个Unix用户取出相同的文件会看到他的文件使用LF的EOL标志。
- 注意Subversion实际上使用LF的EOL标志,而不会考略操作系统,尽管这对用户来说是透明的。
CRLF
- 这会导致这个文件使用CRLF序列作为EOL标志,不管使用何种操作系统。
LF
- 这会导致文件使用LF字符作为EOL标志,不管使用何种操作系统。
CR
- 这会导致文件使用CR字符作为EOL标志,不管使用何种操作系统。这种行结束样式不是很常见,它用在一些老的苹果机(Subversion不会运行的机器上)。
1.2.6. svn:externals
- svn:externals属性保存了指导Subversion从一个或多个取出的工作拷贝移出目录的指示。
- svn:externals属性如果出现在一个目录上,则这个值就是客户端必须要检出的路径和URL列表
1.2.7. svn:special
- svn:special是唯一一个不是用户直接设置和修改的svn:属性,当“特别的”对象如一个对象链接计划加入到版本库,Subversion会自动设置这个属性。版本库像普通文件一样保存svn:special对象,然而,当一个客户端在检出和更新操作时看到这个属性时,就会翻译这个文件的内容,并且将文件转化为特殊类型的对象,在Subversion目前的版本中,只有版本化的符号链接有这个属性附加,但在以后的版本中其它特殊的节点也有可能使用这个属性。
- 注意:Windows客户端不会有符号链接,因此会忽略含有svn:special声明为符号链的文件,在Windows,用户会以一个工作拷贝中的版本化的文件作为结束。
1.2.8. svn:needs-lock
这个属性用来标示这个文件在编辑之前需要锁定,属性值无所谓,Subversion会规格化为*。当有这个值时,除非用户锁定这个文件,否则文件一直是只读的。当得到一个锁定令牌(运行svn lock的结果),文件变成可读写,当释放这个锁后,文件又变成只读。
1.3. 与BUG跟踪系统/问题跟踪集成bugtraq:
1.3.1. bugtraq:url
将这个属性设置为你的bug跟踪工具的地址。它必须编码并且包含%BUGID%。%BUGID%用你输入的问题编号替换。它允许TortoiseSVN 在日志对话框中显示链接,于是你可以在察看版本日志时直接进入bug跟踪工具。你可以不提供这个属性,但是这样TortoiseSVN就不能显示链接了,只能显示问题编号。例如TortoiseSVN 使用http://issues.tortoisesvn.net/?do=details&id=%BUGID%。
1.3.2. bugtraq:warnifnoissue
如果你想TortoiseSVN给出空问题编号的警告,就设置为 真。有效取值是 真/假。如果没有定义,那么假定为 假。在最简单的方法里,TortoiseSVN为用户显示了一个单独的bug ID输入字段,然后后面预计会追加一个用户输入日志信息的行。
1.3.3. bugtraq:message
这个属性将问题追踪系统激活为输入框模式。 如果设置了这个属性,在拟提交时,TortoiseSVN会提示你输入问题单号码。它通常会在日志信息后面添加一行。必须包含%BUGID%,在提交时会被替换为问题单号。这确保了你的提交日志包含了问题单号,保证了单号可以被问题追踪工具解析,从而与提交关联。例如TortoiseSVN项目使用Issue : %BUGID%,但是这依赖于你的工具。
1.3.4. bugtraq:append
这个属性定义了bug-ID。是追加到(true)日志信息的末尾,还是插入到(false)日志信息的开始。有效的值包括true/false,如果没有定义,默认是true ,所以现存的项目不会被打破。
1.3.5. bugtraq:label
是TortoiseSVN的提交对话框中用来输入问题单号码的输入项,如果没有设置,将会显示Bug-ID / Issue-Nr:,要记住窗口不会为适应标签而改变大小,所以请保持标签的小于20-25个字符。
1.3.6. bugtraq:number
如果设置为true,问题单号文本框只能输入数字,一个例外是逗号,所以你可以使用逗号分割输入的多个号码。合法的值包括true/false, 如果没有设置,默认是true。
2. Svn自动属性tsvn:autoprops
Subversion的属性是非常好用的功能,它将一些工作自动化,实现为受版本控制的源文件添加元信息的作用。属性是外部不可见的,可以简单认为是附加上在文件上的信息,和文件大小之类的信息是一样的,只不过他是通过subversion来管理的。属性的名称和值可以是你希望的任何值,限制就是名称必须是可读的文本,并且最好的一点是这些属性也是版本化的,就像你的文本文件内容,你可以像提交文本修改一样修改、提交和恢复属性修改,当你更新时也会接收到别人的属性修改—你不必为适应属性改变你的工作流程。
Subversion保留了一组名称以svn:开头的属性,来预定义一些有用的功能。比如你常会看到一些人的源代码底部有像下面之类标识的文字:
$Id: Test.java 12 2011-03-31 15:05:05Z admin $
这就使用了Subversion 中的 svn:keywords的自动属性,它让将发生在源代码中的一些属性的变化自动地更新到源代码中。这行字的意思是表示,Test.java 这个源代码文件最后被用户 admin更新于 2011-03-31 15:05:05Z,修订版本号为 12。要实现这样的自动更新,你只要对需要这样属性的文件上使用下面这行指令。
> svn propset svn:keywords"Id" Test.java
或者使用TortoiseSVN中的Properties的操作按钮,方便地增加新的属性。接着需要在源代码文件中需要 Subversion 进行自动更新的地方插入 $Id$ 这样的 Keyword,那么在你下次进行提交更新时,该$Id$ 就会被 Subversion 自动替换为$Id: Test.java 122011-03-31 15:05:05Z admin $ 这样的格式。
Subversion 中可以使用的Keyword 包括下面这些:
*Id
上面介绍过的综合的格式
*LastChangedDate
最后被修改的时间,缩写为 Date。
*LastChangedBy
最后修改该源代码文件的用户名,缩写为 Author。
*LastChangedRevision
最后修订的版本号,缩写为 Revision。
如果想每次向Subversion服务器提交文件修改时,都要设置文件的属性,则需要进行Subversion配置的修改。配置文件在你用户的主目录下,在Windows下应类似于C:\Documents andSettings\admin\Application Data\Subversion\config文件,admin是Windows用户名,注意Application Data是隐藏文件夹,需要显示全部文件才能看到。接着如下相应的修改,对你想要处理的文件做配置。
enable-auto-props= yes
[auto-props]
*.java = svn:keywords=Id Author Rev Date