Git备份:我可以在推送到的时候复制一个git裸存储库吗?

skr*_*bel 7 git

在我们公司,我们正在尝试从svn转到git.我们希望为团队提供这么简单,同时不会给系统管理员造成太大负担.

我们已经找到了一种方法,通过在每个团队拥有的(Windows)网络驱动器上创建一个裸存储库,然后推送/拉出该存储库.通过文件访问权限安排身份验证,因此无需设置https和整个身份验证.大!(我们可以通过VPN远程访问驱动器,所以它几乎和https或git + ssh解决方案一样好)

更好的是,我们甚至可以免费获得备份,因为网络共享已经备份.但是,此备份运行相当不可预测(备份持续数小时,因此可能会持续到下一个工作日).

因此,有可能开发人员推送到存储库时备份驱动器.使用SVN,这可能会导致问题,这就是为什么svn hotcopy存在的问题.

git存在同样的风险吗?当有人推动它时,我可以在某处复制裸存储库吗?当然,如果无法恢复推送,那就没关系了.如果必须完成某些工作来恢复在推送时所做的备份(即通过删除半完成的推送残留数据),那也没关系.但是如果整个裸存储库破坏并且无法使用,那么这就是一个问题.

我做了一些实验,看不出问题,但这并不意味着没有任何问题.

编辑:我接受了一个'做正确的方法'的答案,因为这是我打算长期做的事情.然而,就目前而言,对于我们来说,在自动备份开始git clone大约一小时,一个简单的解决方案就是整个裸存储库(在同一个驱动器上).自动备份可能会错误地复制"真实"存储库(如果它已被使用)那时,但最近克隆的副本不会有问题.我们知道备份何时开始,而不是何时结束,这对我们来说已经足够了.

Dan*_*ruz 2

可能值得更改您的备份策略以忽略备份整个 Git 存储库,而是备份Git bundle. 来自Git 的小快乐

Bundle 命令会将通常使用 git Push 命令通过网络推送的所有内容打包到一个二进制文件中,您可以通过电子邮件或sneakernet 发送该文件,然后将其解绑到另一个存储库中。

备份 github 存储库备份本地 Git 存储库中也讨论了此方法。

对本地存储库的快速测试表明,以下内容会创建一个文件,其中包含人们在完整存储库备份中通常需要的所有内容:

$ git bundle create ../my.bundle --all
Run Code Online (Sandbox Code Playgroud)

从捆绑文件创建克隆很简单:

$ git clone my.bundle my-repo
Run Code Online (Sandbox Code Playgroud)

使用git ls-remote my.bundle表明所有标签和分支都在捆绑包中。

然而,为了备份可能不在捆绑文件中的内容(例如配置、挂钩、移植、替代等),我会进一步备份几个步骤并备份Git 存储库(简称objectsrefslogs目录)和包文件(objects和存储库目录的内容refs在包中,不需要)。除非捆绑包确实包含这些文件;那么你只需要备份该包。