我看到很多网站都提到了git,github,svn,subversion等,但我从来都不知道所有这些都是什么。我也听过很多像'svn repo','commit'和'push'这样的术语 - 我试过谷歌搜索,但似乎我对这个主题知之甚少,我甚至不知道从哪里开始。< / p>
有人能给我初步推动,所以我可以继续自己研究吗? 这些事情到底是什么?
谢谢!
伙计们:非常感谢你们所有长期而且包罗万象的解释。我希望我可以选择不止一个答案,但不幸的是,SO不允许这样做(他们应该有第1,第2和第3位投票功能或其他东西)。非常感谢你们!
答案 0 :(得分:23)
版本控制(a.k.a。版本控制)。
考虑以下问题。您正在与其他人一起开展项目,并且您正在共享文件。你们都需要工作,比如“WhateverController.java”。这是一个巨大的文件,你们都需要编辑它。
处理这个问题最原始的方法是不要同时编辑文件,但是你们两个都必须在同一页面上。当你有一个团队时,特别是如果团队有几十个或几百个或几千个成员(典型的开源项目),那就完全不可能了。
这个问题的一个古老的,原始的“解决方案”是有一个结账/签到机制。当你需要编辑文件时,你“检查出来”,文件被锁定,所以没有其他人可以编辑它,直到你通过“检入”解锁它。这是通过适当的软件完成的,例如微软令人叹为观止的愚蠢的废话SourceSafe。但是当人们忘记“检查文件”时,没有其他人可以在使用时编辑该文件。然后有人去度假或出于其他原因离开项目,结果是无休止的混乱,混乱和通常相当多的丢失代码。这增加了巨大的管理工作。
然后是CVS,随后是Subversion,作者称之为“CVS做得对”,因此CVS和Subversion基本上是相同的想法。有了这些,没有实际的退房。您只需编辑所需的文件并将其签入。请注意,实际文件存储在中央服务器上,每个用户也在自己的工作站上运行该软件。服务器上的此位置称为存储库。
现在,如果两个人在CVS / Subversion中处理同一个文件会发生什么?它们被合并,通常使用GNU diff和patch。 'diff'是一个实用程序,可以提取两个文件之间的差异。 'patch'使用这样的'diff'文件修补其他文件。
因此,如果你正在一个函数中使用WhateverController.java,并且我正在使用不同的函数处理同一个文件,那么当你完成了你的东西时,你只需要检查它,然后进行更改应用于服务器上的文件。同时,我的本地副本不知道您的更改,因此您的更改根本不会影响我的代码。当我完成更改后,我也会检查文件。但现在我们有这种看似复杂的情况。
让我们调用原始的WhateverController.java,文件A. 您编辑该文件,结果是文件B. 我在不同的位置编辑同一文件,没有您的更改,此文件是文件C.
现在我们似乎有问题了。文件B和C的更改都是对文件A的更改。因此,在像SourceSafe或Dreamweaver这样可笑的向后垃圾通常会最终覆盖文件B的更改(因为它首先被检查)。
CVS / Subversion,可能是Git(我几乎一无所知)创建补丁而不是仅仅覆盖文件。
产生文件A和C之间的差异并成为补丁X.产生A和B之间的差异并成为补丁Y.
然后补丁X和Y都应用于文件A,因此最终结果是文件A +对我们各自工作站上的B和C所做的更改。
通常这种方式完美无瑕。有时我们可能在相同的代码中处理相同的函数,在这种情况下,CVS / Subversion将通知程序员一个问题,并在文件本身中呈现问题。这些问题通常很容易解决,至少我从未解决过这些问题。 Visual Studio,Project Builder(Mac OS X)等图形工具通常会向您显示文件和冲突,因此您可以选择要保留哪些行以及要丢弃哪些行...然后您还可以编辑如果要手动合并冲突,请手动创建文件。
因此,从本质上讲,源代码控制是解决多个人处理相同文件的问题。基本上就是这样。
我希望这可以解释。
编辑:像Subversion和Git这样可靠的源控制系统还有很多其他好处。如果出现问题,您可以返回其他版本,这样您就不必手动备份所有内容。事实上,至少对Subversion来说,如果我搞砸了一些东西或者想看看旧版本的代码,我可以这样做而不会干扰别人的工作。答案 1 :(得分:9)
GIT,Subversion等都是关于版本控制的。如果您将这些技术用于项目,则所有源文件都存储在所谓的存储库(也称为“repo”)中 - 除了不需要版本控制的文件(大文件,用户特定文件......)
版本控制的一些优点是:
希望解释你提到的条款。我认为开始使用版本控制的一个良好开端是Subversion,如果可能的话使用TortoiseSVN for Windows。甚至有一本免费的书 - Version Control with Subversion。
答案 2 :(得分:8)
它们都是源代码控制的不同版本:
答案 3 :(得分:7)
答案 4 :(得分:4)
Git和Subversion(也称为svn)是源代码控制或版本控制或修订控制系统。它们可以帮助您管理源代码并跟踪系统管理的每个文件的更改历史记录。维基百科文章metismo链接可能会有所帮助。
github是一个托管和管理git存储库的服务。它基本上将存储库放在网上,以便多人与存储库进行交互。
commit命令通常将一组更改存储到源控件存储库中。这将在存储库中创建一个新版本。
push命令仅适用于分布式版本控制系统,如git或mercurial(也称为hg)。 Push允许将更改从一个存储库移动到另一个存储库。分布式版本控制系统的概念是每个用户都有自己的存储库。当用户完成更改时,用户会将其推送到其他存储库(可能是中央项目存储库,或者作为另一个用户存储库的补丁)。
这些系统的重点是
答案 5 :(得分:2)
源代码库。
基本上是一种在团队之间共享代码的方法,能够看到谁在什么时间“提交”(添加)了什么代码,以及谁在什么时候改变了什么等等。
答案 6 :(得分:2)
查看(免费,在线)subversion book的第一章。它描述了什么版本控制系统(例如颠覆)。