Git-利用post receive hook自動發郵件給團隊(sendmail入門)

鏈接一:http://josephj.com/entry.php?id=346

鏈接二:http://hi.baidu.com/dingliang/item/bfe1c8b988db07422aebe3db

鏈接三:http://informationideas.com/news/2010/08/05/sendmail2525-my-unqualified-host-name-servername-unknown/

鏈接四:http://caribe1999.altervista.org/developer/2012/06/my-unqualified-host-name-localhost-unknown-sleeping-for-retry-with-sendmail/

在前公司只要有人做了 CVS Commit,整個 RD Team 就會收到 Email,告訴你誰改了什麼東西。我當初是覺得這個功能超煩,因為在 Maling List 的 100 多人都會收到,也沒辦法分專案或 Function。所以對我來說絕大多數的 Email 都是沒幫助的垃圾信。可是每個人的想法不同,同事(匿名 haha XD)覺得他可以從這些信件學到很多。而反正我們才 6 個寫程式的、專案又單純,偶爾看看彼此的程式會蠻有趣的(「靠,你怎麼會這樣寫 」 XD)。又加上有個外包的需求得做掉。昨天晚上就花了點時間把git push 後會自動發信的功能給做上去了(我們不是用 github 而是自己有 Central Repository)。

安裝步驟

  1. 從 git 下載 post-receive-email

    請先檢查你的 Server Repository 是否有 post-receive-email 這個 hook。通常比較新版的 Git 都已經在此位置 /usr/share/doc/git-core/contrib/hooks/post-receive-email,若沒有請到http://git.kernel.org/?p=git/git.git;a=blobplain;f=contrib/hooks/post-receive-email;h=60cbab65d3f8230be3041a13fac2fd9f9b3018d5;hb=HEAD下載。像我們的 Server Repository 是比較舊版的 Git,我就把上面的檔案直接抓到 hook 的目錄。

    curl "http://git.kernel.org/?p=git/git.git;a=blobplain;f=contrib/hooks/post-receive-email;h=60cbab65d3f8230be3041a13fac2fd9f9b3018d5;hb=HEAD" > /var/git/repositories/foo.git/hooks/post-receive-email

    在一般的情況下,你不需要修改此檔,大說可以用設定的方式解決。

  2. 修改 post-receive

    注意 git 只會觸發 post-receive 這個 hook,並沒有 post-receive-email 的 hook 喔!你必須在 post-receive 內執行 post-receive-email。

    vim /var/git/repositories/foo.git/hooks/post-receive-email

    !/bin/sh

    An example hook script for the post-receive event

    ./post-receive-email

  3. 設定 post-receive 與 post-receive-email 為可執行

    chmod a+x /var/git/repositories/foo.git/hooks/post-receive*
  4. 修改設定檔

    要寄給哪些人、內容為何、信件標題 Prefix 都是透過設定檔,不用修改程式唷!

    vim /var/git/repositories/foo.git/config

    ...[hooks] mailinglist = "employ1@company.com, employ2@company.com" # 收件人列表 envelopesender = git@company.com # 送件人 Email emailprefix = "[GIT] " # Email 標題開頭 showrev = "git show -C %s; echo" # 不只是變動的檔案列表,還有變動的內容

  5. 修改專案名稱

    只有一行,請寫上你這個 Git 的專案名稱。

    vim /var/git/repositories/foo.git/description

    ProjectName

以上步驟都完成後,你從你自己的 repository 做 git push 到 server repository 就會寄信給大家啦!

自定一些功能

以上做完發現了一些缺點:我希望寄件者可以是 git push 的那個人、而不是寫在 config 中一成不便的 hooks.envelopesender。另外由於我們有 master 跟 develop 兩個 Branch,也需要有區隔。因此我就把 post-commit 用我熟悉的 PHP 改寫:

#!/usr/bin/php
<?php
// 取得目前的 branch 為何
$stdin = filegetcontents("php://stdin");
$stdin = rtrim($stdin, "\n");
$stdin = explode(" ", $stdin);
$refname = $stdin[2];
$is_dev  = (strpos($refname, "develop") !== FALSE) ? TRUE : FALSE;

// 將 envelopesender 改為 log 中最後一個 commit 的人 $cmd = ($is_dev ? "git log -b develop -1 --pretty=format:%ae HEAD" : "git log -1 --pretty=format:%ae HEAD"); exec($cmd, $sender); $sender = $sender[0]; $cmd = exec("git config hooks.envelopesender $sender");

// 將 STDIN 導入倒 post-receive-email $cmd = "echo \"$stdin[0] $stdin[1] $stdin[2]\" | " . dirname(FILE) . "/post-receive-email "; exec($cmd);

exit(0); ?>


依然沒有動到下載的 post-commit-receive 就達成我的需求啦 :D



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值