有没有等同于git prepare commit message hook的SVN

Is there an SVN equivalent to the git prepare commit message hook

我想编辑传入的提交消息(添加分支名称,或添加忽略某些行的模板等)。在搜索时,我发现 git 有一个准备提交消息挂钩,它似乎可以执行此操作,但 svn 没有。在 post 提交之前,有没有办法在 svn 中执行此操作?

在极少数情况下,可能可以使用 Subversion 更改传入事务,因此不建议或不支持这样做。

在SVN中您不需要使用钩子脚本来添加日志消息模板:

  • 使用 TortoiseSVN 客户端,您可以而且应该使用 tsvn:* properties.

  • 使用 vanilla svn.exe 命令行客户端,使用 CMD_EDITOR 环境变量来定义要调用的日志消息或让它根据提交中的更改。

  • Use SVN hook scripts to validate, not modify.

  • 在 SVN 中调整现有修订的日志消息通常是一个单行命令。默认情况下禁止修改日志消息。管理员始终可以允许所有用户或仅某些用户使用此功能。

我猜你已经在使用 TortoiseSVN 客户端了,因为问题被标记为 标签。 TortoiseSVN 支持几个可以帮助您定义客户端行为的属性。他们将帮助您实施提交策略,包括日志消息限制和模板:

  • tsvn:logminsize 定义传入修订的日志消息必须包含的最少字符数。

  • tsvn:logtemplate 将帮助您定义默认日志消息模板。您可以使用 8 个额外的 tsvn:logtemplate 属性为不同类型的提交添加不同的模板。

  • tsvn:logsummary 将帮助您定义正则表达式以获取一部分提交消息,并在您使用 TortoiseSVN 查看修订历史日志时将其显示为摘要。

有关完整的属性列表及其用途,请参阅手册的 TortoiseSVN Project Properties 章节。


您必须使用 git 的 pre-commit 挂钩来验证日志消息并添加提交消息模板。如果您不这样做,修复日志消息中的错误的过程需要您使用可能非常重要的 git rebase。可能还有其他方法可以添加日志消息策略,但在 git 的世界中,您必须为此使用挂钩脚本。

不要忘记 svn commitgit commit 操作在使用 git 或 SVN 的常见工作流中扮演不同的角色。 svn commitgit commit 操作的整体思路和结果是不同的。因此,*-commit 钩子在两个系统中有不同的目标:

  • 运行 git 在您的本地 git 存储库中提交 是一个本地的、仅限客户端的操作。当您在 git 中提交时,您只制作了一个本地快照,而无需联系受祝福的远程存储库。在这种情况下,使用本地挂钩来自定义客户端的默认行为应该是完全没问题的。您的本地更改不会影响其他 git 用户,除非您通过推送或拉取来发布它们。这是 git 工作流程的一部分,需要您最大限度地关注日志消息——重写提交的数据(包括日志消息)将迫使您的同事搁置当前任务并开始手动修复他们的本地回购协议。

  • 但是当您 运行 svn commit 时,您联系远程服务器以将您的本地更改发布到存储库并以表单形式提供对其他开发人员的新修订。即使您在提交到 SVN 时在日志消息中出错,您也可以随时自行调整或询问具有此类权限的同事。简单无害。