我正在使用SVN。有时,我在编写提交消息时会错过一些东西。但是一旦提交,就无法还原,甚至我也无法编辑该消息。为什么他们没有在其中添加编辑功能?
git-svn
,没有人会更明智。
我正在使用SVN。有时,我在编写提交消息时会错过一些东西。但是一旦提交,就无法还原,甚至我也无法编辑该消息。为什么他们没有在其中添加编辑功能?
git-svn
,没有人会更明智。
Answers:
根据SVN常见问题解答,如果存储库管理员已启用它,或者您具有对存储库的本地管理访问权限,则可以。
但是,这样做可能不是一个好主意。实际上,您正在改变历史。版本控制的要点之一是维护项目的历史记录和审核跟踪。允许对历史记录进行任意更改会破坏审核跟踪。相反,我建议您执行较小的提交,编写简洁而明确的提交消息,并改善个人工作流程以防止这些错误。
本质上,您必须具有(直接或间接)存储库的管理员权限才能执行此操作。您可以配置存储库以允许所有用户执行此操作,也可以直接在服务器上修改日志消息。
在此处检查SVN 常见问题。
日志消息作为附加到每个修订版的属性保留在资源库中。默认情况下,提交日志消息属性(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选项。但是,如果决定使用此选项,请务必小心。您可能会绕过诸如更改的电子邮件通知或跟踪修订属性的备份系统之类的内容。
从回答卡米尔Kisiel的响应堆栈溢出类似的问题。
因为它是一个集中的版本控制系统 -提交更改(并且提交消息按照约定绑定到提交),所有对存储库具有读取权限的人都可以看到该信息。在信息传播后更改信息是一个坏主意,因为人们最终对“现实”持不同的观点。
像Git这样的分布式版本控制系统通过确保使信息可供他人使用的行为是原子的,并且没有诸如提交消息之类的任何其他信息,从而缓解了此问题。但是,同样的原则也适用于此:不鼓励您在本地更改已经可供他人使用的东西。