From 1aee1843d078eb9f5681cec99ffbd4dc798803e1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bar=C4=B1=C5=9F=20Metin?= Date: Fri, 2 Jul 2010 17:40:55 +0200 Subject: [PATCH] merge and push all branches from remote --- scripts/git-mirror.sh | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/scripts/git-mirror.sh b/scripts/git-mirror.sh index 6dfe88f..e7af573 100755 --- a/scripts/git-mirror.sh +++ b/scripts/git-mirror.sh @@ -31,6 +31,39 @@ function run () { popd > /dev/null } +function merge_all_branches () { + NAME=$1 + REMOTE=$2 + REPO_DIR=$3 + + pushd $REPO_DIR + BRANCHES=$(git branch -r | grep $REMOTE | grep -v "\->" | sed "s/.*\///g") + popd > /dev/null + + run "git checkout master" ${REPO_DIR} + run "git merge --ff $REMOTE/master" ${REPO_DIR} + for BRANCH in $BRANCHES ; do + run "git branch $BRANCH" ${REPO_DIR} + run "git checkout $BRANCH" ${REPO_DIR} + run "git merge --ff $REMOTE/$BRANCH" ${REPO_DIR} + done +} + +function push_all_branches () { + NAME=$1 + REMOTE=$2 + REPO_DIR=$3 + + pushd $REPO_DIR + BRANCHES=$(git branch -r | grep $REMOTE | grep -v "\->" | sed "s/.*\///g") + popd > /dev/null + + run "git push $REMOTE master:master" ${REPO_DIR} + for BRANCH in $BRANCHES ; do + run "git push $REMOTE $BRANCH:$BRANCH" ${REPO_DIR} + done +} + function mirror () { for arg in "$@" ; do NAME=$(basename ${arg} | sed s/.git$//g) @@ -49,7 +82,7 @@ function mirror () { msg "pulling from ${NAME}" run "git fetch origin --tags" ${REPO_DIR} run "git fetch origin" ${REPO_DIR} - run "git merge --ff origin/master" ${REPO_DIR} + merge_all_branches $NAME origin $REPO_DIR if [ $? -ne 0 ] then error "Can not fetch from ${MASTER_REPO}" @@ -63,13 +96,13 @@ function mirror () { msg "pushing ${NAME} to local master" run "git fetch local_master --tags" ${REPO_DIR} run "git fetch local_master" ${REPO_DIR} - run "git merge --ff local_master/master" ${REPO_DIR} + merge_all_branches $NAME local_master $REPO_DIR if [ $? -ne 0 ] then error "Can not fetch from ${MIRROR_REPO}" else - run "git push local_master" ${REPO_DIR} run "git push --tags local_master" ${REPO_DIR} + push_all_branches $NAME local_master $REPO_DIR fi fi done -- 2.43.0