如何让Subversion(SVN)在签入时发送邮件?

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

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

你使用post-commit钩子 。 这是一个指南 。

下面是一个示例Ruby脚本,每次提交后都会发送一封电子邮件: commit-email.rb

看看独立的Subversion Notify工具(仅限Windows!)它可以通过邮件提交,也可以做更多!

你会想熟悉一下仓库钩子 ,特别是post-commit钩子 。

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

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

3)打开post-commit钩子文件,粘贴下面的代码,用smtp服务器发送邮件。 使用smtp是直接的,因为你不需要configurationsendmail。

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 

这里有一个关于post-commit钩子的相关问题。 就个人而言,我更愿意发送一条消息给我可以得到一个RSS源,作为一个电子邮件,每提交会很快超载我的收件箱。

在RSS提要上引用@ Matt Miller 。

有一个名为WebSVN的有用工具,它提供每个存储库的RSS提要以及提供完整提交消息的单个分支/标签/文件夹。 这也是一个伟大的网页界面,用于快速查看文件历史logging和提交/差异,而无需运行更新并打开您select的编辑器。

正如别人所说,“什么平台”。 在Windows上,我使用了'blat',这是一个免费的命令行SMTP邮件程序来执行此操作,以及一个后提交和另一个batch file。

后提交看起来像这样:(只是调用另一个batch file)

  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钩子最大的问题是你可能基本上没有环境设置 – 没有exepath,没有临时path等。虽然也许在最近的SVN版本中有所改进。

你可以使用buildbot 。 这是一个在发生登记时可以采取任意行动的工具。 这是一个全function的持续集成系统,但如果你只是想要电子邮件,它当然可以处理。 它拥有包括SVN在内的各种SCM的插件。

在你的特定Subversion分支的“hooks”目录中,有9个模板文件可以让你开始。

关键点:颠覆不会执行任何文件,直到它们被重命名。 要获得post-commit.tmpl在unix下执行,请将其重命名为“post-commit”。 在Windows下,将其重命名为“post-commit.bat”或“post-commit.exe”。 如果命名为“post-commit.tmpl”或“post-commit.sh”等,Subversion将不会执行该文件。

另外,请确保该文件是由运行颠覆的相同用户执行的。

我使用类似于这个的提交后脚本。

这是发送一个很好的HTML电子邮件。 我对它进行了更新,突出显示了以红色删除的代码,并突出显示了以蓝色添加的代码。

VisualSVN服务器有有用的提交电子邮件通知钩子VisualSVNServerHooks.exe 。 它支持彩色差异,只有在提交影响某个存储库path时才能发送提交通知。

请参阅“在VisualSVN服务器中configuration电子邮件通知” 。

我在Linux服务器上做了三个步骤:

  1. 创build邮件列表( 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上安装了msmtp,并在存储库中的钩子下创build了一个post-commit脚本。 .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,因为我们在瑞典有一些特殊字符(åäö)。

有一个用Perl编写的(大的)例子,它包含在Subversion源代码中(可以在这里查看 )。

另外SVNMailer ,在Linux上工作。

检查这里描述的svn-mod-email包。 svn-mod-email是SVN电子邮件通知pipe理的强大工具,它以Debian存档forms提供。 这很容易安装,configuration和使用。