所有不同类型的版本控制之间有什么区别?

所有不同类型的版本控制之间有什么区别?

What is the difference between all the different types of version control?

至少有10个人在SO上被告知,版本控制是一件好事,即使只是我,我现在也有一个后续问题。

所有不同类型的版本控制之间有何区别?是否有任何人都知道的简单易懂的版本控制指南?


我们似乎处在版本控制的黄金时代,有很多选择,所有选择都有其优缺点。

这是我最常使用的工具:

  • svn-当前最受欢迎的开源代码?
  • git-自从Linus切换到它以来非常热
  • 善变-我认识的一些聪明人会发誓
  • cvs-每个人都从
  • perforce-恕我直言,最好的功能,但它不是开源的。不过,两个用户的许可证是免费的。
  • visual sourcesafe-我在Microsoft领域并不怎么了解,所以除了有人喜欢Microsoft的所有内容时,我对此一无所知。
  • SCCS-为了历史的利益,我们提到了这一点,其中有许多曾曾祖父
  • rcs-以及以上许多的祖父

我的建议:git,svn或perforce都是最安全的,因为很多人都使用它们,它们是跨平台的,具有良好的GUI,您可以购买有关它们的书籍,等等。

不要考虑cvs,sccs,rcs,它们是古董。

令人高兴的是,由于您的项目相对较小,因此,一旦您有更多经验并决定要与其他系统一起使用,便可以将代码移至新系统。


Eric Sink很好地概述了源代码管理。关于SO还有一些现有的问题。


对于刚开始使用版本控制的所有人:

由于炒作,请勿使用git(或hg或bzr)

使用git(或hg或bzr),因为与SVN相比,它们是管理源代码的更好工具。

我在工作中使用了SVN几年了,六个月前切换到git。如果不先学习SVN,在使用DVCS时我将完全迷失。

对于刚开始使用版本控制的用户:

  • 首先下载SVN
  • 了解为什么需要版本控制
  • 了解如何提交,签出,分支
  • 了解为什么在SVN中进行合并如此痛苦

然后切换到DVCS并学习:

  • 如何克隆/分支/提交
  • 合并分支很容易(让分支疯狂!)
  • 重写提交历史记录并使分支保持最新状态很容易
    与主线保持最新(git rebase -i,)
  • 如何发布您的更改,以便其他人可以受益

tldr;人群:

从SVN开始,学习基础知识,然后毕业于DVCS。


我将从以下内容开始:

  • 可视化的版本控制指南
  • 维基百科

然后,一旦您阅读了它,就下载并安装SVN,TortoiseSVN并浏览本书的前几章,并开始使用。


版本控制对于开发至关重要,即使您自己工作也是如此,因为它可以保护您免受自己的伤害。如果您犯了一个错误,那么回滚到您知道可以工作的代码的先前版本很简单。这也使您可以自由探索和尝试代码,因为您不必担心自己的操作是否可逆。版本控制系统(VCS)有两个主要分支,即集中式和分布式。

集中式VCS基于使用中央服务器的功能,每个人都可以在其中"签出"一个项目,对其进行处理,然后将其更改"提交"给服务器,以供其他人使用。主要的集中式VCS是CVS和SVN。两者都受到严厉批评,因为"合并""分支机构"给他们带来极大的痛苦。 [TODO:撰写关于什么是分支以及为何难以使用CVS和SVN进行合并的说明]

分布式VCS允许每个人都有自己的服务器,您可以在其中"拉"其他人的更改,然后"推"到服务器。最常见的分布式VCS是Git和Mercurial。 [TODO:在分布式VCS上写更多内容]

如果您正在从事一个项目,我强烈建议您使用分布式VCS。我建议使用Git,因为它的速度非常快,但因使用不便而受到批评。如果您不介意使用商业产品,BitKeeper应该很容易使用。


马克说:

git - very hot since Linus switched to it

我只想指出,Linus并未改用它,而是由Linus编写的。


简单的答案是,您喜欢"撤消"按钮吗?答案是肯定的,因为我们人类一直都在犯错误。

作为程序员,在通常情况下,可能需要花费几个小时的测试,代码更改,覆盖,删除,文件移动和重命名,然后才能得出尝试解决问题的方法,这完全是错误的,并且代码比我们开始时更容易出错。

因此,"源代码管理"是一个巨大的"撤消"按钮,用于将代码恢复为草绿色和食物丰富的早期时间。不仅如此,由于源代码管理的工作原理,您仍然可以保留已损坏代码的副本,以防万一您想再次引用它几周,并从中汲取一些好的想法。

我个人(虽然可能被称为过大杀伤力)使用Source Gear Fortress的免费单用户许可版本(这是他们的具有错误跟踪功能的Vault源代码控制产品)。我发现UI确实非常易于使用,它既支持checkout> edit> checkin模型,也支持edit> merge> commit模型。但是,设置起来可能会有些棘手,需要您运行ISS和SQL Server的本地副本。您可能想尝试一个较小的程序,如此处其他答案所推荐的程序。看看自己喜欢什么,买得起什么。


另一个问题的答案也适用于此,最重要的是

Jon Works said:
The most important thing about version control is:

JUST START USING IT

他的回答更加详细,我不想被指责为抱怨主义,所以请看一看。


我们使用并喜欢Mercurial。它遵循分布式模型-消除了一些必须"签到"工作的感觉。 Mozilla已迁移到Mercurial,这是一个很好的信号,它不会很快消失。我认为一个缺点是没有一个很好的GUI。但是,如果您对命令行感到满意,那么它将非常方便。

商业文件
非官方手册


如果您在Windows环境中独自工作,则SourceGear Vault的单用户许可证是免费的。


另请参阅以下SO问题:

  • GIT和CVS之间的区别


像其他所有人一样,SC确实取决于您的需求,预算,环境等。

从根本上讲,源代码控制旨在提供所有代码的中央存储库,并跟踪谁在什么时候对其进行了处理。应该有完整的历史记录,并且您可以获得的产品具有完整的变更日志,审核,访问控制等功能。

当您开始考虑将SC整合到您的环境中时(无论是您的个人代码和文档还是大型公司),那里的每个产品都开始发光(可以这么说)。当人们使用它们时,他们发现该工具有局限性,因此人们会编写新的局限性。 SVN诞生于创建者在CVS中看到的局限性。 Linus想要Linux内核更好的东西,所以现在有了git。

我会说开始使用一种(像SVN这样非常流行并且非常易于使用的东西),然后看看它会如何发展。随着时间的推移,您可能会发现您需要其他功能或需要与其他系统进行交互,因此您可能需要SourceSafe或其他工具。

源代码管理始终很重要,尽管您可以手动对PSD文件或其他版本进行重新编号,但是您会忘记一次或两次运行该批处理脚本,或者可能忘记了哪个编号随着变化。这就是大多数SC工具都可以提供帮助的地方(只要您签入/签出)。


无论使用哪种类型,都只需开始使用源代码管理。使用什么都没有关系;重要的是使用它


推荐阅读