# main local branch (the one we want checked out) master = master # all local branches (including those needed by child clones) branches = $(master) # local name of origin origin = origin allbranches = $(sort $(master) $(branches)) currentbranch := $(shell git branch | grep ^\* | awk '{ print $2 }') noncurrentbranches := $(filter-out $(currentbranch),$(branches)) #originbranches := $(shell git branch -r | perl -ne 'm,^.\s+'"$$origin"'/([a-z_]\S+)$, && print "$$1\n"' ) localbranches := $(shell git branch | perl -ne 'm,^.\s+([a-z_]\S+)$$, && print "$$1\n"' ) update: git fetch $(origin) for branch in $(filter-out $(localbranches),$(allbranches)); do \ git branch $$branch $(origin)/$$branch; \ done for branch in $(noncurrentbranches); do \ git checkout $$branch; \ git pull $(origin); \ done git checkout $(master) git pull $(origin) init: git init git remote add -f -m "$(master)" origin "$(origin)" git merge origin # git config remote.origin.push +"refs/heads/$(master)":"refs/heads/$(master)" .PHONY: update init