Greetings,
I thought I’d share a quick script in the scope of backing up GIT repositories for the purposes of encrypted and compressed off-site backups.
Unfortunately git does not have an equivalent of svnadmin dump or export, which can conveniently be piped to stdout.
What the above scenario would do is shorten the amount of commands a script would require in order to accomplish a similar task.
Find below a quick bash script that clones a repository, tar/gzip’s it, encrypts the archive and keeps 7 days worth of archive files :
#!/bin/sh # GIT Backup script # Written by Star Dot Hosting todaysdate=`date "+%Y-%m-%d"` #check command input if [ -z "$1" ]; then echo "GIT BACKUP SCRIPT" echo "-----------------" echo "" echo "Usage : ./backup.sh reponame , i.e. yourdomain.git" echo "" exit 0 fi echo "GIT Backup Log: " $currentmonth > /var/log/backup.log echo -e "----------------------------------------" >> /var/log/backup.log echo -e "" >> /var/log/backup.log # Find and remove files older than 7 days /usr/bin/find /data/git/git-backups -type f -mtime +7 -delete >> /var/log/backup.log 2>&1 # Begin creating working directory to clone into /bin/mkdir /data/git/git-backup/working >> /var/log/backup.log 2>&1 /usr/bin/git clone /data/git/$1 /data/git/git-backup/working >> /var/log/backup.log 2>&1 # Archive working directory into repo name encrpyted tar file /bin/tar -czvf - /data/git/git-backup/working | /usr/bin/openssl enc -aes-256-cbc -pass pass:abcABC123 -e | dd of=/data/git/git-backup/$1.tar.gz.enc >> /var/log/backup.log 2>&1 # Remove working directory /bin/rm -rf /data/git/git-backup/working >> /var/log/backup.log 2>&1
FYI if you ever needed to decrypt the openssl encrypted backup archive, the command below should do the job :
openssl aes-256-cbc -d -pass pass:abcABC123 -in $1.tar.gz.enc -out decrypted.tar.gz