1

My firm is setting up Gitolite on Linux and we would like to setup a backup for the server just in case of a crash on every commit to a 2nd Linux server.

How can we backup a Gitolite server on every commit to it? Is anyone doing this?

JMSAZ2013
  • 713
  • 1
  • 6
  • 17

2 Answers2

0

First you should not worry too much about git backups. - Everyone who is working in your project will have a complete clone on his box. - Hence more than enough backups. ;)

But you want to have another official repository updated after each push. In this case probably the easiest way is writing a small server side hook, that runs after each push and itself pushes the changes to the second repository.

You probably want to use a post-receive hook. For details have a look at here or here.

Example:

#create repositories
git init a
git init --bare b
git init --bare c

#add the hook in "b"
echo -e '#!/usr/bin/bash\nread old new ref\ngit push ../c $ref' >>b/hooks/post-receive
chmod +x b/hooks/post-receive

#create a commit in "a"
cd a
echo foo >test
git add .
git commit -m testcommit

#push it to "b"
git push ../b master
#notice the "remote:..." output of the hook

#find the commit in "c"
cd ../c
git log

This creates three repositories. When you have a commit in a and push it to b the hook will push it to c, too.

michas
  • 25,361
  • 15
  • 76
  • 121
0

Another way to generate backups is to ask your post-receive hook to create a bundle (a bit like in this question)

!/bin/sh

git bundle create "/path/to/backup/$(basename "$PWD").bundle"  --branches --tags

This is based on the fact that hook runs in a bare repo: see "how to get project path in hook script post-commit?".

The interest in bundle and git bundle is that is generates only one file, which is easier to manage/copy around.
And that fact acts as a (mostly read-only) repo, meaning you can clone from that file.
This would work:

git clone myrepo.bundle myrepo

See also:

Community
  • 1
  • 1
VonC
  • 1,262,500
  • 529
  • 4,410
  • 5,250