52

我一直发现签入(提交)邮件对于跟踪其他人在代码库/存储库中所做的工作非常有用。如何设置 SVN 以在每次提交时通过电子邮件发送分发列表?

我在 Windows 上运行客户端,在 Linux 上运行 Apache Subversion 服务器。不过,下面针对各种平台的答案可能对其他人有用。

4

16 回答 16

31

您使用提交后挂钩。这是一个指南

这是一个在每次提交后发送电子邮件的示例 Ruby 脚本:commit-email.rb

于 2008-08-11T16:35:18.887 回答
20

看看独立的Subversion 通知工具(仅限 Windows!) 它可以在提交时发送电子邮件等等!

于 2008-08-11T16:48:56.877 回答
3

您需要熟悉存储库挂钩,尤其是提交后挂钩

于 2008-08-11T16:34:31.027 回答
2

VisualSVN Server 有有用的提交电子邮件通知钩子VisualSVNServerHooks.exe。它支持彩色差异,并且只有在提交影响特定存储库路径时才能发送提交通知。

请参阅“在 VisualSVN 服务器中配置电子邮件通知”

于 2013-10-09T11:19:15.043 回答
2

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
于 2013-12-13T22:04:50.383 回答
1

什么平台?

在 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,因为我们在瑞典有一些特殊字符 (åäö)。

于 2008-08-11T16:38:34.323 回答
1

这里有一个关于提交后挂钩的相关问题。就个人而言,我更喜欢向可以从中获取 RSS 提要的内容发送消息,因为每次提交的电子邮件会很快使我的收件箱超载。

于 2008-08-11T17:32:03.763 回答
1

在 RSS 提要上借调 @Matt Miller 。

有一个名为WebSVN的有用工具,它提供每个存储库和单个分支/标签/文件夹的 RSS 提要以及完整的提交消息。它也是一个很棒的 Web 界面,可以快速查看文件历史记录和提交/差异,而无需运行更新并打开您选择的编辑器。

于 2008-08-11T22:22:55.767 回答
1

正如其他人所说,'什么平台'。在 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 构建中这可能有所改进。

于 2008-08-11T22:31:32.193 回答
1

我使用类似于这个的提交后脚本

它发送了一封漂亮的 HTML 电子邮件。我对其进行了一些更新,其中突出显示了以红色删除的代码并突出显示了以蓝色添加的代码。

于 2008-08-25T20:46:24.203 回答
1

你可以使用buildbot。这是一个可以在签到时采取任意操作的工具。这是一个功能齐全的持续集成系统,但如果您只需要电子邮件,它当然可以处理。它具有适用于包括 SVN 在内的各种 SCM 的插件。

于 2008-09-17T04:59:25.083 回答
1

在您的特定颠覆分支的“钩子”目录中,有 9 个模板文件可以帮助您入门。

关键点:subversion 在重命名之前不会执行任何文件。要让 post-commit.tmpl 在 unix 下执行,请将其重命名为“post-commit”。在 Windows 下,将其重命名为“post-commit.bat”或“post-commit.exe”。如果文件名为“post-commit.tmpl”或“post-commit.sh”等,Subversion 将不会执行该文件。

此外,请确保该文件可由运行 subversion 的同一用户执行。

于 2010-08-17T20:26:34.123 回答
1

我在 Linux 服务器上分 3 步完成:

  1. 创建一个邮件列表 ( svn-notify@xy.com) 并将人员添加到列表中。

  2. 编辑/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]
  3. 将此行添加到您的/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
于 2014-05-30T10:04:47.500 回答
0

Subversion 源代码中包含一个用 Perl 编写的(大)示例(可以在此处查看)。

于 2008-08-11T16:39:47.363 回答
0

还有SVNMailer,它可以在 Linux 上运行。

于 2013-01-27T03:26:04.437 回答
0

检查这里描述的svn-mod-email包。svn-mod-email是一个强大的SVN 电子邮件通知管理工具,它以 Debian 存档的形式提供。它易于安装、配置和使用。

于 2013-06-19T06:01:11.833 回答