我的公司正在 Linux 上设置 Gitolite,我们想为服务器设置一个备份,以防在每次提交到第二个 Linux 服务器时发生崩溃。
我们如何在每次提交时备份 Gitolite 服务器?有人这样做吗?
另一种生成备份的方法是让你的 post-receive 钩子创建一个包(有点像这个问题)
!/bin/sh
git bundle create "/path/to/backup/$(basename "$PWD").bundle" --branches --tags
这是基于钩子在裸仓库中运行的事实:请参阅“如何在提交后钩子脚本中获取项目路径? ”。
对bundlegit bundle
的兴趣在于它只生成一个文件,这更容易管理/复制。
这个事实就像一个(主要是只读的)repo,这意味着你可以从那个文件中克隆。
这会起作用:
git clone myrepo.bundle myrepo
也可以看看:
git bundle
:捆绑标签和头”,首先你不应该太担心 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
。