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

时间:2020-03-05 18:38:59  来源:igfitidea点击:

我一直发现签入(提交)邮件对于跟踪其他人在代码库/存储库中所做的工作非常有用。如何设置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的同一用户执行。