所有不同类型的版本控制之间有什么区别?
至少有10个人在SO上被告知,版本控制是一件好事,即使只是我,我现在也有一个后续问题。
所有不同类型的版本控制之间有何区别?是否有任何人都知道的关于版本控制的指南非常简单易懂?
解决方案
回答
版本控制对于开发至关重要,即使我们自己工作也是如此,因为它可以保护我们免受自己的伤害。如果我们犯了一个错误,那么回滚到我们知道可以工作的代码的先前版本很简单。这也使我们有更多的时间去探索和试验代码,因为我们不必担心自己的操作是否可逆。版本控制系统(VCS)有两个主要分支,即集中式和分布式。
集中式VCS是基于使用中央服务器的,其中每个人都"签出"项目,对其进行处理,然后将其更改"提交"给服务器,以供其他人使用。主要的集中式VCS是CVS和SVN。两者都受到了严厉批评,因为"合并""分支机构"给他们带来极大的痛苦。 [TODO:撰写关于什么是分支以及为何难以使用CVS和SVN进行合并的说明]
分布式VCS使每个人都有自己的服务器,我们可以在其中"拉"出其他人的更改并将"推"到服务器上。最常见的分布式VCS是Git和Mercurial。 [TODO:在分布式VCS上写更多内容]
如果我们正在从事一个项目,我强烈建议我们使用分布式VCS。我推荐Git,因为它运行速度非常快,但因使用起来过于困难而受到批评。如果我们不介意使用商业产品,BitKeeper应该很容易使用。
回答
我将从以下内容开始:
- 可视化的版本控制指南
- 维基百科
然后,一旦我们阅读了它,请下载并安装SVN,TortoiseSVN并浏览本书的前几章,并开始使用。
回答
Eric Sink很好地概述了源代码管理。关于SO还有一些现有的问题。
回答
我们似乎处在版本控制的黄金时代,有很多选择,所有选择都有其优缺点。
这是我最常使用的工具:
- svn-当前最受欢迎的开源软件?
- git-自从Linus切换到它以来非常热
- 善变-我认识的一些聪明人会发誓
- cvs-每个人都从
- perforce-恕我直言,最好的功能,但它不是开源的。不过,两用户许可证是免费的。
- visual sourcesafe-在Microsoft世界中我并不多,所以除了人们喜欢Microsoft的所有内容时,我都不喜欢这个。
- SCCS-为了历史的利益,我们提到了这一点,其中有许多曾曾祖父
- rcs-以及以上许多的祖父
我的建议:git,svn或者perforce都是最安全的,因为很多人都使用它们,它们是跨平台的,具有良好的GUI,我们可以购买有关它们的书籍,等等。
不要考虑cvs,sccs,rcs,它们是古董。
令人高兴的是,由于项目将相对较小,因此,一旦我们有更多经验并决定要与其他系统一起使用,便可以将代码移至新系统。
回答
如果我们在Windows环境中独自工作,则SourceGear Vault的单用户许可证是免费的。
回答
另一个问题的答案也适用于此,最重要的是
Jon Works said: The most important thing about version control is: JUST START USING IT
他的回答更加详细,我不想被指责为抱怨主义,所以请看一看。
回答
对于刚开始使用版本控制的所有人:
请不要因为炒作而使用git(或者hg或者bzr)
使用git(或者hg或者bzr),因为与SVN相比,它们是管理源代码的更好工具。
我在工作中使用了SVN几年了,六个月前切换到git。如果不先学习SVN,则在使用DVCS时会完全迷失方向。
对于刚开始使用版本控制的用户:
- 首先下载SVN
- 了解为什么需要版本控制
- 了解如何提交,签出,分支
- 了解为什么在SVN中进行合并如此痛苦
然后切换到DVCS并学习:
- 如何克隆/分支/提交
- 合并分支很容易(让分支疯狂!)
- 重写提交历史记录并使分支与主行保持最新状态是多么容易(git rebase -i,)
- 如何发布更改,以便其他人可以受益
tldr;人群:
从SVN开始,学习基础知识,然后毕业于DVCS。
回答
我们使用并喜欢Mercurial。它遵循分布式模型,消除了必须"签到"工作的某些感觉。 Mozilla已迁移到Mercurial,这是一个很好的信号,它不会很快消失。我认为一个缺点是没有一个很好的GUI。但是,如果我们对命令行感到满意,那么它将非常方便。
商业文件
非官方手册
回答
简单的答案是,我们喜欢"撤消"按钮吗?答案当然是肯定的,因为我们人类一直都在犯错误。
作为程序员,在通常情况下,可能需要花费几个小时的测试,代码更改,覆盖,删除,文件移动和重命名,然后才能确定出尝试解决问题的方法是完全错误的,并且代码比我们开始时更容易出错。
因此,"源代码管理"是一个巨大的"撤消"按钮,用于将代码恢复为草绿色且食物丰富的早期时间。不仅如此,由于源代码管理的工作原理,我们仍然可以保留已损坏代码的副本,以防万一我们想再次引用该代码几周,并从中汲取一些好主意。
我个人(尽管可能被称为过大杀伤力)使用Source Gear Fortress的免费单用户许可版本(这是他们的具有错误跟踪功能的Vault源代码控制产品)。我发现UI确实非常易于使用,它支持checkout> edit> checkin模型和edit> merge> commit模型。但是,设置起来可能有些棘手,需要我们运行ISS和SQL Server的本地副本。我们可能想尝试一个较小的程序,如此处其他答案推荐的程序。看看我们喜欢什么以及负担得起的东西。
回答
马克说:
git - very hot since Linus switched to it
我只想指出,Linus并没有改用它,而是由Linus编写的。
回答
无论使用哪种类型,都只需开始使用源代码管理。使用什么都没有关系;重要的是使用它
回答
像其他所有人一样,SC确实取决于需求,预算,环境等。
从根本上讲,源代码控制旨在提供所有代码的中央存储库,并跟踪谁在什么时候对其进行了处理。应该有完整的历史记录,并且我们可以获得的产品具有完整的变更日志,审核,访问控制以及不间断的...
当我们开始考虑将SC整合到环境中的方式时(无论是个人代码和文档还是大型公司),那里的每个产品都可以开始发光(可以这么说)。当人们使用它们时,他们发现该工具有局限性,因此人们会编写新的局限性。 SVN诞生于创建者在CVS中看到的局限性。 Linus想要Linux内核更好的东西,所以现在有了git。
我会说开始使用一种(像SVN这样非常流行并且非常易于使用的东西),然后看看它会如何发展。随着时间的推移,我们可能会发现我们需要某些其他功能,或者需要与其他系统进行交互,因此我们可能需要SourceSafe或者其他工具。
源代码管理始终很重要,尽管我们可以手动对PSD文件或者其他版本进行重新编号,但是我们会忘记一次或者两次运行该批处理脚本,或者可能忘记了哪个编号随着变化。这就是大多数SC工具都可以提供帮助的地方(只要我们签入/签出)。
回答
另请参阅以下SO问题:
- GIT和CVS之间的区别