如何让Subversion(SVN)在签到时发送电子邮件?

时间:2008-08-11 16:27:56

标签: svn hook post-commit post-commit-hook

我总是发现checkin(commit)邮件非常有用,可以跟踪其他人在代码库/存储库中的工作。如何设置SVN以在每次提交时通过电子邮件发送通讯组列表?

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

16 个答案:

答案 0 :(得分:31)

您使用post-commit hooks。这是一个guide

以下是每次提交后发送电子邮件的示例Ruby脚本:commit-email.rb

答案 1 :(得分:19)

查看独立的Subversion Notify工具(仅限Windows!) 它可以在提交时发送电子邮件等等!

答案 2 :(得分:3)

您需要熟悉repository hooks,尤其是post-commit hook

答案 3 :(得分:2)

1)使用sudo apt-get

在svn服务器上安装svnnotify

2)使用你的repo的post-commit钩子(在svn网站上的post-commit钩子上阅读)

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

答案 4 :(得分:1)

什么平台?

在Mac OS X上,我安装了msmtp,并在存储库中的挂钩下创建了一个提交后脚本。需要为svn(或www)用户设置.msmtprc文件。

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,因为我们在瑞典(åäö)有一些特殊字符。

答案 5 :(得分:1)

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

答案 6 :(得分:1)

在RSS Feed上借调@ Matt Miller

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

答案 7 :(得分:1)

正如别人所说,“什么平台”。在Windows上,我使用'blat',这是一个免费的命令行SMTP邮件程序,以及一个提交后和另一个批处理文件。

post commit如下所示:(只调用另一个批处理文件)

 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钩子的最大问题是你可能基本上没有环境设置 - 没有exe路径,没有临时路径等等。虽然可能在最近的SVN构建中有所改进。

答案 8 :(得分:1)

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

它会发送一封精美的HTML电子邮件。我更新了一些内容,它突出显示以红色删除的代码,并突出显示以蓝色添加的代码。

答案 9 :(得分:1)

您可以使用buildbot。这是一种工具,可以在办理登机手续时采取任意行动。它是一个功能齐全的持续集成系统,但如果您只是想要电子邮件,它当然可以处理它。它具有各种SCM的插件,包括SVN。

答案 10 :(得分:1)

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

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

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

答案 11 :(得分:1)

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

请参阅"Configuring Email Notifications in VisualSVN Server"

答案 12 :(得分:1)

我是在Linux服务器上分三步完成的:

  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

答案 13 :(得分:0)

Subversion源代码中包含一个用Perl编写的(大)示例(可以是viewed here)。

答案 14 :(得分:0)

另外SVNMailer,适用于Linux。

答案 15 :(得分:0)

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