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



在我们公司,我们正在试验从svn转移到git。我们希望为团队简化这一点,同时不给系统管理员带来太多负担。

我们已经找到了一种方法,在每个团队拥有的(Windows(网络驱动器上制作一个裸存储库,并将其推送到/从中拉出。身份验证是通过文件访问权限安排的,因此不需要设置https和整个身份验证。太棒了(我们可以通过VPN远程访问驱动器,所以它几乎和https或git+ssh解决方案一样好(

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

因此,当开发人员推送到存储库时,驱动器可能正在备份。对于SVN,这可能会导致问题,这就是svn hotcopy存在的原因。

git是否存在同样的风险?当有人在推送一个裸存储库时,我可以将它复制到某个地方吗?当然,如果无法恢复正在进行的推送,那也没关系。如果必须做一些工作来恢复在推送时制作的备份(即通过删除完成一半的推送剩余数据(,也可以。但是,如果整个裸露的存储库变得损坏和无法使用,那么这就是一个问题。

我做了一些实验,没有发现问题,但这并不意味着不可能有任何问题。

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

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

bundle命令会将通常使用git-push命令通过网络推送的所有内容打包到一个二进制文件中,您可以通过电子邮件或偷偷地四处查看,然后将其分解到另一个存储库中。

github repo的备份和本地Git存储库的备份中也讨论了这种方法。

对本地回购的快速测试显示,以下内容创建了一个文件,其中包含完整回购备份中通常需要的所有内容:

$ git bundle create ../my.bundle --all

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

$ git clone my.bundle my-repo

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

然而,为了备份可能不在bundle文件中的东西(如配置、钩子、移植物、备用文件等(,我会进一步备份Git存储库(简称objectsrefslogs目录(和bundle文件(objectsrefs存储库目录的内容在bundle中,不需要(。除非捆绑包中确实包含这些文件;那么您只需要备份捆绑包。

如何处理备份过程中可能修改的其他文件?

如果你已经处理了这种情况,你可以在这里使用同样的方法。否则,您可能会在任何地方得到损坏的文件,无论是在git中,还是在svn中,甚至是在裸TXT中。

最新更新