Skip to content

Instantly share code, notes, and snippets.

@Morrisai
Forked from markrickert/giratchive.sh
Created December 1, 2015 21:53
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 Morrisai/58bd3766a639b427045d to your computer and use it in GitHub Desktop.
Save Morrisai/58bd3766a639b427045d to your computer and use it in GitHub Desktop.
Git Archive Bash Script
#!/bin/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.gitarchive.$(date +%Y%m%d).tgz"
# 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 "Done!"
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