分享

【精品资料】你想知道的版本控制软件Git

 乐创客搬运工 2021-01-27

文 / Edawrd


  软件版本控制
我们自己平时写软件的时候,有时候都会将阶段性的成果单独地备份一份保存起来,接下来的下一个功能会在这个备份上面再去开发。这样做的好处是,哪怕我们新增的一些代码有致命性问题从而影响了之前已经实现好的功能代码,那么倒退回以前的版本也非常方便,不至于重新去做一遍。
而有实际工作中,一个大型的项目工程往往都是由十几二十个软件工程师组成的项目组协同开发的,每个软件工程师在这个项目中只实现一部分功能代码,这些代码中往往有一些是有交集的。如,开发功能模块工程师的代码,要依赖于开发框架的工程师的代码上;开发应用工程师的代码,要依赖于开发驱动的工程师的代码上。如果每个工程师都想上述一样,将阶段性功能的代码保存在本地,那么这么多版本的副本到最后肯定会发生错乱。
基于此,软件工程中各类的版本控制软件就被发明出来了。版本控制软件的用处就只有两个,第一个是对软件开发过程中产生的文件的版本控制,第二个是对软件开发中产生文件的变更管理。软件开发过程中产生的文件包括程序代码,配置文件以及文档说明。
版本控制软件的功能包括:
  • 检入检出控制

    软件开发人员对源文件的修改不能在软件配置管理库中进行,对源文件的修改依赖于基本的文件系统并在各自的工作空间下进行。为了方便软件开发,需要不同的软件开发人员组织各自的工作空间。一般说来,不同的工作空间由不同的目录表示,而对工作空间的访问,由文件系统提供的文件访问权限加以控制。

    访问控制需要管理各个人员存取或修改一个特定软件配置对象的权限。开发人员能够从库中取出对应项目的配置项进行修改,并检入到软件配置库中,对版本进行“升级”;配置管理人员可以确定多余配置项并删除。

    同步控制的实质是版本的检入检出控制。检入就是把软件配置项从用户的工作环境存入到软件配置库的过程,检出就是把软件配置项从软件配置库中取出的过程。检入是检出的逆过程。同步控制可用来确保由不同的人并发执行的修改不会产生混乱。

  • 分支和合并

    版本分支(以一个已有分支的特定版本为起点,但是独立发展的版本序列)的人工方法就是从主版本——称为主干上拷贝一份,并做上标记。在实行了版本控制后,版本的分支也是一份拷贝,这时的拷贝过程和标记动作由版本控制系统完成。版本合并(来自不同分支的两个版本合并为其中一个分支的新版本)有两种途径,一是将版本A的内容附加到版本B中;另一种是合并版本A和版本B的内容,形成新的版本C。

  • 历史记录

    版本的历史记录有助于对软件配置项进行审核,有助于追踪问题的来源。历史记录包括版本号、版本修改时间、版本修改者、版本修改描述等最基本的内容,还可以有其他一些辅助性内容,比如版本的文件大小和读写属性。


  集中式和分布式版本控制
  • 集中式版本控制软件


最早的版本控制软件比较著名的有CVS和SVN,到目前为止,一些大型的软件公司或者跨国企业还是比较钟情于使用这两个软件,这些版本控制软件都是属于集中式版本控制软件的一种。
集中式版本控制软件顾名思义是一种集中式管理软件版本库的软件,其最典型的特点是:版本库都是放置在中央服务器里面的。而当软件工程师开始码代码时,第一步都需要从服务器中取得最新版本的代码,对于绝大多数大型企业的软件工程师来说,这绝对是非常折磨人的操作,因为往往这些跨国企业的代码服务器都是存放在海外,更新代码的速度非常慢,一个大型的工程往往代码下载都要花费很长的时间。等这些最新版的代码从服务器上面下载下来之后,恭喜你,终于可以编写程序了,然后写了一天程序下班之后,又需要将代码传到服务器上面,如果哪一天下班你忘记传上去了,而第二天你又请假,那么你项目组中的其它同事势必会连环夺命CALL,追着你要代码。
集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快;可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟;如果你的公司是跨国企业,代码服务器架设在国外的那种,那10M的文件可能会传输大半个小时。
  • 分布式版本控制


分布式版本控制采用的思路和集中式版本控制截然不同,它们两个最大的不同就是分布式版本控制软件根本不需要所谓的中央服务器,每个程序猿的电脑里面都有一个完整的版本库。因此在协同工作的时候,有一个程序猿A修改了自己电脑上的一个文件,如a.c,程序猿B也修改了他自己电脑上的a.c,等到推送的时候,他们两个只需要将各自修改的文件推送给对方,就可以互相看到对方的修改了。
和集中式版本控制比起来,虽然分布式版本控制没有了中央服务器这个东西,貌似不那么高大上了,但是这种方式显然是更为先进的和安全,因为集中式版本控制,万一哪天服务器出事,整个公司软件工程师就可以休假了,而分布式版本控制软件则不存在这个问题。
事实上,分布式版本控制也是比集中式版本控制晚上市,因为最早Linus在管理Linux版本的时候,曾经用过一个商业化的版本控制系统BitKeeper,这个软件是BitMover免费赞助给Linus的,但是好景不长,Linux社区牛人太多而且有不守规矩,他们企图破解BitKeeper的传输协议,恰巧BitMover发现了,后续的发展,显然这个公司就要收回BitKeeper。介于此Linus花了两周时间写出了历史上第一个分布式版本控制软件,这个就是大名鼎鼎的Git。
这里再说一点,Git是一个开源的版本控制软件,那个著名世界最大同性交友网站Github只是一个开源项目的存储网站,千万别混为一谈。当然Git可以连接到GayHub。
在实际使用分布式版本控制软件的时候,其实现在已经很少人会在两个计算机之间互相推送版本修改了,因为网络受限,很难确保大家在同一个局域网内部,因此分布式版本控制器系统中通常也有一台充当服务器的电脑,只不过这台服务器只是为了方便大家进行修改的推送,没有其他功能,可有可无。


    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多