Skip to content

Instantly share code, notes, and snippets.

@nilayp
Forked from philippb/git-backup-to-AWS-S3.sh
Last active May 23, 2023 00:46
Show Gist options
  • Star 17 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save nilayp/a2719ca5695c1d5a56c556e89207577d to your computer and use it in GitHub Desktop.
Save nilayp/a2719ca5695c1d5a56c556e89207577d to your computer and use it in GitHub Desktop.
Complete git repository backup script to Backblaze B2
#!/bin/bash
# Script to backup git repo to Backblaze B2
# Set bucket, dir, password and account to use for the backup. I keep mine in local env vars
# These are set by localrc which lives on an encrypted home directory and is executed by my bashrc
# Ensure you have authorized the B2 command line tool with the correct account AND added your SSH
# public key to your github account, if you need to backup private repositories.
# To restore this repo in the future, download it from B2, extract it and then use this command:
# cd old-repository.git
# git push --mirror https://github.com/exampleuser/new-repository.git
# Future details are here: https://help.github.com/articles/duplicating-a-repository/
bucket=$GITHUB_BACKUP_BUCKET
dir=$GITHUB_BACKUP_DIR
password=$GITHUB_BACKUP_PASSWORD
account=$GITHUB_ACCOUNT
# Setup repository to $1
repository=$1
date=`date '+%Y%m%d%H%M%S'`
# Create the backup directory
mkdir -p $dir
echo "Backing up $repository"
git clone --mirror git@github.com:$repository $dir/$repository.$date.git
if [ $? -ne 0 ]; then
echo "Error cloning $repository"
exit 1
fi
tar cpzf $dir/$repository.$date.git.tar.gz $dir/$repository.$date.git
if [ $? -ne 0 ]; then
echo "Error compressing $repository"
exit 1
fi
#Optional file encryption
#echo $password | gpg -c --passphrase-fd 0 $dir/$repository.$date.git.tar.gz
#if [ $? -ne 0 ]; then
# echo "Error encrypting $repository"
# exit 1
#fi
if [ -f $dir/$repository.$date.git.tar.gz ]; then
b2 upload-file $bucket $dir/$repository.$date.git.tar.gz git.$repository.$date.git.tar.gz
fi
if [ $? -ne 0 ]; then
echo "Error uploading $repository to Backblaze B2"
exit 1
fi
#delete tar file and checked out folder
/bin/rm $dir/$repository.$date.git.tar.gz
/bin/rm -rf $dir/$repository.$date.git
if [ $? -ne 0 ]; then
echo "Error removing $repository"
exit 1
fi
echo "Succesfully backed up $repository"
@katrinleinweber
Copy link

katrinleinweber commented Nov 15, 2018

How would this script look with a personal access token instead of a password, and which token scopes would be needed? Or does GITHUB_BACKUP_PASSWORD mean the password of the backup target on B2?

@33b5e5
Copy link

33b5e5 commented Mar 13, 2021

How would this script look with a personal access token instead of a password, and which token scopes would be needed? Or does GITHUB_BACKUP_PASSWORD mean the password of the backup target on B2?

@katrinleinweber the password in this context is for an optional feature to encrypt the backup before storing on Backblaze. That feature is commented out above, it's the section that starts #Optional file encryption. Unless you uncomment those next 5 lines of code, $GITHUB_BACKUP_PASSWORD isn't used.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment