Mr.*_*Boy 9 version-control dvcs
这看起来似乎是一个愚蠢的问题,但是如何在没有服务器的情况下设置工作的drectory?企业如何保留回购的安全备份副本?
我假设必须有一个中央回购......但那么它究竟是如何"分配"的呢?我一直认为服务器 - 客户端(SVN)与对等(GIT)的区别,但我不相信这是正确的,除非像GIT这样的工具依赖于洪流式技术吗?
分布式版本控制系统真的没有集中式存储库吗?
没有强制执行的中央存储库 - 它只是按惯例.大多数项目做有一个中央存储库,但每个仓库是在他们有充分的历史,可以推拉相互之间的补丁感相等.
考虑它的一种方法是集中式VCS以星型拓扑结构固定:一个中央集线器充当具有完整存储库的服务器,其中一个或多个客户端挂起.客户通常只拥有最新清理结账的副本和有限的历史记录(如果有).因此大多数操作都需要往返服务器.通过在一个存储库中创建分支来实现分支.
在分布式VCS中,网络拓扑没有限制.理论上你可以有任何你喜欢的形状.您可以为每个团队或子项目创建单独的存储库,并进行阶段提交.您可以拥有一个稳定的存储库和一个不稳定的存储库,以及许多功能分支,等等.并且没有客户端/服务器区别 - 所有节点都是相同的.每个存储库都是独立且完整的,可以推送和/或拉取任何其他存储库的更改.首先,您可以克隆现有存储库(使自己的副本可以使用),然后开始进行更改.一旦你第一次提交,你实际上有一个分支.幸运的是,通常很容易在完成后合并您的更改.
但通常情况下,您有一个位于中央服务器上的存储库,这使人们更容易上手,并跟踪最新更改的位置.
如何在没有服务器的情况下设置工作的drectory?
您的存储库必须从源树开始.所以总有一个第一个存储库,带有最初的一系列签到.假设您想要在Murky上工作.您将克隆存储库,该存储库为您提供了自己的完整存储库,包含所有历史记录和签入.您进行了一些更改(从而创建了一个分支),当您完成后,您可以将更改推回到合并的位置.两个系统都充当对等体,它们在彼此之间推送和拉动变更集.
Mercurial和Git都将存储库保存在一个隐藏的子目录中,因此一个目录树包含您的工作副本(可以是您喜欢的任何状态)和repo本身.
企业如何保留回购的安全备份副本?
如上所述,您只需拥有一个指定的主存储库,其中包含所有最新的合并更改,并将其备份为其他任何内容.您甚至可以拥有多个备份存储库,或者在物理上独立的盒子上具有自动克隆.在某些方面,备份更容易.
我假设必须有一个中央回购......但那么它究竟是如何"分配"的呢?我一直认为服务器 - 客户端(SVN)与对等(GIT)的区别,但我不相信这是正确的,除非像GIT这样的工具依赖于洪流式技术吗?
它不是在不同客户端具有不同部分的意义上分布的,例如对等文件共享.这与集中模型形成鲜明对比.
所有DVCS存储库都是一等公民.它成为如何安排它们的社会或管理问题,而不是技术问题.
回复:'洪流式技术' - 你混淆了两个问题,一个是网络拓扑(点对点与服务器/客户端),另一个是服务器权限.这是可以理解的,因为术语几乎相同.但是,对网络连接模型提出任何要求的分布式源代码控制一无所知 - 如果您愿意,可以通过电子邮件分发变更集.分布式版本控制的重要一点是每个人基本上都运行自己的服务器并合并来自其他服务器的更改.当然,您需要能够从某个地方获取初始克隆,以及您如何知道"某处"的位置超出了系统本身的范围.没有"跟踪器"程序或任何东西 - 通常有人在某个地方有一个公共存储库,地址是在网站上发布的.但是一旦你克隆了它,你的副本就是一个完整的副本,能够成为别人克隆的基础.
这里有一个重要的区别:是否有技术中央服务器,或者按照惯例存在.
从技术上讲,git存储库中的所有克隆都是等效的.所有这些都允许更改,签到,分支,相互合并.没有任何单一的存储库以某种方式比其他存储库更"真实".
根据社会惯例,大多数使用git的项目都有一个中央存储库,它被认为是权威的存储库,代表了项目的官方状态.
将其与更传统的VCS(例如SVN)进行比较:这里的中央存储库在技术上与每个开发人员可能具有的本地结账非常不同.本地签出只能执行与中央存储库相关的VCS操作.没有中央存储库,开发人员无法提交.
使用分布式版本控制,您可以将整个历史记录(整个存储库)的完整副本作为本地(签出)副本的一部分嵌入.
在此外,大多数项目都会有一些中央存储库,将还具有所有内容的副本.这意味着在某些时候您需要将更改从本地存储库推送到中央存储库.但这也意味着您可以在本地工作,只需按下您想要推送的更改,而您只需在准备就绪时推送它们.
例如,看看Linux内核:很多人会从某处查看"克隆"内核树.它可能是Linus的树,或者它可能是在kernel.org或互联网上漂浮的其他树之一.但是Linus的树既存在于kernel.org上,也存在于Linus的计算机上(也可能是其他任何已经从那里撤出的计算机).
Joel的最新博客文章描述了DVCS的优势(以及与Subversion等系统的主要区别):
当您管理更改而不是管理版本时,合并更有效,因此,您可以在组织目标需要的任何时候进行分支,因为合并后将是一件小事.
所以你把一个树的副本放在某个中央服务器的某个地方,其他人可以从那里取出(或者在你的私人服务器上,这样你就有了备份),当你想要它时,你会把一些东西推到那里.然后,如果有人想要副本,他们可以从那里克隆.