https://github.com/samtuhka/pupil
Raw File
Tip revision: 24c90105bc4651f0ecb157624ac67cbde2804b04 authored by Moritz Kassner on 08 October 2013, 09:13:27 UTC
defined rec_dir in main.py for clarity
Tip revision: 24c9010
switch_to_master
#!/bin/bash
#
# take from https://github.com/jamiew/git-friendly
# Usage: branch [branchname]
#
#
# Switch to an existing branch, or create a new local-only branch.
# Adds remote tracking if a remote branch with the same name exists,
# in any remote, preferring the "origin" master if there are duplicates.
#
# Executing without arguments prints all local & remote branches
#
cd $(dirname $0)

remote="origin"
branch="master"

if [ -z $branch ]; then
  echo -e "\nSwitch to or create a new branch:"
  echo -e "  $(basename $0) [name]"
  echo -e "\nCurrent branches: "
  branches="git branch -a -vv"
  $branches
  echo
  exit 0
fi

local_branch_exists=$(git branch --no-color | egrep "$branch\$")
remote_branch_exists=$(git branch -r --no-color | egrep "$remote/$branch\$")
remotes=( $(git remote) )
remotes_with_branch=()
origin_has_branch=

for remote in "${remotes[@]}";
do
  remote_branch_exists=$(git branch -r --no-color | egrep "$remote/$branch\$")
  if [ "$remote_branch_exists" ] ; then
    remotes_with_branch=("${remotes_with_branch[@]}" "$remote")
    if [ "$remote" = "origin" ] ; then
      origin_has_branch=1
    fi
  fi
done

if [ ${#remotes_with_branch[@]} -gt 0 ]; then
  # if there's an origin remote with the named branch, use it
  if [ "$origin_has_branch" = "1" ] ; then
    remote=origin
  else # track the first matching branch alphabetically
    remote=${remotes[0]}
  fi
  remote_branch_exists="$remote/$branch"
fi

# If local exists already, switch to it
if [ -n "$local_branch_exists" ] && [ ! "$local_branch_exists" == '' ]; then
  echo "Switching to existing local branch..."
  git checkout $branch

  # Track remote branch if not already
  if [ -n "$remote_branch_exists" ] && [ ! "$remote_branch_exists" == '' ]; then
    tracking=$(git branch -vv | grep "*" | awk '{ print $4 '})
    # echo "Remote branch exists. Local branch is tracking: $tracking"
    if [[ ! "$tracking" =~ "$remote" ]]; then
      echo "Your local branch is not tracking the corresponding remote branch, fixing..."
      git branch --set-upstream-to $branch $remote/$branch
    fi
  # else
  #   echo "Remote branch does not exist, not doing anything"
  fi

# If remote exists, create a local branch that tracks the remote
elif [ -n "$remote_branch_exists" ] && [ ! "$remote_branch_exists" == '' ]; then
  echo "Tracking existing remote branch '$remote_branch_exists'..."
  git checkout -b $branch --track $remote/$branch

# Otherwise create a new local branch
else
  echo "Creating new local branch..."
  git checkout -b $branch --no-track
fi

exit 0
back to top