Skip to content

Instantly share code, notes, and snippets.

@doctorallen
Created August 24, 2017 14:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save doctorallen/b38976971f61868ec6d3d978ee479479 to your computer and use it in GitHub Desktop.
Save doctorallen/b38976971f61868ec6d3d978ee479479 to your computer and use it in GitHub Desktop.
Clones a Git repository with all tags and branches, and archives it as a .tar.gz file.
#!/usr/bin/env bash
# Takes one parameter: a remote git repository URL.
#
# This is the stuff this script does:
#
# 1. Clones the repository
# 2. Fetches all remote branches
# 3. Compresses the folder
# 4. Deletes the cloned folder.
#
# Your remote repository is left untouched by this script.
if [ "$1" = "" ]
then
echo "Usage: $0 <git repositiry clone URL>" 1>&2
exit 1
fi
# Variable definitions
GITURL=$1
GITNAME=${GITURL##*/}
FOLDERNAME=${GITNAME%.git}
TARNAME="$FOLDERNAME.$(date +%Y-%m-%d).tar.gz"
# Clone the repos and go into the folder
git clone --recursive $GITURL $FOLDERNAME
cd $FOLDERNAME
# Pull all branches
git branch -r | grep -v HEAD | grep -v master | while read branch; do
git branch --track ${branch##*/} $branch
done
#Pull all remote data and tags
git fetch --all
git fetch --tags
git pull --all
git gc # Cleanup unnecessary files and optimize the local repository
# Create an archive of the directory
cd ../
tar cfz "$TARNAME" "$FOLDERNAME/"
# Remove the git clone
rm -rf "./$FOLDERNAME"
echo "Your archived git repository is named $TARNAME"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment