如何创建 SVN 提交消息模板和挂钩以验证

Posted

技术标签:

【中文标题】如何创建 SVN 提交消息模板和挂钩以验证【英文标题】:How do I create a SVN Commit Message Template and Hook to Verify 【发布时间】:2010-11-02 06:04:00 【问题描述】:

我正在使用 Visual SVN 服务器和 Tortoise SVN(客户端)进行源代码控制。我希望所有开发人员都对签入备注的一致格式进行标准化。

例如,我希望他们的提交消息默认为...

简介:

开发者名称:(预填充)

审核人:

[错误 ID]:

[更改错误状态]:

已知问题:

受影响的文件:(预填充)

将来我希望 [Bug Id] 和 [Bug State] 提供信息以触发对错误跟踪系统的自动更新。此外,开发人员名称和受影响的文件应预先填充 svn 用户和用户提交的文件。

请发送您可能拥有的任何链接或示例。

【问题讨论】:

“受影响的文件”,也许还有“开发者名称”,不应出现在提交消息中,因为它们在内置提交元数据中可靠 【参考方案1】:

取自How to create a Tortoise SVN Checkin Template(已修改以适应更多当前版本):

日志模板可根据项目需求定制,可用于实现严格的日志格式。

将它添加到您的 svn 存储库很容易:

    在Subversion属性中选择你想要应用的SVN文件夹(右键TortoiseSVN -> Properties

    选择New -> Advanced,然后从名为Property name的下拉列表中选择tsvn:logtemplate

    将上述模板(或您自己的)添加到组合框下方的文本区域。

    如果要将属性应用于当前文件夹下层次结构中的每个文件和文件夹,请选中递归复选框。

    点击OK将该属性添加到列表中。

    签入所有文件夹和文件,以便团队中的其他人可以使用相同的模板。

【讨论】:

有点难找,但猜想这将在 4 年后预期 :) 我使用以下方法找到它:文件夹右键单击 -> 属性 -> 新建... -> 高级 ->属性名称:tsvn:logtemplate -> 输入属性值 -> 确定 -> 确定。递归选项似乎并不重要,无论是应用还是删除这个模板化的属性值。非常感谢 adrainbanks(甚至 4 年后!)。 递归选项仅在您不检查根文件夹(仅设置属性的位置)时才重要。所有tsvn 属性都是客户端属性,因此不会与服务器进行通信来读取属性。 链接失效。新链接:tortoisesvn.net/docs/release/TortoiseSVN_en/…【参考方案2】:

使用命令行执行此操作的一种方法是更改​​ SVN_EDITOR 环境变量,如下所述:

http://svn.haxx.se/dev/archive-2006-02/0487.shtml

SVN_EDITOR="rm svn-commit.tmp && cp $REPOS/hooks/log.tmpl svn-commit.tmp && vi svn-commit.tmp"

【讨论】:

【参考方案3】:

或者,为了让 SVN_EDITOR 更加舒适(例如,在必须使用 SvnBridge 的情况下正确链接到 TFS 工作项),可以将以下脚本存储为 ~/bin/svn_editor :

#!/bin/sh

template_file="$@"
template_file_new="$template_file.new"

current_work_item_number_file="$HOME/tfs_work_item_number_current.txt"
[ -f "$current_work_item_number_file" ] && work_item=$(cat "$current_work_item_number_file") || work_item="please fill in!"

# Yes folks, this is the TFS convention (hard, NOT-TO-BE-ALTERED text)
# to properly link to work items via SvnBridge commits!
work_item_prefix_hard_tfs_convention_text="work item: "

work_item_text="$work_item_prefix_hard_tfs_convention_text$work_item"

custom_text="$work_item_text\n\n[this addition above initially placed to ignored content part here,\nto ensure properly abortable empty message by default - please move it to active content as needed]"

sed -e 's/\(will be ignored--\)/\1\n'"$custom_text"'/' "$template_file" > "$template_file_new"

mv -f "$template_file_new" "$template_file"

$EDITOR "$@"

然后简单地做

export SVN_EDITOR=~/bin/svn_editor

在 ~/.bashrc 或类似的地方。 即使从 Firefox TFS Web 界面中查看的当前工作项页面保持工作项编号文件更新的奖励积分(我认为可能有一种与 Firefox 通信以获取页面标题等的方法)。 或者简单地让这个脚本在持久性工作项文件上启动第一个初始编辑器,然后然后让它在自定义提交模板上运行第二个编辑器。

【讨论】:

【参考方案4】:

我发现它使用: Folder right-click -> Properties -> New... -> Advanced -> Property name: tsvn:logtemplate -> enter a Property value -> OK -> OK.

【讨论】:

以上是关于如何创建 SVN 提交消息模板和挂钩以验证的主要内容,如果未能解决你的问题,请参考以下文章

Git 电子邮件挂钩以包含提交消息和更改的文件

SVN 的 CPP 检查预提交挂钩

SVN - 在开始提交挂钩中获取提交大小?

如何强制将审阅者姓名输入到 SVN 提交评论中

将 Play Framework 标签提交到 SVN 并触发提交挂钩

如何在 Eclipse 中设置提交消息模板