如果我们的组织是开关从中央服务器的风险投资就像颠复分布式风险投资就像git,我怎么确保我所有的代码是安全的硬件故障?

有一个中央服务器的风险,我只是需要备份储存库的每一天。如果我们使用DVC然后还会有载荷的代码分支机构在所有的开发机,并且如果硬件无法(或dev失去他的笔记本电脑或被盗)那么我们就不会有任何备份。

注意,我不认为这是一个很好的选择"使开发推分支机构的服务器"--这是 繁琐的 和开发人员将最终没有这样做。

是否有一个共同的方法解决这个问题?

一些澄清:

与本机-中央服务器的风险,然后 的一切 必须在中央服务器除了开发的最近期变化。因此,例如,如果开发人员决定分做一个修正,即分是在中央服务器和备份可用。

如果我们使用DVC然后,开发商可以做一个地方分支(事实上许多地方分支)。没有这些分支机构在中央服务器和备份可用,直到开发认为,"噢,我应该推送到中央服务器"。

那差我看到(正确的我,如果我错了!):半数实现的特点及错误修正,将可能不适用于备份关于中央服务器,如果我们使用DVC,但是与一个正常的风险.我怎么保持这种代码的安全吗?

有帮助吗?

解决方案

我认为你将会发现,在实践中开发人员将更愿意使用一个中央储存库于推动和拉动之间的彼此的地方储存库。一旦你已经克隆了一个中央储存库,而工作上的任何跟踪分支、获取和推动是微不足道的命令。加入半打的遥控器给所有同事的地方储存库是一个痛苦和这些储存库可能不总是可以访问(关闭,在一个笔记本电脑所采取的家庭,等等)。

在某一点,如果你们都是工作上的相同的项目,所有的工作需要整合。这意味着你需要一个一体化分支,所有的变化走到一起。这自然需要以地方可通过所有开发的,它不属于,例如,在导致开发的笔记本电脑。

一旦你已经设立了一个中央储存库可以使用cvs/svn式的工作流程检查和更新。cvs更新变为git取和变基如果你有本地的变化或只是文件,如果你没有。cvs承诺变为git的承诺,并让的推动。

与此设置你是在一个类似的立场与你完全集中风险的系统。一旦开发商提交他们的变化(git push),其中他们需要做的可见到团队的其他成员,他们是在中央服务器,并将进行备份。

有什么需要的纪律,在这两种情况下是防止开发人员保持长期运行的变化的中央储存库。我们大多数人可能曾在一个情况下,一项开发工作在功能'x',这需要根本改变某些核心的代码。这一变化将导致每个人都需要完全重建,但特征是不是准备为主流还没有那么他只是不断检查,直到一个合适的时间点。

这种情况是非常相似的两个情况虽然有一些实际的差异。令,因为你得到执行局提交和可以管理当地的历史,需要推到中央储存库可能不会觉得,为多由个体开发商作为喜欢的东西cvs.

另一方面,使用当地的承诺可以作为一个优势。推动当地的所有承诺一个安全的地方在中央储存库应该不会非常困难。地方分支机构可存储在一个开发特定的标签名字空间。

例如,Joe Bloggs,别名可能在他的地储存库进行类似下面的响应(例如) git mybackup.

git push origin +refs/heads/*:refs/jbloggs/*

这是一个简单的命令,可在任何一点(例如结束一天),以确保所有他地方的改变是安全备份。

这有助于与各种各样的灾害。乔的计算机打击了他可以使用另一台机器,并获取保存承诺和继续在那里,他离开的地方。乔生病了吗?弗莱德可以读取乔的支抓住,必须有解决,他昨天提出,但没有一个机会试验针对的主人。

回到原来的问题。有没有需要之间的差dvc和集中的风险?你说的一半,实现的特点和错误修正将不会结束了关于中央储存库的dvc情况,但我会认为有需要的任何区别。

我已经看到许多情况下这里一半实现的特点保持一个开发工作框当使用集中的风险.它要么采取一项政策,允许一半写的功能,进行检查在主流或决定,必须创建一个中心分支。

在dvc同样的事情可能发生,但同一决定应该作出。如果有重要的,但不完全工作,它需要保存的处理。优点内,建立这个中心支几乎是微不足道的。

其他提示

我认为使用分布式VCS必然意味着必须以完全分布式方式使用它,这是一种谬论。设置一个通用的git存储库并告诉每个人存储库是官方存储库是完全有效的。对于正常开发工作流,开发人员将从公共存储库中提取更改并更新其自己的存储库。只有在两个开发人员积极协作处理特定功能的情况下,他们才需要直接相互提取更改。

由于有多个开发人员正在开发一个项目,因此必须记住从其他人那里获取更改是非常繁琐的。如果没有有中央存储库,你会怎么做?

在工作中,我们有一个备份解决方案,每天备份每个人的工作目录,并将每一周写入DVD。因此,虽然我们有一个中央存储库,但每个存储库都会备份。

使用“中心”部分并不罕见。服务器作为DVCS中的权限,它还为您提供备份的位置。

我发现这个问题有点奇怪。假设您使用的是非分布式版本控制系统,例如CVS,您将在中央服务器上拥有一个存储库,并在开发人员的服务器上进行工作。你如何备份存储库?您如何支持开发人员的工作进度?这些问题的答案正是您处理问题所必须做的。

使用分布式版本控制,开发人员服务器上的存储库正在进行中。你想支持它吗?然后备份它!就这么简单。

我们有一个自动备份系统,可以抓取我们指定的机器上的任何目录,因此我将我的机器上的任何存储库和工作副本添加到最后,包括git和CVS存储库。

顺便说一下,如果您在发布产品的公司中使用分布式版本控制,那么拥有一个中央存储库。这是你释放的那个。它可能不在特殊的服务器上;它可能出现在一些开发人员的硬盘上。但是您发布的存储库是中央存储库。 (我想如果你还没有发布,但是,你可能还没有。)我觉得所有项目都有一个或多个中央存储库。 (实际上,如果它们有多个,那么它是两个项目,一个是分叉。)这也适用于开源。

即使您没有中央存储库,解决方案也是如此:在开发人员的计算机上备份工作。无论如何你应该这样做。正在进行的工作是在分布式存储库而不是CVS工作副本或直接非版本化目录这一事实并不重要。

您可以让开发人员主目录通过本地网络安装远程设备。然后,您只需担心使网络存储安全。或者也许你可以使用像 DropBox 之类的东西来无缝地复制你当地的仓库。

您团队中的所有开发人员也可以在服务器上拥有自己的分支(可以是每张票,也可以是每个开发人员等)。这样他们就不会破坏master分支中的构建,但他们仍然可以将正在进行的工作推送到备份的服务器。

我自己的git_remote_branch 工具对于那种工作流程可能会派上用场(注意它需要Ruby)。它有助于操纵远程分支。

作为旁注,谈论repo安全性,在你的服务器上你可以设置一个post-commit钩子,它做一个简单的git clone或git push到另一台机器......你在每次提交后得到一个最新的备份!

我们使用rsync将各个开发人员.git目录备份到服务器上的目录。这是使用围绕git clone的包装器脚本和post-commit等钩子设置的。

因为它是在post-* hooks中完成的,所以开发人员不需要记住手动执行它。而且因为我们使用带有超时的rsync,如果服务器出现故障或用户正在远程工作,它们仍可以正常工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top