fork 元のリポジトリを定期的に fetch して、自分のリポジトリに同期するシェルスクリプト

GitHub で fork したリポジトリで作業して、 fork 元に Pull Request を出すようなワークフローを使っている人向け。

特にお仕事とかで複数人で Pull Request を使うときに便利。

コード

下記のファイルを PATH の通った場所に置いて、作業ディレクトリで実行すれば良い。

#!/bin/sh

while :
do
  date
  git fetch -p --all
  CURRENT=`git rev-parse --abbrev-ref HEAD`
  if [ $CURRENT != 'master' ]
  then
    UPSTREAM_MASTER=`git rev-parse upstream/master`
    ORIGIN_MASTER=`git rev-parse origin/master`
    if [ $UPSTREAM_MASTER != $ORIGIN_MASTER ]
    then
      git branch -f master upstream/master
      git push origin master
    fi
  fi

  sleep 60
done

dateスクリプトが動いているか確認するだけの行なので、不要であれば消しても問題ないです。

git-fetch の -p オプションはリモートでブランチが削除されたら、ローカルの追跡ブランチも一緒に消してくれるオプションです。

使い方

私は ~/bin/polling_github を作っているので、こんな感じ。

$ cd ~/github/workdir
$ polling_github
2016115日 金曜日 195332秒 JST
Fetching origin
Fetching upstream