默认情况下是否有办法启用svn:keywords,以便每次添加新的源文件时都不需要为每个关键字启用此属性?
答案 0 :(得分:11)
是的,使用Subversion自动属性:http://www.dcepler.net/post.cfm/subversion-auto-properties
[auto-props]
部分的每个条目都是文件glob,后跟Subversion属性,以便在匹配glob的文件添加时自动应用。例如,如果您希望所有CPP文件默认具有一组特定属性,请按照http://www.dcepler.net/post.cfm/subversion-auto-properties上的说明操作,并根据您的偏好修改以下行:
*.cpp = svn:eol-style=native; svn:keywords="Author Date Id Rev URL"; svn:mime-type=text/plain
请注意,如果您添加了带有svn add
的文件并随后启用了自动属性,则自动属性将不会应用于添加的文件。自动属性仅应用于启用自动属性后添加的文件。
答案 1 :(得分:3)
如上所述,您可以使用自动属性来执行此操作,但您应该问自己一个大问题:
在进行开发时,您可以轻松使用各种svn
命令来获取存储在关键字中的任何信息,因此这不是必需的。
有些人声称,一旦软件在客户网站上,关键字就是必需的,但是有更好的机制可用于验证您正在使用的软件版本。例如,在编译期间,您可以创建一个具有更有意义的修订版ID(可能是版本号和构建日期)的文件,并将其显示为“关于框”的类型。 ID更有意义。
我也知道我不相信可能在客户站点中的shell脚本中包含的关键字。 shell脚本可能会说修订号,但shell脚本可能已被编辑。
如果你确实需要这个,并且需要在你的网站上强制执行,那么当关键字属性不在文件上时,你需要一个预提交触发器来失败。只能为客户端设置自动属性。这意味着您必须确保每个开发人员都拥有此设置。每次他们购买新计算机时,您都必须再次验证它。
也不保证该属性在文件中。即使编辑了存储库中的旧文件也不会神奇地添加它们。 (仅在将文件添加到存储库时添加自动属性)。没有什么可以阻止开发人员删除它。或者,在他们的设置中编辑他们的自动属性。
您必须使用预提交触发器来保证svn:keywords属性位于每个需要它的文件上并且设置正确。预提交钩子将简单地拒绝提交未设置此属性的事务。开发人员将被迫添加该属性。在紧张之后,开发人员将设置他们的Subversion客户端以使用自动属性并自行维护。
我碰巧有pre-commit trigger可以强制执行此操作。触发器是用Perl编写的,但只需要标准模块,因此很容易设置。您可以对其进行配置,以说明哪些文件需要关键字以及应该设置的关键字。如果正在提交文件并且没有将svn:keywords属性设置为正确的值,则提交将失败,并且错误消息将解释提交失败的原因以及开发人员需要执行的操作。
答案 2 :(得分:1)
在我们的PL / SQL程序(和SQL脚本)中存储SVN关键字为开发过程和系统完整性增加了重要价值。当更改发送到生产时,它将由Revision关键字进行跟踪和管理。在实现此操作之前,移动文件以及确保正在部署正确文件的过程非常容易出错。此外,我们可以查询数据库中的版本数据(参见下面的SQL)。
--
--------- Begin Version Control Data----------------------------------------
-- $LastChangedDate: 2014-06-27 13:45:09 -0500 (Fri, 27 Jun 2014) $
-- $Revision: 1750 $
-- $LastChangedBy: kilarvk $
-- $URL: svn://jdcsubv01/SQL/JDC/Trunk/JDC_UTIL.pks $
--------- End Version Control Data -----------------------------------------
--
--select SVN Keyword Info
SELECT OWNER,
NAME,
TYPE,
SUBSTR(TEXT,INSTR(TEXT,'$')-1) AS KEYWORD
FROM ALL_SOURCE
WHERE OWNER = UPPER(NVL('&owner',OWNER))
AND NAME = UPPER(NVL('&&pgm_name',NAME))
AND (text LIKE '%$Revision%'
OR TEXT LIKE '%$URL%'
OR TEXT LIKE '%$Id%'
OR TEXT LIKE '%$LastChanged%')
示例:
JDCSCHEMA API_TESTER_AGNT PROCEDURE $LastChangedDate:
2014-04-08 15:33:38 -0500 (Tue, 08 Apr 2014) $
JDCSCHEMA API_TESTER_AGNT PROCEDURE $Revision: 1445 $
JDCSCHEMA API_TESTER_AGNT PROCEDURE $LastChangedBy: vamsisx $
JDCSCHEMA API_TESTER_AGNT PROCEDURE $URL:svn://jdcsubv01/SQL/JDC/Trunk/API_TESTER_AGNT.prc $