github是能夠設置hooks的,看:在設置webhooks & services
,可在Just the push event.
是設定向你的服務器發請求,而後再作相應的處理。php
https://help.github.com/articles/creating-webhooksgit
看文檔:man githooksgithub
NAME
githooks - Hooks used by Gitweb
SYNOPSIS
$GIT_DIR/hooks/*sql
DESCRIPTION
Hooks are little scripts you can place in $GIT_DIR/hooks directory to trigger action at certain points. When git init is run, a handful of example hooks
are copied into the hooks directory of the new repository, but by default they are all disabled. To enable a hook, rename it by removing its .sample
suffix.shell
Note
It is also a requirement for a given hook to be executable. However - in a freshly initialized repository - the .sample files are executable by
default.vim
This document describes the currently defined hooks.bash
假設你的項目也是跑在此臺服務器上,那自動佈署代碼就很簡單了,好比你的在線服務代碼在 /var/www/demo 文件夾中。服務器
/var/www/demo也要有寫權限工具
你先初始化代碼庫:
$ git clone /opt/git/gitdemo /var/www/demo
而後你能夠經過 git pull
來更新代碼。
固然這樣是手動了,我想要的是本地提交更新後,服務器能自動的 git pull代碼到最新,因而咱們就要藉助 git hook
了。
進入到 /opt/git/gitdemo 文件夾中,會發現 .git/hook 文件夾在裏面,進入到 hook 中,裏面有不少的 sample 腳本,這裏咱們只須要用到 post-update。
$ mv post-update.sample post-update $ vim post-update
能夠看到裏面其實就是一些shell腳本,你要作的就是把 git pull寫進去。當用戶提交後,便會調用post-update腳本的。
好比我在服務器的代碼庫更新後,要求對應的服務代碼也要更新(進行pull操做),
則在bare倉庫的hooks中的post-receive添加以下內容便可
#!/bin/sh unset $(git rev-parse --local-env-vars) cd WEB_DIR git pull
這些腳本顯然是能夠作不少事的,只要你想獲得,要了解各腳本什麼時候調用,google吧。
注:服務器中與git用戶有關的文件夾及文件,
$ chown -Rh git:git /your/git/dirs
另外文章:
最佳工具 git hook
post-update.sample 更名爲post-update
而後加幾行簡單的代碼就能實現你的需求了
例:
gitdir=/****
cd $gitdir
git checkout 對應分支
git pull
end...