小编典典

如何编辑已在 Subversion 中提交的日志消息?

all

有没有办法在 Subversion 中编辑某个版本的日志消息?我不小心在我的提交消息中写了错误的文件名,这可能会在以后造成混淆。

我已经看到 如何在 Git 中编辑不正确的提交消息? ,但该问题的解决方案似乎与 Subversion
不同(根据svn help commit)。


阅读 89

收藏
2022-03-08

共1个答案

小编典典

本质上,您必须拥有存储库的管理员权限(直接或间接)才能执行此操作。您可以将存储库配置为允许所有用户执行此操作,也可以直接在服务器上修改日志消息。

请参阅SubversionFAQ这一部分(强调我的):

日志消息作为附加到每个修订版的属性保存在存储库中。 默认情况下,日志消息属性(svn:log)一旦提交就无法编辑 。这是因为对修订属性(其中
svn:log 是其中之一)的更改会导致该属性的先前值被永久丢弃,并且 Subversion 会试图防止您意外地这样做。但是,有几种方法可以让
Subversion 更改修订属性。

第一种方法是让存储库管理员启用修订属性修改。这是通过创建一个名为“pre-revprop-
change”的钩子来完成的(有关如何执行此操作的更多详细信息,请参见 Subversion 手册中的此部分)。“pre-revprop-
change”钩子可以在旧日志消息被更改之前访问它,因此它可以以某种方式保留它(例如,通过发送电子邮件)。启用修订属性修改后,您可以通过将
–revprop 开关传递给 svn propedit 或 svn propset 来更改修订的日志消息,如下所示:

$svn propedit -r N --revprop svn:log URL
$svn propset -r N --revprop svn:log "new log message" URL

其中 N 是您希望更改其日志消息的修订号,URL 是存储库的位置。如果从工作副本中运行此命令,则可以省略 URL。

更改日志消息的第二种方法是使用 svnadmin setlog。 这必须通过参考存储库在文件系统上的位置来完成。
您不能使用此命令修改远程存储库。

$ svnadmin setlog REPOS_PATH -r N FILE

其中 REPOS_PATH 是存储库位置,N 是您希望更改其日志消息的修订号,FILE 是包含新日志消息的文件。如果“pre-revprop-
change”钩子没有到位(或者由于某种原因你想绕过钩子脚本),你也可以使用 –bypass-hooks
选项。但是,如果您决定使用此选项,请务必小心。您可能会绕过诸如更改的电子邮件通知或跟踪修订属性的备份系统之类的东西。

2022-03-08