1

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

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

4

2 回答 2

0

另一种生成备份的方法是让你的 post-receive 钩子创建一个包(有点像这个问题

!/bin/sh

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

这是基于钩子在裸仓库中运行的事实:请参阅“如何在提交后钩子脚本中获取项目路径? ”。

对bundlegit bundle的兴趣在于它只生成一个文件,这更容易管理/复制。
这个事实就像一个(主要是只读的)repo,这意味着你可以从那个文件中克隆。
这会起作用:

git clone myrepo.bundle myrepo

也可以看看:

于 2013-10-09T07:21:55.673 回答
0

首先你不应该太担心 git 备份。- 在您的项目中工作的每个人都将在他的盒子上拥有一个完整的克隆。- 因此,备份绰绰有余。;)

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

您可能想使用接收后挂钩。有关详细信息,请查看此处此处

例子:

#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

于 2013-10-08T22:37:27.820 回答