我一直发现签入(提交)邮件对于跟踪其他人在代码库/存储库中所做的工作非常有用。如何设置SVN以在每次提交时通过电子邮件发送分发列表?
我正在Windows上运行客户端,在Linux上运行Apache Subversion服务器。以下各种平台的答案可能对其他人很有用。
您使用提交后挂钩。这是一个指南。
下面是一个示例Ruby脚本,该脚本在每次提交后发送电子邮件:commit-email.rb
看看独立的Subversion通知工具(仅Windows!)
它可以在提交时通过电子邮件发送邮件,并且还有更多功能!
您需要熟悉存储库挂钩,尤其是提交后的挂钩。
1)使用sudo apt-get
在svn服务器上安装svnnotify
2)使用仓库的提交后钩子(在svn网站上的提交后钩子上阅读)
3)打开提交后的挂接文件并粘贴以下代码,以使用smtp服务器发送电子邮件。
由于不需要配置sendmail,因此直接使用smtp。
4)确保在\\\\(换行符)之后没有多余的空间。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #!/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 |
我使用类似于此脚本的提交后脚本。
它发送了一封不错的HTML电子邮件。我对其进行了一些更新,突出显示了以红色突出显示的代码,突出显示了以蓝色添加的代码。
什么平台?
在Mac OS X上,我已安装msmtp并在存储库中的钩子下创建了提交后脚本。需要为svn(或www)用户设置一个.msmtprc文件。
1 2 3 4 5 6 7 8 9 10 11 12
| 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是因为在瑞典(???)中有一些特殊字符。
在提交后的钩子上有一个相关的问题。就个人而言,我更喜欢向可以从中获取RSS提要的消息发送消息,因为每次提交的电子邮件会很快使我的收件箱超载。
就像其他人所说的,"什么平台"。在Windows上,我使用了" blat"(这是免费的命令行SMTP邮件程序)以及后提交和另一个批处理文件来实现的。
发布后的提交看起来像这样:(只需调用另一个批处理文件)
1 2 3
| call d:\\subversion\
epos\
ts\\hooks\\mail %1 %2 |
mail.bat看起来像这样:
1 2 3 4 5 6 7 8 9 10 11
| copy d:\\subversion\
epos\
TS\\hooks\\Commitmsg.txt %temp%\\commit.txt
copy d:\\subversion\
epos\
TS\\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构建中可能有所改善。
我在Linux服务器上分3个步骤完成了操作:
创建一个邮件列表(svn-notify@xy.com)并将人员添加到列表中。
编辑/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]
将此行添加到您的/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
您可以使用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的同一用户执行。
VisualSVN Server具有有用的提交电子邮件通知挂钩VisualSVNServerHooks.exe。它支持彩色差异,并且仅在提交影响某些存储库路径时才能发送提交通知。
请参阅"在VisualSVN Server中配置电子邮件通知"。
在RSS feed上第二个@Matt Miller。
有一个有用的工具,称为WebSVN,它为每个存储库以及具有完整提交消息的各个分支/标记/文件夹提供RSS feed。它也是一个不错的Web界面,可快速查看文件历史记录和提交/差异,而无需运行更新并打开您选择的编辑器。
还可以在Linux上使用SVNMailer。
Subversion源代码中包含一个用Perl编写的(大型)示例(可以在此处查看)。
检查此处描述的svn-mod-email软件包。 svn-mod-email是用于SVN电子邮件通知管理的强大工具,它以Debian归档文件的形式提供。它很容易安装,配置和使用。