0

我想将以下行为添加到由 gitolite 管理的 git 存储库中。在推送到 master 的东西(可以忽略其他分支)上,我想检测一个特定文件是否在其中一个提交中被更改,如果是,则向指定地址发送电子邮件。电子邮件内容每次都可以相同。可以通过执行脚本或 bash 命令发送电子邮件,假设必要的可执行文件可用。

如何使用 git post-receive 钩子来做到这一点?


背景:对某个文件的更改需要对代码中不受控制的内容进行内部手动处理。我希望这封电子邮件能够提醒您完成该手动过程。

4

1 回答 1

0

我通过添加以下内容作为接收后挂钩来实现我的目标:

#!/usr/bin/perl

use strict;
use warnings;

my ($from, $to, $branch) = split /\s+/, $i;
my ($project) = $pwd =~ /\/([^\/]+)\.git$/;
my $name_of_file_i_care_about = "SomeFileName.txt"

if ($project eq 'my_project') {

  my $contains_change_to_file_i_care_about = system( "git diff --name-only $from $to | grep --quiet $name_of_file_i_care_about" );

  if ($contains_change_to_file_i_care_about == 0) {
    system("mail --to 'someone\@somewhere.com' --subject 'Hey, that file you care about has changed.'");
  }
}

exit 0;

请注意,这取决于某些外部命令:grepmail. 我主要复制并修改了我们现有的接收后挂钩,这可能取决于我们的特定配置,也可能不取决于我们的特定配置。如果有更好的方法,我会全力以赴。

于 2013-11-07T22:12:56.647 回答