====== backing up repository ======
===== notes =====
* do **NOT** use rsync
* git is smarter about what needs copied and will be faster
* a commit or other action could be in progress
===== using a hook =====
* you have a myproject directory containing the .git repository, and would like to back up the repository contents
* create the backup repo
cd /backup/destination
git init --bare myproject.git
* do the initial push of your project to the backup repo
cd /myproject
git push --all --force /backup/destination/myproject.git
* in your local git repo, make a copy of the .git/hooks/post-commit file and modify it similar to this
# assuming you have a mount point at /gitshare
echo -e "backing up repo...\n";
git push --all --force /backup/destination/myproject.git
===== without changing local repo =====
* you have a myproject directory containing the .git repository, and would like to back up the repository contents
* clone your project as a "mirror"
cd /backup/destination
git clone --no-hardlinks --mirror /path/to/myproject backupfoldername
* work, work, work
* commit inside myproject
* time to backup...go to the backup directory and "fetch" the project
cd /backup/destination/backupfoldername
git fetch
===== automating backup of many repos =====
* you have many projects that you want to backup, like to a usb drive
* clone each project
cd /path/to/your/usb/drive/destfolder
git clone --mirror /project.git
* create a shell script (i.e. **pullall.sh**) to loop through each project and fetch
#!/bin/sh
`which ls` -1d *.git | while read item;do
echo -e "updating ${item}...\n"
cd "${item}"
git fetch --all --force
cd ..
done
* run the script with ./pullall.sh (make sure it is executable: chmod 755 pullall.sh)