1

我主要想在执行 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 提交时也可以调用这个设置。我知道只有在提交提交后才会调用提交前和提交后的钩子。

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

4

2 回答 2

5

根据您必须使用的颠覆客户端,有两种可能的方法:

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

于 2011-11-22T06:58:59.530 回答
0

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

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

于 2012-11-24T02:28:30.900 回答