#!/bin/bash # Opens the github page for a repo/branch in your browser. # https://github.com/paulirish/git-open/ # # git open # git open [remote] [branch] # are we in a git repo? git rev-parse --is-inside-work-tree &>/dev/null if [[ $? != 0 ]] then echo "Not a git repository." exit 1 fi # assume origin if not provided # fallback to upstream if neither is present. remote="origin" if [ ! -z "$1" ] then remote="$1" fi remote_url="remote.${remote}.url" giturl=$(git config --get $remote_url) if [ -z "$giturl" ] then echo "$remote_url not set." exit 1 fi # get current branch if [ -z "$2" ] then branch=`git symbolic-ref -q --short HEAD` else branch="$2" fi # Make # and % characters url friendly branch=${branch//%/%25} && branch=${branch//#/%23} # URL normalization # Github gists if grep -q gist.github <<<$giturl; then giturl=${giturl/git\@gist.github\.com\:/https://gist.github.com} providerUrlDifference=tree # Github elif grep -q github <<<$giturl; then giturl=${giturl/git\@github\.com\:/https://github.com/} providerUrlDifference=tree # bitbucket elif grep -q bitbucket <<<$giturl; then giturl=${giturl/git\@bitbucket\.org\:/https://bitbucket.org/} providerUrlDifference=branch # Atlassian Stash elif grep -q "/scm/" <<<$giturl; then re='(.*)/scm/(.*)/(.*)\.git' if [[ $giturl =~ $re ]] then giturl=${BASH_REMATCH[1]}/projects/${BASH_REMATCH[2]}/repos/${BASH_REMATCH[3]} providerUrlDifference=browse branch="?at=refs%2Fheads%2F${branch}" fi # Gitlab else # custom gitlab gitlab_domain=$(git config --get gitopen.gitlab.domain) if [ ! -z "$gitlab_domain" ]; then if grep -q $gitlab_domain <<<$giturl; then giturl=${giturl/git\@${gitlab_domain}:/https://${gitlab_domain}/} providerUrlDifference=tree fi # hosted gitlab elif grep -q gitlab <<<$giturl; then giturl=${giturl/git\@gitlab\.com\:/https://gitlab.com/} providerUrlDifference=tree fi fi giturl=${giturl%\.git} if [ ! -z "$branch" ] then giturl="${giturl}/${providerUrlDifference}/${branch}" fi # simplify URL for master giturl=${giturl/tree\/master/} # get current open browser command case $( uname -s ) in Darwin) open=open;; MINGW*) open=start;; CYGWIN*) open=cygstart;; *) open=xdg-open;; esac # open it in a browser $open $giturl &> /dev/null exit 0