我们可以使用 svn hooks 更改默认的 svn 提交模板吗

Sha*_*har 1 svn svn-hooks

我主要想在执行 svn 提交时即时更改我的默认提交模板(svn-commit.tmp)。我从论坛上了解到设置 SVN_EDITOR 会有所帮助

setenv SVN_EDITOR "rm svn-commit.tmp && cp $REPO/hooks/log.tmpl svn-commit.tmp && emacs"
Run Code Online (Sandbox Code Playgroud)

但是只有当用户SVN_EDITOR在他的用户环境中设置 如上所述时才会发生这种情况。那么有没有其他明确的方式,当我执行 svn 提交时,我将从不同的位置而不是默认位置打开模板文件。提交模板将更特定于存储库和提交日期。那么有没有一种方法可以在 svn 存储库上设置一些属性来调用不同的提交模板。我应该将它强制执行到所有(特定于存储库)并且它不应该像设置 SVN_EDITOR 那样是特定于用户的。即使我们正在设置,SVN_EDITOR当我们通过调用一些钩子进行 svn 提交时,也可以调用此设置。我知道只有在提交提交后才会调用前后提交挂钩。

我们只使用 svn 命令客户端。

mli*_*elt 5

有两种可能的方法,具体取决于您必须使用的 subversion 客户端:

  • TortoiseSVN:为此目的使用客户端钩子
  • SVN 命令客户端:使用 shell 脚本和一些 svn 属性

TortoiseSVN 客户端钩子

当您查看 TortoiseSVN 帮助的“客户端挂钩脚本”一章时,您会发现以下部分:

开始提交

在显示提交对话框之前调用。如果钩子修改了版本化文件并影响需要提交和/或提交消息的文件列表,您可能希望使用它。但是你应该注意,因为钩子在早期被调用,选择用于提交的对象的完整列表是不可用的。

钩子有以下参数:

  • PATH:临时文件的路径,其中包含启动操作的所有路径。每个路径都在临时文件中的单独一行上。
  • MESSAGEFILE:包含提交日志消息的文件路径。该文件包含 UTF-8 编码的文本。成功执行 start-commit 钩子后,会读回日志消息,让钩子有机会修改它。
  • CWD:运行脚本的当前工作目录。这被设置为所有受影响路径的公共根目录。

因此,您需要实现一个小脚本来根据目录更改 svn 提交模板。但是,您必须关心如何部署客户端挂钩,因为每个用户都必须自己安装它们。

SVN 命令客户端脚本和 svn:template-file 属性

  1. 定义一个 shell 脚本,它将在里面调用真正的 subversion 命令。
  2. 在具有有用名称(如template-file)的目录上定义 svn 属性,并从起始目录向上搜索具有该 svn 属性集的目录。
  3. 使用 found 属性作为文件名来查找内容(可能应该是一个 URL,所以不需要在本地安装这些模板)。
  4. 如果没有找到,请使用默认模板。

但是,您还必须在客户端上安装该脚本。Subversion 中没有允许使用不同模板而无需在客户端上额外安装的机制。