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