Incremental backups with git bundle, for all branches

馋奶兔 提交于 2019-11-27 19:46:27

(We discussed this problem with Jukka, this is the outcome.)

Preliminaries:

  1. Have the last backup available as backup.bundle
  2. Have a remote backup that points at backup.bundle

Making a backup:

  1. git fetch backup – just to make sure we're up to date
  2. git bundle create newbackup.bundle ^backup/A ^backup/B A B C
    • This means we create a bundle that excludes all the stuff that was already in the bundle
    • It's easy to generate the needed ^backup/A-style arguments from refs/remotes/backup/
    • Likewise the A-style arguments are from refs/heads
  3. copy newbackup.bundle to wherever you keep your backups
  4. replace backup.bundle with newbackup.bundle so you know where to start the next incremental backup

Recovering:

  1. Have a repository that is either empty or represents an old version of your repository
  2. For every backup file, in sequence:
    1. git remote rm recovery
    2. git remote add recovery <name-of-bundle>
    3. git fetch recovery – you need to name the remote for this to work
  3. Now you should have every branch available in refs/remotes/backup

Try using --since with --all.

Create the first backup:

git bundle create mybundle-all --all

Do an incremental backup:

git bundle create mybundle-inc --since=10.days --all

The incremental should contain all commits on all branches that have happened in the past 10 days. Make sure the --since parameter goes back far enough or you might miss a commit. Git will also refuse to create the bundle if no commits have happened in that time-frame, so plan for that.

You could do

git clone --mirror <your_repo> my-backup.git

It will create a bare repo with all refs.

Then you could periodically do git push --mirror <my-backup>.

Seems opqdonut solution will not work, cause ^backup/A ^backup/B only points to last incremental backup. And actually need to exclude refs from all previous incremental backups.

Need to create remotes for each of previous bundles.

UPD: No, it should work, see Jukka comment below.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!