====== 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)