在不更改文件的情况下为subversion添加注释?

时间:2012-04-10 16:20:34

标签: svn version-control tortoisesvn

我想在给定文件的subversion日志或历史记录中添加注释,但没有与该文件关联的更改。

有没有办法在不实际更改文件的情况下在svn日志中添加或注入注释。

我正在寻找一种方法,可以在某些事件发生后在日志中标记文件,例如代码审查。

我不想做svn副本来创建一个全新的分支。我只想在某个时间点将评论与单个文件相关联。

这里有什么建议吗?

2 个答案:

答案 0 :(得分:5)

在Subversion中,有两种类型的属性:

  • 文件属性:这些是与文件关联的属性。它们被修改,好像它们是文件本身的一部分。
  • 修订版属性:这些是与各个修订相关联的属性。每个版本只能有一种属性。它们没有版本,因此更改版本属性将丢失有关旧信息的历史信息。作为安全预防措施,如果没有先创建允许您执行此操作的pre-revprop-change挂钩,则无法更改版本属性。

最重要的是,与每个修订相关联的三个特殊修订属性非常重要:

  • svn:log :这是提交消息
  • svn:date :这是提交完成的日期和时间。
  • svn:author :这是执行提交的用户。

所以,问题是你想做什么。如果要向文件添加注释,可以将文件属性添加到该文件。但是,这被认为是文件更改,因此您必须执行签出svn pset,然后执行提交,在该文件上创建新修订。

如果要向存储库中的特定修订添加新注释,则不必创建新修订即可。但是,您必须创建一个允许您进行这些修改的pre-revprop-commit挂钩文件。您有两种方法:

  • 使用您的评论修改svn:log 这可能是最简单的方法。但是,不会记录提交消息中的更改,因此您将丢失进程中的原始提交消息。优点是此注释将使用svn:log命令自动显示。

例如:

$ old_comment=$(svn pget -r 100 -revprop svn:log http://myhost/svn/repos)
$ new_comment="$old_comment
> ================ COMMENT ON REVISION ================
> This was a change needed for a particular customer"
$ svn pset -r 100 --revprop svn:log "$new_comment"
  • 您还可以创建包含注释的新修订版本属性。例如corp:comment(我使用corp表示与我公司相关的特殊属性)。您可以在svn log消息中显示这些注释,但只能以xml格式显示。

例如:

$ svn pset --revprop -r 100 foo:comment "This was a change needed for a particular customer" http://host/svn/repos

现在,当您执行日志时,您可以看到该评论:

$ svn log --with-revprop foo:comment --xml -r 100 http://host/svn/repos
<?xml version="1.0"?>
<log>
<logentry
   revision="100">
<revprops>
<property
   name="foo:comment">This was a change needed for a particular customer</property>
</revprops>
</logentry>
</log>

答案 1 :(得分:3)

您可以在应提交的文件上设置/更改用户定义的属性 - 即仅更改某些元数据而不会产生副作用。

svn propset my:log reason filename
svn commit filename