Snippets

Ben Buchanan BASH: git update script

Updated by Ben Buchanan

File snippet.sh Modified

  • Ignore whitespace
  • Hide word diff
 ONFORK=$(git remote | grep -i upstream)
 
 # get branch name
-# BRANCH=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')
 BRANCH=$(git rev-parse --abbrev-ref HEAD)
 
+
 spacer() {
     echo "------------------------------------------------------------------------------------------"
 }
     $1
     spacer
 }
-prune() {
-    # prune guards against dangling blobs
-    echoAndRun "git prune"
+gitmaintenance() {
+    # gc calls prune as well https://git-scm.com/docs/git-gc
+    echoAndRun "git gc"
 }
 checkoutMaster() {
     echoAndRun "git checkout master"
 pullUpstreamMaster() {
     echoAndRun "git pull upstream master"
 }
+pullMaster() {
+    echoAndRun "git pull origin master"
+}
 pushOriginMaster() {
     echoAndRun "git push origin master"
 }
+offerToMergeFromMaster() {
+    read -r -p "Merge from master? [y/N] " response
+    if [[ $response =~ ^([yY][eE][sS]|[yY])$ ]]
+    then
+        echoAndRun "git merge master"
+    fi    
+}
 
 spacer
 
 if [ "$ONFORK" ]
 then
+    echo "On a fork"
     echo "Upstream remote detected. Will update fork and push to origin master."
     spacer
-
     if [ "$BRANCH" == "master" ]; then
         pullUpstreamMaster
-        prune
+        gitmaintenance
         pushOriginMaster
     else
         checkoutMaster
         pullUpstreamMaster
-        prune
+        gitmaintenance
         pushOriginMaster
         checkoutLastBranch
-
-        read -r -p "Merge from master? [y/N] " response
-        if [[ $response =~ ^([yY][eE][sS]|[yY])$ ]]
-        then
-            echoAndRun "git merge master"
-        fi
-
+        offerToMergeFromMaster
     fi;
-
 else
-    echoAndRun "git pull"
-    prune
-fi
+    if [ "$BRANCH" == 'master' ]; then
+        echo "On master"
+        echoAndRun "git pull"
+        gitmaintenance
+    else
+        echo "On a branch"
+        checkoutMaster
+        pullMaster
+        gitmaintenance
+        checkoutLastBranch
+        offerToMergeFromMaster
+    fi;
+fi
Created by Ben Buchanan

File snippet.sh Added

  • Ignore whitespace
  • Hide word diff
+#!/bin/bash
+ORIGIN=$(git remote | grep -i origin)
+if [[ ! $ORIGIN ]];then
+    echo "Remote named 'origin' is required."
+    exit
+fi
+
+# if there's a remote called "upstream" presume we're on a fork
+ONFORK=$(git remote | grep -i upstream)
+
+# get branch name
+# BRANCH=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')
+BRANCH=$(git rev-parse --abbrev-ref HEAD)
+
+spacer() {
+    echo "------------------------------------------------------------------------------------------"
+}
+echoAndRun() {
+    echo "$1"
+    $1
+    spacer
+}
+prune() {
+    # prune guards against dangling blobs
+    echoAndRun "git prune"
+}
+checkoutMaster() {
+    echoAndRun "git checkout master"
+}
+checkoutLastBranch() {
+    echoAndRun "git checkout -"
+}
+pullUpstreamMaster() {
+    echoAndRun "git pull upstream master"
+}
+pushOriginMaster() {
+    echoAndRun "git push origin master"
+}
+
+spacer
+
+if [ "$ONFORK" ]
+then
+    echo "Upstream remote detected. Will update fork and push to origin master."
+    spacer
+
+    if [ "$BRANCH" == "master" ]; then
+        pullUpstreamMaster
+        prune
+        pushOriginMaster
+    else
+        checkoutMaster
+        pullUpstreamMaster
+        prune
+        pushOriginMaster
+        checkoutLastBranch
+
+        read -r -p "Merge from master? [y/N] " response
+        if [[ $response =~ ^([yY][eE][sS]|[yY])$ ]]
+        then
+            echoAndRun "git merge master"
+        fi
+
+    fi;
+
+else
+    echoAndRun "git pull"
+    prune
+fi
HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.