我们如何在每次提交时备份或克隆GitoLite服务器

时间:2013-10-08 21:40:34

标签: linux git gitolite

我的公司正在Linux上设置Gitolite,我们希望为服务器设置备份,以防每次提交到第二台Linux服务器时发生崩溃。

我们如何在每次提交时备份Gitolite服务器?有人这样做吗?

2 个答案:

答案 0 :(得分:0)

首先,您不必过于担心git备份。 - 在你的项目中工作的每个人都将在他的盒子上有一个完整的克隆。 - 因此备份足够多。 ;)

但是你想在每次推送后更新另一个官方存储库。在这种情况下,最简单的方法可能是编写一个小型服务器端钩子,它在每次推送后运行,并将自己的更改推送到第二个存储库。

您可能想要使用post-receive钩子。有关详细信息,请查看herehere

示例:

#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

这会创建三个存储库。当您在a中提交并将其推送到b时,该挂钩也会将其推送到c

答案 1 :(得分:0)

生成备份的另一种方法是询问您的收件后挂钩create a bundle(有点像this question

!/bin/sh

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

这是基于钩子在裸仓中运行的事实:见" how to get project path in hook script post-commit?"。

捆绑和git bundle 的兴趣是仅生成 一个文件 ,这更易于管理/复制。
而这个事实就像一个(大多数只读)回购,意味着你可以从那个文件中克隆 这可行:

git clone myrepo.bundle myrepo

另见: