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



我主要想在执行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命令客户端

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

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

TortoiseSVN客户端钩子

当你看"客户端钩子脚本"一章时在TortoiseSVN帮助中,您将找到以下部分:

Start-commit

在显示提交对话框之前调用。如果钩子修改了一个受版本控制的文件,并且影响了需要提交的文件列表和/或提交消息,则可能需要使用此方法。然而,你应该注意到,因为钩子是在早期阶段调用的,所以为提交而选择的对象的完整列表是不可用的。

钩子有以下参数:

  • 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中,没有任何机制允许使用不同的模板,而不需要在客户端上进行额外的安装。

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

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

最新更新