SVN在更改特定文件时向电子邮件用户发送post commit钩子

SVN在更改特定文件时向电子邮件用户发送post commit钩子,svn,post-commit,svn-hooks,Svn,Post Commit,Svn Hooks,我想添加一个post-commit钩子,这样如果用户提交对特定文件的更改,我将收到电子邮件通知 有没有人见过这样的例子,或者有可能 我以前设置过预提交钩子,但这是我所知的有限。subversion发行版中有几个发送电子邮件的钩子脚本。查看目录 我有一个可以做到这一点的软件,它允许用户(而不是管理员)说出他们正在监视哪些文件的更改,以及这些更改应该发送到哪些电子邮件地址 您可以将此与my结合使用,以确保用户只能编辑自己的监视文件。钩子脚本使用Perl,但不需要任何非标准模块,因此非常易于使用 每

我想添加一个post-commit钩子,这样如果用户提交对特定文件的更改,我将收到电子邮件通知

有没有人见过这样的例子,或者有可能


我以前设置过预提交钩子,但这是我所知的有限。

subversion发行版中有几个发送电子邮件的钩子脚本。查看目录

我有一个可以做到这一点的软件,它允许用户(而不是管理员)说出他们正在监视哪些文件的更改,以及这些更改应该发送到哪些电子邮件地址

您可以将此与my结合使用,以确保用户只能编辑自己的监视文件。钩子脚本使用Perl,但不需要任何非标准模块,因此非常易于使用

每个用户都有自己的监视文件,语法非常简单:

mail = david@gmail.com
file =**/build.xml
match = [Mm]akefile
邮件
行是我要发送通知的地方。我可以有多个通知。
文件
是我正在查看的文件的全局表达式(锚定在表达式的前面和后面)。匹配行与此类似,并使用未编排的Perl正则表达式

监视文件存储在Subversion存储库中您指定的目录中。这意味着用户可以设置自己的监视。您可以使用“我的预提交”kitchen sink钩子防止用户更改其他用户的监视文件:

[file You are only allowed to change their own watch files]
file =/watchfiles/**
permission = read-only
users = @ALL

[file You are only allowed to change their own watch files]
file = /watchfiles/<USER>.cfg
permission = read-write
users = @ALL

请记住,
file
glob模式锚定到存储库的根(使用
/
作为根)因此,您需要指定完整路径,或者使用
***/
指定该文件的任何路径。

我设置了一个PHP脚本,以使用post commit执行。您可以将PHP脚本编辑得非常智能,并根据所选文件执行某些操作

/subversion/hooks/post提交:

 REPOS="$1"
 REV="$2"
 MESSAGE=$(svnlook propget --revprop -r $REV $REPOS svn:log)
 CHANGES=$(svnlook changed -r $REV $REPOS)
 php /usr/share/subversion/hook-scripts/commit-email.php "$REPOS" "$REV" "$MESSAGE" "$CHANGES"
/usr/share/subversion/hook scripts/commit-email.php:

 <?php
      //files updated will be in $_SERVER['argv'][4], you could expand it in to an a
      //array and search for what you need, and depending on what's found, send emails accordingly.
 ?>

这是post-commit-hook电子邮件通知程序()。您仍然需要添加仅通知特定文件的位…@Jharwood我已将它们从以下端口移到Github:@My@DavidW。如果我想将post commit hook设置为多个文件,那么我可以设置吗?如
file=ab/build.xml、bb/cs.txt、cc/*.
等,我只希望通过电子邮件通知这些文件。您可以为这些文件添加一行您想要的每个文件模式。请参阅我答案中的示例。@DavidW。谢谢您的解决方案,但它是可行的。?我的意思是,当我在不同的文件夹中有数百个文件时,我该如何做。?是否可能在文本文件中保留一个文件列表并从该文本文件读取文件名…?监视文件可以有数百行,因此有没有可行性问题。我可以修改钩子以允许一行中有多个文件,但这增加了编程的复杂性,但没有什么好处。钩子不会运行得更快,也不一定对用户更容易。这些文件有什么特别的地方吗?也许我可以添加一个功能来帮助您选择所需的文件。它们有规范吗我可以将它们的属性或其他问题用作选择标准?
 <?php
      //files updated will be in $_SERVER['argv'][4], you could expand it in to an a
      //array and search for what you need, and depending on what's found, send emails accordingly.
 ?>