我一直发现签入(提交)邮件对于跟踪其他人在代码库/存储库中所做的工作非常有用。如何设置 SVN 在每次提交时通过电子邮件发送通讯组列表?

我在 Windows 上运行客户端,在 Linux 上运行 Apache Subversion 服务器。不过,下面针对不同平台的答案可能对其他人有用。

有帮助吗?

解决方案

您使用 提交后挂钩. 。这是一个 指导.

下面是一个示例 Ruby 脚本,它在每次提交后发送一封电子邮件: 提交电子邮件.rb

其他提示

看看独立版 颠覆通知 工具 (仅限 Windows!)它可以在提交时发送电子邮件等等!

您需要熟悉一下 存储库挂钩, ,特别是 提交后钩子.

1)使用 sudo apt-get 在 svn 服务器上安装 svnnotify

2) 使用仓库的提交后钩子(阅读 svn 网站上的提交后钩子)

3) 打开提交后挂钩文件并粘贴以下代码以使用 smtp 服务器发送电子邮件。使用 smtp 非常简单,因为您不需要配置 sendmail。

4)确保\(换行符)之后没有多余的空格。

#!/bin/sh

REPOS="$1"
REV="$2"
TO="xyz@yah.com" # who will receive the notifications
FROM="hello@goog.com" # what will be in "FROM" fields


 /usr/bin/svnnotify \

--repos-path "$REPOS" \
--revision "$REV" \
--to $TO \
--from $FROM \
--reply-to $FROM \
--smtp "YOUR.SMTP.MAIL.COM" \
--subject-prefix "[svn commit]" \
--attach-diff -a \
--header 'Message generated on Subversion Check-in.' \
--footer 'OpenSource Team. ' \
--svnlook "/usr/local/bin/svnlook" \
--handler HTML::ColorDiff # make diff pretty

有一个相关问题 这里 在提交后挂钩上。就我个人而言,我更喜欢将消息发送到可以从中获取 RSS 源的地方,因为每次提交一封电子邮件都会很快使我的收件箱超载。

借调@马特·米勒 在 RSS 提要上。

有一个很有用的工具,叫做 网络SVN 它提供每个存储库和各个分支/标签/文件夹的 RSS 提要以及完整的提交消息。它也是一个很棒的网络界面,可以快速查看文件历史记录和提交/差异,而无需运行更新并打开您选择的编辑器。

正如其他人所说,“什么平台”。在 Windows 上,我使用“blat”(一个免费的命令行 SMTP 邮件程序)以及一个提交后文件和另一个批处理文件来执行此操作。

提交后看起来像这样:(只是调用另一个批处理文件)

 call d:\subversion\repos\rts\hooks\mail %1 %2

mail.bat 看起来像这样:

copy d:\subversion\repos\RTS\hooks\Commitmsg.txt %temp%\commit.txt
copy d:\subversion\repos\RTS\hooks\subjbase.txt %temp%\subject.txt
svnlook info -r %2 %1 >> %temp%\commit.txt
echo Revision %2 >> %temp%\commit.txt
svnlook changed -r %2 %1 >> %temp%\commit.txt
svnlook author -r %2 %1 >> %temp%\subject.txt
c:\utils\blat %temp%\commit.txt -t <me@my.email.com> -sf %temp%\subject.txt -server ServerName -f "SVN Admin <svn@my.email.com>" -noh2

编写 SVN hooks 时最大的问题是你可能基本上没有环境设置 - 没有 exe 路径,没有临时路径等。不过也许这在最近的 SVN 版本中有所改进。

你可以使用 构建机器人. 。该工具可以在签到时执行任意操作。它是一个功能齐全的持续集成系统,但如果您只需要电子邮件,它当然可以处理。它具有适用于包括 SVN 在内的各种 SCM 的插件。

在特定 subversion 分支的“hooks”目录中,有 9 个模板文件可以帮助您入门。

关键点:subversion 在重命名之前不会执行任何文件。要让 post-commit.tmpl 在 unix 下执行,请将其重命名为“post-commit”。在 Windows 下,将其重命名为“post-commit.bat”或“post-commit.exe”。颠覆将 不是 如果文件名为“post-commit.tmpl”或“post-commit.sh”等,则执行该文件。

另外,请确保该文件可由运行 subversion 的同一用户执行。

我使用类似于此的提交后脚本 .

它会发送一封漂亮的 HTML 电子邮件。我对其进行了一些更新,其中以红色突出显示了已删除的代码,并以蓝色突出显示了添加的代码。

VisualSVN Server 有有用的提交电子邮件通知挂钩 VisualSVNServerHooks.exe. 。它支持彩色差异,并且仅当提交影响某些存储库路径时才可以发送提交通知。

“在 VisualSVN 服务器中配置电子邮件通知”.

我在 Linux 服务器上分 3 步完成了:

  1. 创建邮件列表(svn-notify@xy.com)并将人员添加到列表中。

  2. 编辑 /path_to_your_svn/svn/hooks/svn-notify/mailer.conf

    • to_addr = svn-notify@xy.com
    • from_addr = %(作者)s@xy.com
    • commit_subject_prefix =[XY-SVN]
  3. 将此行添加到您的 /path_to_your_svn/svn/hooks/post-commit 文件:
    /path_to_your_svn/svn/hooks/svn-notify/mailer.py commit "$REPOS" "$REV" /path_to_your_svn/svn/hooks/svn-notify/mailer.conf

什么平台?

在 Mac OS X 上我已经安装了 邮件传输协议 并在存储库中的钩子下创建了一个提交后脚本。需要设置一个 .msmtprc 文件 svn (或者 www) 用户。

REPOS="`echo $1 | sed 's/\/{root of repository}//g'` "
REV="$2"
MSG=`/usr/local/bin/svn log -v -r HEAD https://localhost$REPOS`

/usr/local/bin/msmtp {list of recipients} <<EOF
Subject: SVN-Commit $REPOS#$REV
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8Bit

$MSG
EOF

制作 {root of repository}{list of recipients} 专门针对您的需求。注意我使用了 UTF-8,因为瑞典有一些特殊字符 (åäö)。

Subversion 源代码中有一个用 Perl 编写的(大型)示例(可以是 在这里查看).

SVN邮件程序, ,适用于 Linux。

检查 svn-mod-电子邮件 包描述 这里. 。这 svn-mod-电子邮件 是一个强大的 SVN 电子邮件通知管理工具,以 Debian 存档形式提供。它易于安装、配置和使用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top