任何使用更改集而不是版本的非分布式版本控制?

时间:2010-07-12 14:57:51

标签: git version-control

我已经通过版本控制工作了。我开始用sccs,信不信由你。使用RCS。搬到了CVS。被迫使用Visual SourceSafe,并讨厌它。对Subversion非常满意。

我一直在寻找新的分布式VCS - Git,Hg等。它们看起来很复杂。我怀疑他们是否提供了足够的优势而不是SVN,以便让整个团队转移到其中一个队伍所需的时间。

但我在想。从我读过的内容来看,与SVN相比,Git有两个真正的变化。首先,分布式存储库。其次,通过变更集管理合并,而不是版本。

我认为我不是唯一一个第一个优势毫无意义的人。对于我们的业务,我们需要一个存储库。 SVN这样做,Git可以做到这一点。 Git可以管理分布式存储库,尽可能多地为其他存储库带来好处,但我们根本不会受益。

但是,通过变更集来管理合并会使我们受益。我们正在管理多个项目,包括多个分支,一些子项目由多个父项目共享。使用SVN管理需要在这些分支上进行的更改比使用CVS要容易得多,但它绝不是无痛苦的。 Git的变更设置方法看起来像是一个真正的好处。

我想知道Git增加的复杂性有多少是由于使用多个存储库,以及使用变更集有多少固有的?使用更改集但未提供多个存储库的VCS是否比Git更简单?

是否有任何VCS可以使用比Git更易于使用的变更集?

4 个答案:

答案 0 :(得分:1)

我会说git的学习曲线,对于任何类型的使用都是值得的。

我不完全确定你在“变更集”方面所描述的内容,但是darcs谈论的是“补丁集”方面可能类似的东西。它也是一个DVCS,但却与众不同。虽然我偶尔被迫使用它,但我并不真正理解darc和git。这可能就是你要找的东西。

我认为有意避免DVCS是一个错误。您仍然可以完全使用一个中央存储库。分布式部件非常适合在与互联网断开连接时工作,同时也非常可靠。您不依赖于服务器。因为我没有与服务器绑在一起,所以当我在火车上工作6小时后,我完成了很多工作。如果发生服务器问题,每个签出副本的人都有整个副本,您不会丢失任何内容。

答案 1 :(得分:1)

我不确定“更改集”或“版本”是什么意思。在我看来,它实际上完全相反。 git存储数据的方式是存储每个文件的完整内容。另一方面,SVN只存储新版本的差异。

分布式存储库功能是一个极度低估的功能。在我切换到git之前,我也没有看到潜力。但是拥有本地提交和本地分支机构是一个杀手锏。

SVN有外部处理子存储库。在git中,这称为子模块(它有点不同)。这不应该是一个决定因素,因为SVN和git都支持它。当然,除非你不喜欢git是怎么做的。

我建议您观看这个名为getting git的演讲,它将解释git是如何工作的。特别是“VCS分类标准”幻灯片很好地解释了不同VCS之间的根本区别。

答案 2 :(得分:1)

Subversion确实有变更集的概念,您可以指定变更集with the -c option。您可以合并单个更改集或一系列更改集。在幕后,这实际上是Subversion如何在/ db / revs /(至少基于文件的存储)中存储每个提交。

与Subversion相比,我认为Git的优势在于,当将多个changsets从分支A合并到分支B时,分支B保留每个单独的变更集,而在Subversion中,它作为一个变更集被挤压在一起并且“看起来”像所有更改都由提交合并的用户完成。虽然您可以将历史记录追溯到旧分支以查看Subversion中的每个变更集,但这并不方便。

Git还有一些强大的命令来查看分支之间变更集的差异。 Subversion 1.5中引入的合并跟踪尝试做这样的事情,但是IMHO过于复杂而且不直观。

答案 3 :(得分:0)

阅读此博客文章,了解为什么git可能比您的公司环境好得多(完全披露:我写了帖子):

Git advantages in corporate environment

但是,如果您坚持使用集中模式,Bazaar可以以集中模式运行。在阅读了博客文章之后,你会希望看到为什么集中模式存在缺点。