2010-05-03 36 views
38

我想知道是否有一个简单的方法,即像一个简单的cron作业,定期从远程git存储库到本地只读镜像备份的目的?通过拉动来镜像git存储库?

理想情况下,它会拉所有的分支和标签,但主/行李箱/头就足够了。

我只是需要一种方法来确保如果主git服务器死亡,我们有一个备份位置,我们可以手动故障转移到。

+0

bash脚本想法有什么问题?你可以修改它做一次探测/拉动,然后把它安装成cron作业,不是吗? – Santa 2010-05-03 07:50:50

+0

该脚本将会很好。你知道每个git repo的克隆都是完整的备份吗?所以你很可能已经有很多的回购副本了。 – 2010-05-03 08:23:34

+0

@安德鲁,好点。在我们的情况中,尽管我们有例子,在任何地方都没有克隆,也就是说我们有一些由客户端通过FTP更新的代码。我们使用git来跟踪客户正在做什么,并且没有克隆它的任何地方。 – corydoras 2010-05-04 07:31:40

回答

56

首先创建的镜像

git clone --mirror [email protected]:repo.git 

然后设置一个cron作业是这样的:

*/1 * * * * gitbackup cd /backup/repo.git && git fetch -q --tags 

这将备份每分钟的变更。也许你不想经常这样做。

+0

这很棒。我知道会有一个简单的答案! (我很亲密) – corydoras 2010-05-04 07:38:34

+3

什么是gitbackup?我找不到这样的命令(谷歌也没有)。 – 2011-02-17 10:47:48

+7

@系统crontab中的ihor-kaharlichenko(/ etc中的那个)这是一个用于在其下运行作业的用户帐户。 – Zart 2011-03-13 12:05:51

-3

你有直接访问服务器吗?那么你可以只是rsync.git目录

+1

根据平台的不同,简单地复制git repo可能会导致问题,例如,由于权限未从源传播到目标。克隆因此是一个更好的解决方案,因此答案为-1。 – 2010-05-03 08:39:02

+0

rsync可以解决这个问题。此外,我经常发现拉不会拉动遥控器,暗箱和其他重要信息 – knittl 2010-05-03 08:57:07

+0

我真的不知道这个答案是如何*如此糟糕*?也许这不是最好的解决方案,但如果你可以直接访问服务器,它绝对是一个可行的解决方案。如果你rsync直接到一个tar档案你甚至没有权限的问题... – knittl 2010-05-03 09:49:43

9

正如安德鲁指出的,每个git仓库的克隆都是仓库的完整备份。也就是说,如果您想要自动备份到特定计算机的某些内容,您可以在备份服务器上创建一个裸回购,并将其与所有需要备份的分支一起推入,以便最初填充它。然后,只需在“主”回购库上设置一个后续更新挂钩,以便一旦有提交进入,它就会继续前进,并将它们推送到备份回购站。不需要一个cron作业或rsync,它几乎是一个现场拷贝。

+1

+1用于添加一般性好的解决方案(因此是一个很好的参考),但不回答问题。我们正在问如何拉动NAT,因为我们需要通过NAT – corydoras 2010-05-04 07:46:08