可以事后修改 SVN 提交信息吗?

87
我想重新编写大量SVN提交消息的结构,例如在前缀中添加一个类别。 从:

"foo" now accepts "bar" format for connection string.

我希望

core - database - "foo"现在接受连接字符串的“bar”格式。

有没有一种简单的方法可以实现这一点,而不需要使用svndumpfilter倾卸整个存储库?

我正在使用客户端的TortoiseSVN和服务器端的VisualSVN。(VisualSVN是传统svn的包装器,我也可以通过命令行与其通信。)

6个回答

100

是的,提交信息可以更改。它们被实现为修订版本上的属性,类似于常规文件属性。

在TortoiseSVN日志窗口中,您可以右键单击提交并选择“编辑日志消息”。


+1 谢谢。我做了一些涉及API更改的工作,想要将其单独提交,所以我编写了日志消息来反映这一点...然后不小心提交了整个更改。我通过提交一个空格更改和一个解释剩余部分的日志消息来“修复”它!下次我会知道该怎么做。 - Ed Daniel
1
我也给了这个+1,但是它没有工作,并显示了一个消息“存储库尚未启用接受修订属性更改;请询问管理员创建一个pre-revprop-change钩子”。管理员会自动知道该怎么做吗? - J.Merrill
19
你在问我你是否有能力胜任的Subversion管理员? :) - JesperE
@J.Merrill 你需要浏览到存储库位置的 hooks 文件夹,并将 pre-revprop-change.tmpl 重命名为 pre-revprop-change.bat 才能使其正常工作。 - sa_leinad

59

您可以在不影响历史记录的情况下修改日志信息,FAQ中有相关内容。我不确定VisualSVN的命令行界面如何工作,但对于普通的svn,命令应该是

svn propset -r N --revprop svn:log "new log message" URL
如果您想在不转储仓库和重新加载的情况下针对所有修订版本执行此操作,您可以将此命令脚本化以处理所有修订版本的列表。这种方式需要一些时间,具体取决于您的仓库大小,但原则上您是可以做到的,而且它不涉及转储和重新加载。
另外,原始的 SVN 有一个命令 svnlook ,它是一种直接使用存储库文件的管理工具。该工具不理解URL(您必须拥有文件系统级别的访问权限),但速度要快得多。语法略有不同,但您可以使用该工具以相同的方式修改属性。

4
感谢@kazark的帮助,我需要执行svn propedit -r N --revprop svn:log才能在编辑器中更改消息。 - tutuDajuju
3
补充一下:默认情况下,该命令不起作用,因为默认情况下不允许更改版本属性。为了允许更改,svn管理员必须创建一个名为“pre-revprop-change”的钩子。如上所述,此信息在常见问题解答中提到。 - Matthias
在Windows系统中,运行该命令之前,您需要设置环境变量"SVN_EDITOR"、"VISUAL"或"EDITOR"。例如:set SVN_EDITOR=notepad.exe - Enwired

27

是的,你可以这样做,但你需要先在仓库中启用它。

在仓库中的hooks目录下,有一个名为pre-revprop-change.tmpl的文件。它有几页注释说明它的作用,并设置为仅允许更改日志属性。要启用它,请将文件重命名为pre-revprop-change并使其可执行(如果你使用Windows主机托管,则可能会发现此消息有用)。

一旦仓库允许,你可以使用Tortoise从提交的右键菜单更改日志消息,或者你可以使用命令行。


非常好的信息,先生。如果没有预先revprop更改钩子,我将无法执行它。我需要将模板bash脚本移植到Windows上,但这应该不是问题。 - Pekka
我添加了一个示例命令脚本的链接:http://svn.haxx.se/users/archive-2006-03/0107.shtml - Andrew Aylett

7

3

svn propedit -r N --revprop svn:log URL

如果您已经在工作目录中,则上述的URL是可选的。然后,将会出现一个编辑器,以便更改消息。


1

我刚刚遇到了与此帖子完全相同的问题,客户端使用Tortoise SVN,服务器上使用VisualSVN。

如果您遇到“DAV请求失败”错误消息,请查看Andrew Aylett的答案并编辑存储库钩子子目录中的“pre-revprop-change.tmpl”。

完成后,单击上下文菜单中的“编辑日志消息”即可正常工作!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接