#! /bin/sh if [ $# -gt 0 ]; then GIT_REMOTE=$1; shift; fi if [ $# -gt 0 ]; then GIT_BRANCH=$1; shift; fi if [ $# -gt 0 ]; then USE_STASH=1; shift; fi GIT_BASE=${GIT_BASE:-$HOME/usr/git} GIT_REMOTE=${GIT_REMOTE:-origin} GIT_BRANCH=${GIT_BRANCH:-master} USE_STASH=${USE_STASH:-0} RESET="\033[0m" RED="\033[0;31m" GREEN="\033[0;32m" BROWN="\033[0;33m" PURPLE="\033[0;35m" CYAN="\033[0;36m" YELLOW="\033[1;33m" echo -e "remote: ${RED}$GIT_REMOTE${RESET}:${CYAN}$GIT_BRANCH${RESET}" for gitdir in ${GIT_BASE}; do echo -e "enter ${BROWN}${gitdir}${RESET}" && cd ${gitdir} || return 1 for dir in $(ls -1); do STASH=0 [ -d ${dir} ] && [ -e ${dir}/.git/config ] || continue # SEARCH REMOTE echo -e " enter ${BROWN}${dir}${RESET}" && cd $dir || exit 1 git remote show ${GIT_REMOTE} >/dev/null 2>&1 if [ $? -ne 0 ]; then echo -e " ${RED}${GIT_REMOTE} remote not found ${RESET}" && cd .. && continue fi # GC + CLEAN echo -ne " ${CYAN}clean$RESET ... " && git gc 2>/dev/null && git diff --quiet && echo -e "${GREEN}OK${RESET}" if [ $? -ne 0 ]; then if [ $USE_STASH -eq 1 ]; then STASH=1 echo -e "${RED}head is not clean, ${CYAN}git stash save${RESET}" && git stash save -q else echo -e "${RED}head is not clean, USE_STASH=0 ... ${CYAN}leave${RESET}" && cd .. && continue fi fi # PULL echo -ne " ${CYAN}pull${RESET}: ${YELLOW}${GIT_REMOTE}${RESET}:${PURPLE}${GIT_BRANCH}${RESET} ... " && \ git pull -q ${GIT_REMOTE} ${GIT_BRANCH} && echo -e "${GREEN}OK${RESET}" if [ $? -ne 0 ]; then echo -e "${RED}KO${RESET}" && cd .. && continue fi # PUSH echo -ne " ${CYAN}push${RESET}: ${YELLOW}${GIT_REMOTE}${RESET}:${PURPLE}${GIT_BRANCH}${RESET} ... " && \ git push -q ${GIT_REMOTE} ${GIT_BRANCH} && echo -e "${GREEN}OK${RESET}" if [ $? -ne 0 ]; then echo -e "${RED}KO${RESET}" && cd .. && continue fi if [ $STASH -eq 1 ]; then echo -e " ${RED}was not clean, ${CYAN}git stash pop${RESET}" && git stash pop -q fi cd .. done echo -e "leave ${BROWN}${gitdir}${RESET}" done