我一直发现签入(提交)邮件对于跟踪其他人在代码库/存储库中所做的工作非常有用。如何设置 SVN 以在每次提交时通过电子邮件发送分发列表?
我在 Windows 上运行客户端,在 Linux 上运行 Apache Subversion 服务器。不过,下面针对各种平台的答案可能对其他人有用。
我一直发现签入(提交)邮件对于跟踪其他人在代码库/存储库中所做的工作非常有用。如何设置 SVN 以在每次提交时通过电子邮件发送分发列表?
我在 Windows 上运行客户端,在 Linux 上运行 Apache Subversion 服务器。不过,下面针对各种平台的答案可能对其他人有用。
这是一个在每次提交后发送电子邮件的示例 Ruby 脚本:commit-email.rb
看看独立的Subversion 通知工具(仅限 Windows!) 它可以在提交时发送电子邮件等等!
VisualSVN Server 有有用的提交电子邮件通知钩子VisualSVNServerHooks.exe
。它支持彩色差异,并且只有在提交影响特定存储库路径时才能发送提交通知。
1) 使用 sudo apt-get 在 svn 服务器上安装 svnnotify
2)使用你的 repo 的 post-commit 钩子(阅读 svn 网站上的 post-commit hooks)
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
什么平台?
在 Mac OS XI 上已安装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,因为我们在瑞典有一些特殊字符 (åäö)。
这里有一个关于提交后挂钩的相关问题。就个人而言,我更喜欢向可以从中获取 RSS 提要的内容发送消息,因为每次提交的电子邮件会很快使我的收件箱超载。
在 RSS 提要上借调 @Matt Miller 。
有一个名为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 <me@my.email.com> -sf %temp%\subject.txt -server ServerName -f "SVN Admin <svn@my.email.com>" -noh2
编写 SVN 钩子的最大问题是您可能基本上没有环境设置 - 没有 exe 路径,没有临时路径等。尽管在最近的 SVN 构建中这可能有所改进。
我使用类似于这个的提交后脚本。
它发送了一封漂亮的 HTML 电子邮件。我对其进行了一些更新,其中突出显示了以红色删除的代码并突出显示了以蓝色添加的代码。
你可以使用buildbot。这是一个可以在签到时采取任意操作的工具。这是一个功能齐全的持续集成系统,但如果您只需要电子邮件,它当然可以处理。它具有适用于包括 SVN 在内的各种 SCM 的插件。
在您的特定颠覆分支的“钩子”目录中,有 9 个模板文件可以帮助您入门。
关键点:subversion 在重命名之前不会执行任何文件。要让 post-commit.tmpl 在 unix 下执行,请将其重命名为“post-commit”。在 Windows 下,将其重命名为“post-commit.bat”或“post-commit.exe”。如果文件名为“post-commit.tmpl”或“post-commit.sh”等,Subversion 将不会执行该文件。
此外,请确保该文件可由运行 subversion 的同一用户执行。
我在 Linux 服务器上分 3 步完成:
创建一个邮件列表 ( svn-notify@xy.com
) 并将人员添加到列表中。
编辑/path_to_your_svn/svn/hooks/svn-notify/mailer.conf
/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
Subversion 源代码中包含一个用 Perl 编写的(大)示例(可以在此处查看)。
还有SVNMailer,它可以在 Linux 上运行。
检查这里描述的svn-mod-email包。svn-mod-email是一个强大的SVN 电子邮件通知管理工具,它以 Debian 存档的形式提供。它易于安装、配置和使用。