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

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

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


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

看到这部分Subversion常见问题(重点是我的):

日志消息作为每个修订附加的属性保存在存储库中。 默认情况下,日志消息属性(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选项。 但是,如果您决定使用此选项,请非常小心。 您可能会绕过变更的电子邮件通知或跟踪修订属性的备份系统等。


当你运行这个命令时,

svn propedit svn:log --revprop -r NNN 

以防万一你看到这个消息:

DAV请求失败; 有可能存储库的pre-revprop-change挂钩失败或不存在

这是因为Subversion不允许你修改日志消息,因为它们未版本化并且会永久丢失。

转到Subversion服务器上的hooks目录(将〜/ svn / reponame替换为存储库的目录)

cd ~/svn/reponame/hooks

删除扩展名

mv pre-revprop-change.tmpl pre-revprop-change

让它可执行(不能做chmod + x!)

chmod 755 pre-revprop-change

资源


这里有一个方便的变化,我没有看到在常见问题解答中提到。 您可以通过指定文本编辑器来返回当前消息进行编辑。

svn propedit svn:log --revprop -r N --editor-cmd vim
链接地址: http://www.djcxy.com/p/37521.html

上一篇: How to edit log message already committed in Subversion?

下一篇: Checkout one file from Subversion