我想将以下行为添加到由 gitolite 管理的 git 存储库中。在推送到 master 的东西(可以忽略其他分支)上,我想检测一个特定文件是否在其中一个提交中被更改,如果是,则向指定地址发送电子邮件。电子邮件内容每次都可以相同。可以通过执行脚本或 bash 命令发送电子邮件,假设必要的可执行文件可用。
如何使用 git post-receive 钩子来做到这一点?
背景:对某个文件的更改需要对代码中不受控制的内容进行内部手动处理。我希望这封电子邮件能够提醒您完成该手动过程。
我想将以下行为添加到由 gitolite 管理的 git 存储库中。在推送到 master 的东西(可以忽略其他分支)上,我想检测一个特定文件是否在其中一个提交中被更改,如果是,则向指定地址发送电子邮件。电子邮件内容每次都可以相同。可以通过执行脚本或 bash 命令发送电子邮件,假设必要的可执行文件可用。
如何使用 git post-receive 钩子来做到这一点?
背景:对某个文件的更改需要对代码中不受控制的内容进行内部手动处理。我希望这封电子邮件能够提醒您完成该手动过程。
我通过添加以下内容作为接收后挂钩来实现我的目标:
#!/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;
请注意,这取决于某些外部命令:grep
和mail
. 我主要复制并修改了我们现有的接收后挂钩,这可能取决于我们的特定配置,也可能不取决于我们的特定配置。如果有更好的方法,我会全力以赴。