如何让Subversion(SVN)在签到时发送电子邮件?
我一直发现签入(提交)邮件对于跟踪其他人在代码库/存储库中所做的工作非常有用。如何设置SVN以在每次提交时通过电子邮件发送分发列表?
我在Windows上运行客户端,在Linux上运行Apache Subversion服务器。下面针对各种平台的答案可能对其他人很有用。
解决方案
回答
我们需要熟悉存储库挂钩,尤其是提交后挂钩。
回答
我们使用提交后挂钩。这是一个指南。
这是一个示例Ruby脚本,该脚本在每次提交后发送电子邮件:commit-email.rb
回答
什么平台?
在Mac OS X上,我已经安装了msmtp并在存储库中的钩子下创建了一个提交后脚本。需要为svn(或者www)用户设置一个.msmtprc文件。
REPOS="`echo | sed 's/\/{root of repository}//g'` " REV="" 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
根据需要设置" {存储库的根目录}"和" {收件人列表}"。注意我使用了UTF-8,因为我们在瑞典(???)中有一些特殊字符。
回答
Subversion源代码中包含一个用Perl编写的(大型)示例(可以在此处查看)。
回答
看看独立的Subversion通知工具(仅Windows!)
它可以在提交时发送电子邮件,并且还有更多功能!
回答
提交后挂钩有一个相关的问题。就个人而言,我更喜欢向可以从中获取RSS提要的消息发送消息,因为每次提交的电子邮件会很快使我的收件箱超载。
回答
将@Matt Miller放在RSS提要上。
有一个有用的工具叫做WebSVN,它提供每个存储库的RSS提要以及带有完整提交消息的各个分支/标记/文件夹。它也是一个出色的Web界面,可快速查看文件历史记录和提交/差异,而无需运行更新并打开我们选择的编辑器。
回答
就像其他人所说的,"什么平台"。在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 <[email protected]> -sf %temp%\subject.txt -server ServerName -f "SVN Admin <[email protected]>" -noh2
编写SVN挂钩的最大难题是,我们可能基本上没有环境设置,没有exe路径,没有临时路径等。尽管在最近的SVN构建中可能对此进行了改进。
回答
我使用类似于此脚本的提交后脚本。
它发送了一个不错的HTML电子邮件。我对其进行了一些更新,以高亮显示已删除的代码并以红色突出显示了已添加的代码。
回答
我们可以使用buildbot。这是一个可以在签到时采取任意行动的工具。这是一个功能齐全的持续集成系统,但是如果我们只想发送电子邮件,它肯定可以处理该问题。它具有适用于包括SVN在内的各种SCM的插件。
回答
在我们特定的subversion分支的" hooks"目录中,有9个模板文件可入门。
关键:Subversion在重命名之前不会执行任何文件。要使post-commit.tmpl在UNIX下执行,请将其重命名为" post-commit"。在Windows下,将其重命名为" post-commit.bat"或者" post-commit.exe"。如果Subversion名为" post-commit.tmpl"或者" post-commit.sh"或者类似名称,则不会执行该文件。
另外,请确保该文件可由运行subversion的同一用户执行。