architecture - 分布式修订控制系统的分散行为如何工作?

标签 architecture dvcs

我想知道去中心化的 DVCS 是如何工作的?如果没有中央服务器,开发人员机器如何知道存储库并将其与其他开发人员机器的存储库同步。以及如何合并更改?因为在我看来缺少中央服务器,系统可能会导致每个存储库都有不同的修订号。以及如何处理冲突解决方案?

最佳答案

我偏爱 Git,但我相信该理论适用于大多数其他系统...

去中心化 VCS 旨在通过在每次提交中保留指向先前提交的指针来处理分支和合并作为其 DNA 的一部分,因此任何更改都可以追溯到共同的祖先。

修订“数字”本身不用于指代提交。显然,如果是这样的话,会有不止一个序列……在 Git 的情况下,唯一标识任何提交的指针“键”是 SHA1 哈希。唯一使整个排列顺序的是引用每个提交父项的指针图。

在实践中,开发人员将他们的工作提交到他们自己的本地副本,当需要与他人共享时,他们通过三种方式进行:

  • 请其他开发人员直接从他们那里拉取更改
  • 直接推送到其他开发者的副本中
  • 将更改推送到其他人可以从中提取的中央位置

这些最终实际上是同一件事,因为它只是归结为合并差异。在第三种情况下,中心位置仅充当代理——没有它也可以实现同样的效果。

系统可以根据您的选择采用集中式或分散式。出于实际原因,大多数项目都有一定程度的集中化,但在任何时候,一个分支都可以成为新的中央存储库,或者开发人员可以选择在他们之间临时交换代码。

当提交被获取并合并到您自己的副本中时,这些提交将应用于您与上游存储库共享的任何共同祖先之上。如果存在冲突,合并过程会在发生冲突的提交步骤暂停,并要求您解决冲突,然后继续在其上应用剩余的提交。 (标准统一差异标记用于标记冲突。)

大多数合并都是自动发生的,但是当出现冲突时,解决起来通常是微不足道的。好处是您最终不会遇到跨越多个提交的冲突球:解决起来要容易得多,因为它会在历史记录的中间暂停,让您以更小的逻辑 block 来处理它。

关于architecture - 分布式修订控制系统的分散行为如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/514442/

相关文章:

c# - EF N 层架构

python - 类内的辅助函数 - 各种方法的优缺点

mercurial - TortoiseHG:无法部分提交 merge

version-control - 是否有相当于 Google 的版本控制工具 piper 的开源软件?

version-control - 在 clearcase 上使用 mercurial 时保留历史记录

c# - API 数据条件检查列表

java - Tomcat 具有同一应用程序的多个实例

database-design - 星形/雪花模式的 ORM 等价物

version-control - 是否有可以忽略大型机序列号的现代免费 D?VCS?

用于版本控制的 vim 插件