gh-clone
GitHub clone repo util
Very simple bash function that let you quickly clone git your repositories stored on GitHub.
Ah, and it is also my first bash literate programming experiment.
Do not edit fun.sh, run instead make fun to generate source from this file.
See also bb-clone twin project, which do the same but on Bitbucket.
Annotated source
gh-clone expects one parameter, otherwise prints its usage
if [ -z "$1" ]
then
cat <<-EOF
# GitHub clone repo util
##
# Installation instructions, source and license available here:
# https://github.com/fibo/gh-clone#gh-clone
##
USAGE: gh-clone [user/]repo
EOF
return 0
fi
Repos will be cloned under folder $GITHUB_DIR which defaults to ~/github.com.
GITHUB_DIR=${GITHUB_DIR:-~/github.com}
MY_GITHUB_USER is prompted once, if not already configured.
MY_GITHUB_USER=$(git config --global github.user)
if [ -z "$MY_GITHUB_USER" ]
then
read -p "Enter your github.user: " MY_GITHUB_USER
git config --global github.user $MY_GITHUB_USER
fi
Parse parameter which can be given in the form $GITHUB_USER/$REPO_NAME or just $REPO_NAME.
GITHUB_USER=$(echo $1 | cut -d / -f1)
REPO_NAME=$(echo $1 | cut -d / -f2)
In the latter case $GITHUB_USER defaults to $MY_GITHUB_USER.
if [ "$REPO_NAME" == "$GITHUB_USER" ]
then
GITHUB_USER=$MY_GITHUB_USER
fi
Clone repo under $GITHUB_DIR/$GITHUB_USER/$REPO_NAME and cd into it.
Use git clone --recursive to initialize and updated submodules.
TARGET_DIR=$GITHUB_DIR/$GITHUB_USER
mkdir -p $TARGET_DIR
cd $TARGET_DIR
[email protected]:$GITHUB_USER/${REPO_NAME}.git
git clone --recursive $REPO_URL && cd $REPO_NAME
Bonus feature: run yarn install or npm install if it looks like a Node project.
if [ -e package.json ]
then
if [ -e yarn.lock ]
then
YARN=$(which yarn 2> /dev/null)
if [ ! -z "$YARN" ]
then
$YARN install
fi
else
NPM=$(which npm 2> /dev/null)
if [ ! -z "$NPM" ]
then
$NPM install
fi
fi
fi
… and run bower install if there is a bower.json anb bower is found in your PATH.
Clean up
unset YARN
unset GITHUB_DIR
unset GITHUB_USER
unset MY_GITHUB_USER
unset NPM
unset REPO_NAME
unset REPO_URL
unset TARGET_DIR
Installation
Instructions borrowed from git-aware-prompt.
mkdir -p ~/.bash
cd ~/.bash
git clone git://github.com/fibo/gh-clone.git
Edit your ~/.bash_profile or ~/.profile and add the following
source ~/.bash/gh-clone/fun.sh