• Version Control


    什么是VC:即版本控.

    包含:  集中式和分布式;

      1.常见的集中式:CVS(最早、开源、免费),SVN(开源、免费,目前用的最多),VSS(集成在Visual studio中)… 

       工作流程:

                我们比较熟悉的SVN是集中式的版本控制系统,回想一下在使用svn时,每次干活之前,需要  先从中央服务器(服务端)取出最新的版本,然后开始工作,干完活了,工作完后推送给中央服务器。此时的中央服务器就好比是一个图书馆,如果你要修改一本书,需要先从图书馆借出来,然后回到自己家修改,改完之后,需要在送回到图书馆。

    分布简图:

              

                特点:   

                 有一个单一的集中管理的服务器,保存所有文件的修订版本,所有代码库。

                 对网络的依赖性强,必须联网才能工作,上传速度受网络状况、带宽影响。

                 客户端记录文件内容的具体差异,每次记录有哪些文件做了更新,以及更新了哪些行的什么内容。

               缺点:  

       中央服务器的单点故障。 如果中央服务器发生宕机,所有客户端将无法提交更新、还原、对比等,也就无法协同工作。如果磁盘发生故障,信息尚无备份,还会有数据丢失的风险。

       2.常见的分布式版本控制:git(免费、开源)、 Mercurial(轻量级)  、Monotone(免费)

    工作流程:分布式版本控制系统是没有“中央服务器”,每个人的电脑上都是一个完整的版本库,工作的时候,不再需要联网。开始工作前,在客户端克隆出完整的代码仓库,然后就可以在家、在公交车等等随心所欲地修改代码并提交了,提交到本地电脑,等到有网的时候就可以一次性地将本地仓库推送到远端仓库(临时中心服务器)中,这样一来,每个人都可以独立进行改动资料,并且所有的改动都是在完整资料信息的环境下进行的。

                  分布简图:

                  

                    特点:

                          本地客户机进行操作,离线工作,快速。

                          安全性高,每个人电脑里都有完整的版本库,一个人的电脑换了复制其他人的一份就可以了。

                          原子性提交,提交不会被打断(git)。

                          工作模式非常灵活(传统的集中式工作流 + 特殊工作流 + 特殊工作流和集中式工作流的组合)。

                  缺点:  缺少权限管理、命令复杂混乱

    VC的作用:

      最基本最重要的原因当然是版本回复reversion。

      随着开发,代码不断地在演化。如果你在写代码的时候发现一秒钟前错误的删除了一行代码,你会很快的用ctrl+z来撤销修改,从而回复你错删的代码。但是如果你经过一个小时的努力,改了很多的代码文件,你发现这个修改是不可行的,需要倒退回去,你改怎么办?有人有比较好的习惯,当认为目前有里程碑意义的时候就把代码全备份,如果后面发现想倒退回来的时候就删除修改后的,重新启用之前备份的。这样可以解决一些问题,但是这是手工的,很麻烦。只要是麻烦的事情都会容易让你懒于去做。如果有可以工具,让你很方便的退回到以前的某个时候的代码状态,是不是很好?这就是版本控制系统要解决的问题。 
      还有一个重要的原因就是变更跟踪。如果你手工备份,是不是也得写一个readme文件,说明为什么要修改。如果是多人协同开发,你还想知道是谁修改的。如果有一个工具可以帮你自动维护这些信息,让你很容易达到目的,何乐而不为呢? 
      另外一个重要的原因就是bug跟踪。如果你在一个稳定的版本上做了修改,发布以后发现有bug了。你首先想到的肯定是你修改导致的,如果你能快速的找到你的修改点,是不是很容易定位错误。还有另一种情况,在发现bug的时候你的代码又前进了很多,你要想重现bug是不是要利用之前的哪一个版本来测试? 

      综合这些问题,我们需要一个版本控制系统来: 
        1. 维护代码的演化历史 
        2. 记录历史变化的原因和说明 
        3. 如果是多人开发,就会发生多人修改同一个文件的可能,还得保证彼此不会覆盖他人的代码,甚至能智能地合同。 

    常用的VC:

      就分布式版本控制系统 - Git 而言.

      1. repository 
       因为没有一个集中式的repository,那么每一个人都有自己的一个repository。 

      2. branch 
       和一般的分支没有什么区别,每个分支都是一个开发演化路径,也就是由一系列的commit构成的。每个commit都对应这个项目的一个snapshot。可以通过“git branch”来查看当前的分支。 

      3. head 
       既然分支是由一系列的commit构成的,那么最近的一个commit对应的那个snapshot就是这个分支的head。 

      4. master 
       master就是主干分支。 

      5. clone 
       既然每个人都有一个,当你想在一个已有的repository上继续工作的话,你就可以clone一个。刚刚clone的repository就源repository的master的head。 

      6. remote-tracking branches 
       虽然clone的时候只是copy了master的head,但是也有对源repository上其他的分支的track。那就是remote-tracking branches。你可以通过“git branch -r”来查看。 

  • 相关阅读:
    使用xfire
    db2 存储过程编写定义
    mac下使用eclipse的svn报错问题

    nsis打包过程
    mac快捷键以及增加桌面
    struts2 无法访问static目录下的内容的解决办法
    linux下安装db2
    ORACLE01034错误解决
    cannot restore segment prot after reloc: Permission denied
  • 原文地址:https://www.cnblogs.com/bbeb/p/10478183.html
Copyright © 2020-2023  润新知