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

时间:2011-11-21 13:34:24

标签: 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"

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

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

2 个答案:

答案 0 :(得分:4)

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

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

TortoiseSVN客户端挂钩

当您查看TortoiseSVN帮助的“Client Side Hook Scripts”一章时,您会看到以下部分:

  

开始提交

     

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

钩子有以下参数:

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

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

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

  1. 定义一个将在其中调用真正的subversion命令的shell脚本。
  2. 在具有有用名称的目录(如template-file)上定义svn属性,并从起始目录向上搜索具有该svn属性集的目录。
  3. 使用found属性作为文件名来查找内容(可能应该是URL,因此不需要本地安装这些模板)。
  4. 如果未找到,请使用默认模板。
  5. 但是,您还必须在客户端上安装该脚本。 Subversion中没有允许使用不同模板而无需在客户端上进行额外安装的机制。

答案 1 :(得分:0)

这是我创造的一个。如果它存在,它会尝试使用TortoiseSVN模板,否则它会在全局Git配置中查找模板文件,否则它会回退到内置模板。

请注意,使用标准的TortoiseSVN模板属性并不意味着您必须安装TortoiseSVN。