📜  集中式与分布式版本控制:我们应该选择哪一个?

📅  最后修改于: 2021-09-12 11:01:08             🧑  作者: Mango

当涉及到与多个开发人员在单个项目上合作并与他们协作时,我们中的许多人都知道版本控制。毫无疑问,版本控制使开发人员的工作更加轻松快捷。在大多数组织中,开发人员使用集中式版本控制系统 (CVCS),如 Subversion(SVN) 或并发版本系统 (CVS) 或分布式版本控制系统 (DVCS),如 Git(用 C 编写)、Mercurial(用Python编写)或集市(用Python编写)。
现在进入正题,哪一个是最好的,或者我们需要选择哪一个?我们将比较每个人的工作流程、学习曲线、安全性、受欢迎程度和其他方面。
首先,我们需要打破大多数初学者对 DVCS 的误解,即“代码中没有中心版本或没有 master 分支” 。事实并非如此,在 DVCS 中,代码中还有一个主分支或中央版本,但它的工作方式与集中式源代码控制不同。

集中式与分布式版本控制

让我们来看看这两种版本控制系统的概述。

集中版本控制系统

在集中式源代码控制中,有一个服务器和一个客户端。服务器是包含所有代码版本的主存储库。要处理任何项目,首先用户或客户端需要从主存储库或服务器获取代码。因此客户端与服务器通信并将所有代码或当前版本的代码从服务器拉到他们的本地机器上。换句话说,我们可以说,您需要从主存储库进行更新,然后才能在系统中获得代码的本地副本。因此,一旦您获得最新版本的代码,您就可以开始对代码进行自己的更改,之后,您只需将这些更改直接提交到主存储库中即可。提交更改仅意味着将您自己的代码合并到主存储库或从源代码制作新版本。所以一切都集中在这个模型中。
将只有一个存储库,它将包含代码的所有历史记录或版本以及代码的不同分支。因此,集中源代码控制中涉及的基本工作流程是从中央存储库中获取最新版本的代码,该代码还将包含其他人的代码,在代码中进行您自己的更改,然后将这些更改提交或合并到中央存储库中。

分布式版本控制系统

在分布式版本控制中,大多数机制或模型与集中式应用相同。您在这里会发现的唯一主要区别是,这里不是一个单一的存储库即服务器,而是每个开发人员或客户都有自己的服务器,他们将拥有代码及其所有分支的整个历史或版本的副本在他们的本地服务器或机器上。基本上,每个客户端或用户都可以在本地和断开连接的情况下工作,这比集中式源代码控制更方便,这就是它被称为分布式的原因。
您不需要依赖中央服务器,您可以将整个历史记录或代码副本克隆到您的硬盘驱动器。因此,当您开始处理一个项目时,您可以从自己硬盘驱动器中的主存储库中克隆代码,然后从自己的存储库中获取代码以进行更改,在进行更改后,您将更改提交到本地存储库并在此时,您的本地存储库将具有“更改集”,但它仍然与主存储库断开连接(主存储库将具有来自每个开发人员存储库的不同“更改集”),因此要与其进行通信,您可以向主存储库发出请求主存储库并将您的本地存储库代码推送到主存储库。从存储库获取新更改称为“拉取”,合并本地存储库“更改集”称为“推送”。
它不遵循在进行更改后直接将代码通信或合并到主存储库的方式。首先,您在自己的服务器或存储库中提交所有更改,然后“更改集”将合并到主存储库。

下图可以更好地理解这两者之间的区别:

CVCS-vs-DVCS

优缺点的基本区别

  • 集中式版本控制比分布式更容易学习。如果您是初学者,则必须记住 DVCS 中所有操作的所有命令,并且最初使用 DVCS 可能会令人困惑。 CVCS 易于学习和设置。
  • DVCS 最大的优势在于它允许您离线工作并提供灵活性。您在自己的硬盘中拥有代码的完整历史记录,因此您将在自己的服务器或不需要互联网连接的自己的存储库中进行所有更改,但这不是在 CVCS 的情况下。
  • DVCS 比 CVCS 更快,因为您不需要为每个命令都与远程服务器通信。您可以在本地完成所有工作,这使您的工作速度比 CVCS 更快。
  • 在 DVCS 中在分支上工作很容易。每个开发人员都拥有 DVCS 中代码的完整历史记录,因此开发人员可以在将所有“更改集”合并到远程服务器之前共享他们的更改。在 CVCS 中,在分支上工作既困难又耗时,因为它需要直接与服务器通信。
  • 如果项目历史悠久或项目包含大型二进制文件,在这种情况下,在 DVCS 中下载整个项目可能比平时花费更多的时间和空间,而在 CVCS 中,您只需要获得几行代码,因为您不需要将整个历史或完整项目保存在您自己的服务器中,因此不需要额外的空间。
  • 如果主服务器在 DVCS 中出现故障或崩溃,您仍然可以从本地存储库或已保存完整代码修订版的服务器中获取代码的备份或整个历史记录。这不是 CVCS 的情况,只有一个具有完整代码历史记录的远程服务器。
  • 在 DVCS 中与其他开发人员代码的合并冲突较少。因为每个开发人员都在处理自己的一段代码。与 DVCS 相比,CVCS 中的合并冲突更多。
  • 在 DVCS 中,有时开发人员会利用代码的完整历史,他们可能会孤立地工作太长时间,这不是一件好事。这不是 CVCS 的情况。

结论:让我们看看 DVCS 和 CVCS 在全球的普及情况。

图片来源:谷歌趋势

从Google Trends和以上几点来看,DVCS明显比CVCS有更多的优势,也更受欢迎,但是如果要说选择版本控制的话,也要看哪个更方便大家学习了初学者。您可以选择其中任何一个,但是一旦您按照使用其命令的流程进行操作,DVCS 就会提供更多好处。