在我们公司,我们正在尝试从svn转到git。我们希望为团队提供这么简单,同时不会给系统管理员造成太大负担。
我们已经找到了一种方法,通过在每个团队拥有的(Windows)网络驱动器上创建一个裸存储库,并推送/拉出该存储库。通过文件访问权限安排身份验证,因此无需设置https和整个身份验证。大! (我们可以通过VPN远程访问驱动器,因此它几乎与https或git + ssh解决方案一样好)
更好的是,我们甚至可以免费获得备份,因为网络共享已经备份了。但是,此备份运行相当不可预测(备份持续数小时,因此可能会持续到下一个工作日)。
因此,在开发人员推送到存储库时,可能正在备份驱动器。使用SVN,这可能会导致问题,这就是svn hotcopy
存在的原因。
git存在同样的风险吗?当有人推动它时,我可以在某处复制裸存储库吗?当然,如果无法恢复推送,那就没关系了。如果必须完成一些工作来恢复在推送时所做的备份(即通过删除半完成推送残留数据),那也没关系。但是如果整个裸存储库都被破坏并且无法使用,那么这就是一个问题。
我做过一些实验并且看不到问题,但这并不意味着没有任何实验。
编辑:我接受了'以正确方式做'的答案,因为这是我打算长期做的事情。但是,就目前而言,对于我们来说,一个简单的解决方案就是git clone
整个裸存储库(在同一个驱动器上)大约一小时,然后自动备份开始。自动备份可能会错误复制“真实”存储库(如果它已在该点使用),但它不会遇到最近克隆的副本的问题。我们知道备份何时开始,而不是何时结束,这对我们来说已经足够了。
答案 0 :(得分:2)
可能值得更改备份策略,以忽略备份整个Git存储库,而是备份Git bundle
。来自Git's Little Bundle of Joy:
bundle命令会将通常使用git push命令通过线路推送的所有内容打包成一个二进制文件,您可以通过电子邮件或sneakernet将其解压缩到另一个存储库中。
此方法也在Backup of github repo和Backup a Local Git Repository中进行了讨论。
对本地仓库的快速测试显示,以下内容创建了一个文件,其中包含完整仓库备份中通常需要的所有内容:
$ git bundle create ../my.bundle --all
从捆绑文件创建克隆只是:
$ git clone my.bundle my-repo
使用git ls-remote my.bundle
表示所有标签和分支都在捆绑中。
但是,要备份可能不在捆绑文件中的内容(如配置,挂钩,移植,替换等),我会进一步采取备份并备份Git repository(简短objects
,refs
和logs
目录)和bundle文件(objects
和refs
存储库目录的内容都在bundle中,不需要)。除非捆绑包包含这些文件;那么你只需要备份捆绑包。
答案 1 :(得分:0)
如何处理其他文件在备份过程中可以修改的内容?
如果您已经处理过这种情况,可以在此处使用相同的方法。否则,您可能会在git,svn或甚至裸TXT中的任何地方损坏文件。