Skip to content

Instantly share code, notes, and snippets.

@spenserlee
Forked from markrickert/giratchive.sh
Last active May 4, 2018 20:07
Show Gist options
  • Save spenserlee/e9a08757404396a45d2ce84080a19586 to your computer and use it in GitHub Desktop.
Save spenserlee/e9a08757404396a45d2ce84080a19586 to your computer and use it in GitHub Desktop.
Git Archive Bash Script
# 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.git.$(date +%Y-%m-%d).tgz"
# Clone the repos and go into the folder
git clone --recursive $GITURL $FOLDERNAME
if [[ ! $? -eq 0 ]]; then
echo -e "\nPossibly bad URL: ${GITURL}" 1>&2
exit 1
fi
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