我从未参加过一个团队的专业项目,因为我还在上高中.因此,我从来没有接触到这整个"版本控制"和"源代码控制"的事情.它们是一样的吗?管理代码的程序究竟如何管理代码?我听说你必须检查代码(复制现有的代码?)并将其合并(如果有人更改了你没有改变的代码并且你改变了其他东西并将其合并,会发生什么?当然,他的代码是不会被您的旧版本所取代.)最后,这类软件最好/最简单的例子是什么?
我听说你必须检查代码(复制现有的代码?)并将其合并(如果有人更改了你没有改变的代码并且你改变了其他东西并将其合并,会发生什么?当然,他的代码是没有被旧版本取代.)
这正是版本控制的原因.如果它只是盲目地覆盖了人们的代码,它真的不是一个非常有用的工具,不是吗?;)
源代码控制工具维护一个存储库,其中包含代码库的整个历史记录.每个更改都以增量形式签入,只保存已更改的内容.这意味着如果你和我都签出版本A,然后我编辑文件B,你编辑文件C,我们都签到,源控制软件将比较差异和没有冲突的地方(如本例所示) ),只应用两个更改,如果发生冲突(如果我们都更改了相同的代码行),它会拒绝尝试的签入并告诉您文件的哪两个版本有相互冲突的更改,并要求您手动合并它们.(通常它也能够突出显示更改,以便您可以直观地看到每个版本中已更改的内容).所以它永远不会覆盖变化.
它将为您做的其他任务是:
标记特定版本或里程碑,以便您以后可以轻松找到它们(这是我们最终修复烦人的bug#2524的版本,这是beta 1,依此类推
将存储库分成两部分,允许更改可能会"不同步"临时,甚至永远保留单独的产品(想想PHP同时维护他们的PHP4分支,同时也在使用PHP5.在某些时候,他们简单地分支他们的代码库,所以他们开始时完全相同,他们现在可以在不影响另一个的情 当然,它也可以尝试将这些分支合并在一起(您可以为产品中的每个主要功能创建一个分支,因此可以隔离开发它们,而不会受到其余代码发生的逐渐变化的影响,然后当功能完成时,将其分支合并回主存储库)
源控制工具有两种基本类型,即集中控制工具和分布式控制工具.分布式是一件大事虽然集中在我们身上几十年了.简而言之,集中式版本控制只是意味着有一个主存储库服务器,其中存储了所有分支和每个分支的更改历史记录.此服务器负责合并签入和所有这些.因此,每当开发人员检查代码或将其提交到存储库时,这就是他同步的服务器.分布式的只是放弃了这个"主服务器"的方面.相反,每次检查代码时,都会在您自己的计算机上本地创建一个新的存储库,在您检查代码的路径上.然后,您可以处理此本地存储库,它执行所有相同的操作,跟踪更改历史记录,合并更改等等,一旦准备好,您就可以将存储库合并到任何其他存储库中.通常,你' ll可能想把它合并到某种"主"回购中,所有代码都粘在一起,但你也可以把它合并到你的代码开发者的本地回购中,如果他需要你一直在做的那个功能,但它不是但足够稳定进入主要回购.因此,它为您提供了更大的灵活性,并允许您维护本地工作的更改历史记录,而不会破坏主存储库中的构建(在集中式设置中,如果您检入无法编译的内容会发生什么?整个团队都被搞砸了,直到它被修好了.如果你 尚未足够稳定进入主回购.因此,它为您提供了更大的灵活性,并允许您维护本地工作的更改历史记录,而不会破坏主存储库中的构建(在集中式设置中,如果您检入无法编译的内容会发生什么?整个团队都被搞砸了,直到它被修好了.如果你 尚未足够稳定进入主回购.因此,它为您提供了更大的灵活性,并允许您维护本地工作的更改历史记录,而不会破坏主存储库中的构建(在集中式设置中,如果您检入无法编译的内容会发生什么?整个团队都被搞砸了,直到它被修好了.如果你不要检查它,你失去了版本控制的好处,如果你发现你一直在引入新的bug,你将无法恢复到以前的版本)
最后,这类软件最好/最简单的例子是什么?
嗯,最流行的很容易SVN,这是一个老式的集中式系统,但是设置imo有点痛苦.需要服务器上的特殊软件.我个人非常喜欢分发的Bazaar,服务器存储库只需要FTP访问,服务器上没有别的东西.
Eric Sink编写了一个很好的Source Control HOWTO.
免责声明:Eric Sink是SourceGear的负责人,负责开发和销售多种与源代码控制相关的工具(包括SourceGear Vault).但是,Source Control HOWTO是一个非常中立,平衡的写法.
版本控制系统不仅适用于大型团队!从事爱好项目的个人开发人员可以通过版本化代码获得很多好处.
大多数版本控制系统都以存储库的概念为中心,存储库由系统管理,从不直接触及.如果要编辑文件,请从存储库中复制文件,进行更改,然后将其发回.版本控制系统识别新版本和旧版本之间的差异,然后将新版本存储在存储库中.但是,如果你搞砸了,旧的版本,一直回到开头,总是可以检索.
大多数版本控制系统足够智能,可以在同一文件中合并来自多个开发人员的更改,只要更改不会影响文件的同一部分.但是,合并冲突可能会发生并导致头痛.
首先,我建议你像Subversion一样安装一些简单而免费的东西,并阅读他们非常详细的书籍,其中包含各种功能的示例和解释,其中大多数功能在其他版本控制系统中相当.
所有版本控制系统基本相同.没有比其他版本更难使用... svn commit somefile
就像git commit somefile
它们一样困难.它们的工作方式有点不同.
我开始使用git的唯一原因是因为github.之前我使用SVN而不是darcs(它有一个非常好的命令行界面)的唯一原因是因为我发现了一个好的,免费的SVN服务器.
目前我会推荐git.不是因为它更好,或者因为其他一些VCS更糟糕,而是因为有很多非常好的指南,以及很多非常好的项目使用/基于它.
您可能会发现一些有用的资源:
GitHub - 说服我开始使用git的原因.它有一个非常活跃的社区,非常有用(例如,当您创建一个新的存储库时,它会为您提供将代码推送到它的命令).他们也有很好的指导部分.
关于使用GitHub的免费截屏视频 - 解释了许多网站功能以及大多数有用的基础知识
Gitorious - 另一个优秀的git托管站点,用于开源项目(该站点本身也是开源的).我不会像GitHub那样好用,但这是一个非常好的选择.
repo.or.cz - 第一个git托管网站.与GitHub/Gitorious相比,它看起来相当古老,但它可以工作,还有主机
PeepCode的Git剧集 - 9美元,但被认为非常高.几乎涵盖了你需要知道的一切.
GitCasts - 一系列精彩的截屏视频.从第一个开始("设置,初始化和克隆"),它应该涵盖大多数有用的东西.
GitMagic - 非常有用,特别是对于稍高级的东西(它已经回答了很多我的"我如何..."的问题,比如如何创建一个空分支).综合指南(从基本内容到git的内部)
适合初学者的Git:权威的实用指南 - 关于stackoverflow的问题 - 还不完全全面,但它已经到了那里..
总而言之,你所选择的版本控制系统无关紧要,真的......
我发现darcs非常容易使用(它都是CLI,并且了解如何darcs get
在存储库之间移动"补丁"."GettingStarted"darcs.net wiki页面是我开始所需的全部内容.我遇到的唯一问题是我无法找不到darcs项目的主机......
SVN易于使用,但它的集中式架构并不适合我使用它的方式,而且分支(在git中很简单)之类的东西很难.几乎每个动作都需要与中央服务器通信,我不想运行本地SVN服务器.它也基本上不能在笔记本电脑上脱机工作.
我开始学习SVN,主要得益于"Subversion截屏视频".然后,当我发现github时,我曾经git svn
将我的主要SVN存储库导入到git中
简而言之:为某些版本控制系统找一个好的教程或指南,并版本化所有随机项目和片段.在您意外地进行一些愚蠢的更改并保存/关闭脚本或意外删除某些内容之前,这似乎有点无意义.我几乎使用VCS作为"超级撤消"(并且用于计算机之间的代码同步)