如果要自動化拿到最後 commit 的 branch (大概只有再 staging/testing server 上有這樣的需求),可以用 git command 加上 shell (sed, grep) crontab 來完成。當然,如果是 gitlab 的話還有 gitlab-runner 可以幫忙,但好像用 shell script 比較直覺一點(?)
#!/bin/bash #filename = /var/www/my.sh #expect="remotes/origin" #sub="git checkout " branches=$(git branch -a --sort=-committerdate | grep 'remotes/origin' | grep -v 'HEAD' | grep -v 'master' | head -n 1 | sed -e 's/^ *//' -e 's/ *$//' -e 's/remotes\/origin\//git\ checkout\ /') #echo "$branches" eval "cd /var/www/mywww; $branches" #接下來可以做想做的其他事情
git branch 命令中加上 –sort 參數可以指定要依照甚麼藍未來排序,而 committerdate 便是時間日期,而加上一個減號(-)是代表 decending。
然後建立一個無密碼的 ssh key 加到可以 pull repo 的帳號去,然後建立 crontab 就完畢了。
5-55/10 * * * * cd /var/www/mywww; ssh-agent bash -c 'ssh-add /home/user/.ssh/nopwd; git pull --all'; sh /var/www/my.sh