跟踪SVN与Git的变化

时间:2018-11-26 10:21:29

标签: git svn version-control cvs dvcs

在Lynda.com上观看有关分布式版本控制系统与集中式版本控制系统的教程时,我遇到了一些文字,使我感到困惑,因为Git与集中式版本控制系统的跟踪方式不同。我一直以为提到的VCS会跟踪更改,并且在提交时将这些更改的快照保存到用于从版本到版本的存储库中。但是出于某种原因,以下文本声称Git无法以这种方式工作。

任何人都可以尝试为我解释和澄清吗?

  

在Git中,更改存储为更改集或补丁,我们专注于跟踪更改,而不是文档的版本。现在,这是一个微妙的差异,您可能会认为,CVS和SVN也会跟踪变化,而事实并非如此。他们跟踪从每个不同文件的版本到版本或目录的不同状态所需的更改。 Git不能以这种方式工作,Git确实将这些变更集封装为离散单元,从而专注于这些变更集,然后可以在存储库之间交换这些变更集。我们不是要及时更新某些东西的最新版本,而是要问的是,是否应用了变更集?

2 个答案:

答案 0 :(得分:2)

本教程完全错误:

  1. Git 存储更改集。 Git根据请求动态地计算变更集。 (Git确实在打包文件内部进行了增量压缩,但是与通过散列ID故意公开的Git的对象存储模型相比,打包文件被很好地隐藏了。)
  2. 在讨论分布式还是集中式时,这不是有用的区别。 (另请参见kan's answer。)

在我自己的书中,我要说的是分布式还是集中式:

  

这两种系统之间的主要区别在于,集中式VCS具有指定的主存储库。母版可能有多个副本,甚至有某种同步协议(例如,ClearCase MultiSite)的多个母版,但只有一个母版。他们的设计假设这艘单人船,因此可以依靠它。

     

对于分布式VCS,没有指定的主存储库。用户通常具有每个存储库的完整私有副本。这些私有副本之间的通信至少在原则上是对等操作:两个存储库都不是更精通的,而且冲突-爱丽丝和鲍勃都对同一文件的相同区域进行了更改的情况-可以做到发生并且需要某种解决方法。

     

始终可以集中使用分布式VCS:您只需将一个特定的存储库指定为主版本,并协调对它的更新。但是,集中式系统通常提供诸如锁定源文件或目录,限制访问(对于特定文件,目录和/或分支的读取和/或写入)等功能。对于典型的DVCS,提供这些功能会更加困难(尽管在技术上并非没有可能),而Git和Mercurial根本不会提供这些功能,至少没有附加功能。使用提供锁定的CVCS,用户可以锁定文件(通常只有一个特定的版本ID),以防止其他用户进行相冲突的更改。从概念上讲,这比较容易,但是当然可以禁止并行工作。

答案 1 :(得分:1)

在CVCS中,更改是围绕单个中央存储库同步的。因此,提交更改的用户将在该存储库中为其他用户创建一个版本。

在DVCS中,每个用户都有自己的存储库独立副本,所有更改集(或提交)最初都在此处。使用fetch / push命令在其他用户存储库之间同步更改是一个单独的过程。