【发布时间】:2015-11-12 23:41:28
【问题描述】:
我有一个远程存储库 (bitbucket)、一个服务器存储库 (linux) 和许多本地存储库(开发人员)。
如果某些开发人员更改了远程分支,我希望服务器能够收到通知。
到目前为止,我尝试在服务器中使用 cron 中声明的 bash 脚本,但最小分辨率为 1 分钟,因此使其实时适应似乎非常棘手。但是,我的做法是这样的:
path=/some/dir/
# something new in remote
if git fetch origin && [ `git rev-list HEAD...origin/master --count` != 0 ]
then
echo 'Remote repository has changed. Pull needed' &>>$path/git-backup.log
echo $d >> $path/git-backup.log
git merge origin/master &>>$path/git-backup.log
fi
【问题讨论】:
-
您是否可以为您的 bitbucket 遥控器添加结帐后挂钩? git-scm.com/docs/githooks#_post_checkout
-
在
rev-list测试之后,你有一个流浪的&&。此外,四个字git fetch通常不是很有用,因为它不会更新任何本地引用。如果您只想知道远程 ref 是否已更改,那么git fetch origin和git rev-list --count master..origin/master应该会告诉您。git diff --exit-code master origin/master也应该可以工作,并且可以在没有[ ... ]包装的情况下使用。你也可以总是获取、合并和记录,不是吗? -
你是对的 goatshepard,解决方案是 git hooks (atlassian.com/git/tutorials/git-hooks/conceptual-overview)。在 bitbucket 中,这可以通过具有管理员权限的“Webhooks”来控制。就我而言,我正在服务器端安装一个应用程序来监听特定端口以便收到通知。完成后我会发布代码。
标签: bash cron bitbucket githooks