版本控制介绍

我是乔帮主 2021-10-29 13:44:54 ⋅ 2053 阅读

原文:An introduction to version control

如果你对版本控制很有兴趣,但还没有真正使用,最可能的原因是版本控制让人困惑。如果你是新手的话,了解一下版本控制的基本概念是个不错的主意。

为什么版本控制很重要

如果没有使用版本控制,很有可能你还在使用类似“index-v12-old2.html”的方法更新文档,其实还有一些其它的方式不仅能够让你控制源代码和文件,而且让团队变得更有成效。如果如下内容听起来很耳熟:

  • 通过邮件同团队沟通升级更新的信息
  • 直接在生产环境里升级
  • 不小心覆盖了一些文件,但再也不能恢复

其实可以做得更好:

  • 文件名和目录结构在所有团队成员那里都是始终一致的
  • 有信心做任何修改,甚至在必要的时候恢复原状
  • 在团队里使用源代码控制系统作为交流方式
  • 容易地部署代码的不同版本到staging或production服务器
  • 知道谁在什么时候做了哪些改变

基本概念

跟踪变更

版本控制系统主要基于一个概念:跟踪发生在目录或文件里的变更。跟踪变更的特点因版本控制系统而异,从仅仅知道文件发生了更改到知道文件里具体的字符或字节发生的变化。

大多数情况下,我们设定一个目录或一组文件被版本控制跟踪变更,通过从某个主机check out(或clone)一个代码仓库、或告知软件哪个软件被置于版本控制之下。

这些置于版本控制下的文件或目录一般被称为代码仓库。

当我们做出更改时,版本控制会在幕后记录变化,这个过程对我们来说是透明的,直到我们准备提交哪些变更为止。

提交

当我们工作在版本控制之下的文件时,每个变更都被自动记录,变更包括修改文件、删除文件或目录、增加文件、移动文件或任何能够改变文件状态的操作。版本控制不会孤立地记录每一个变更,它将等待我们递交变更的一个集合,版本控制里这组集合的递交动作被称为commit

修订版本和变更集

提交完成后,发生变更的记录被当作一个变更集(changeset),并为其分配一个唯一的修订版本号(revision)。这个修订版本号可能是自增型的数字(1、2、3),也可能是唯一的哈希字串(比如846eee7d92415cfd3f8a936d9ba5c3ad345831e5),具体是什么类型取决与版本控制系统,我们要知道的是变更集的修订版本号非常便于未来对变更集进行引用。变更集也包含了提交变更的人员、变更发生的时间、受到影响的文件或目录、对变更的注释说明、甚至也有文件里面发生变更的代码行数等信息。

这些信息对协同开发非常有价值,通过查看过往的修订版本和变更集可以但到项目进化的轨迹、可以评审组员的代码,每个版本控制系统都有查看完整修订历史或日志的工具和格式。

 

获取更新

在进行提交的时候,确保自己具有最新的版本非常重要,可以减少代码冲突的几率。从代码库获取最新变更的操作相当简单,通常就是执行pull或update操作,当执行pull或update操作时,只会下载你上次请求后发生变更的内容。

冲突

当获取最新的变更或进行提交时发生了冲突怎么办?或者说,当你的变更跟代码仓库里其他组员的变更内容非常相似,以至于版本控制系统不能决定哪个正确或更有权威时,该怎么办?大部分情况下,版本控制系统都会提供一些途径,让我们查看发生冲突版本的具体差异,提供决策依据。我们要么可以修改这些文件以合并更改的内容,要么抉择某一个作为正确的版本。解决冲突时,有必要跟提交了冲突代码的同事协作,避免丢失他们的工作成果。

差异对比

由于每个提交都记录了针对具体文件或目录的更改,有时查看修订版本之间的具体差异就非常有用。比如,如果最近的一次部署的网站出现了问题,通过排查发现某个特定的文件是罪魁祸首,最好的办法就是看看这个文件最近发生了什么更改。通过查看差异,可以比较两个文件发生便行的代码行,看看何人何时修改了这个文件。大多数版本控制系统可以查看提交历史里任意两个修订版本的差异。

分支与合并

分支跟合并是VCS的关键概念,这里就不翻译解释了。用好分支能够提高研发的效率和研发结果的健壮性。

版本控制系统的类型

版本控制系统主要分两个类别:中心式和非中心式,非中心式通常被称为分布式。

中心式

 

当前最流行的版本控制系统Subversion就是中心式的,它有一个中心服务器,向所有客户端提供服务。所有的变更、用户、提交和信息都必须通过这个中心服务器中转。

Subversion的主要优点:

  • 容易理解
  • 易于控制用户和权限
  • 大量的GUI和IDE客户端
  • 上手容易

同时,它也有一些劣势:

  • 依赖对服务器的访问能力
  • 所有的命令都要连接服务器
  • 分支和合并工具难于使用

分布式

 

分布式下,每个用户都拥有整个代码库的完整拷贝,不只是文件,也包括提交历史。当前流行的分布式版本控制系统是GIT和Mercurial。

分布式系统的主要优点:

  • 更强大和详细的变更追踪能力
  • 可以不需要服务器,能够离线提交
  • 分支和合并更文档
  • 速度快

主要缺点:

  • 分布式模型有点难于理解
  • 新事物,GUI少一些
  • 修订版本不是自增型数字,引用不便
  • 不熟悉这个模型的时候容易犯错误

建议大家直接切换到GIT上。


全部评论: 0

    我有话说:

    DBeaver 切换至日历版本控制版本号更新至 21.0

    近日 DBeaver 将版本号切换至日历版本控制。切换之后,DBeaver 的版本号将以发布年份为基础,其首个版本为 DBeaver 21.0(切换后的 2021 年第一版),该版本是 7.3.5

    WebStorm 2021.1 Beta 发布:改进对版本控制、Stylelint 和 Vue 的支持

    WebStorm 2021.1 首个 Beta 版本已发布。更新亮点如下: 改进对 Stylelint 的支持 支持 Vue 中的 CSS 模块 支持 Git commit 消息模板 增加将变更

    Git典型工作流程介绍

    Git典型工作流程介绍

    NodeJS 10.5.0 中的线程:实用介绍

    几天前,Node.js版本10.5.0发布,其中包含的主要功能之一是添加了线程支持。

    精品推荐:Nacos 发布 v0.6.0 版本,支持 Dubbo 和 Docker 部署

    阿里巴巴微服务开源项目Nacos发布 v0.6.0 版本,该版本开始支持 Dubbo的服务发现和配置管理,并针对 Docker 部署提供了官方的 Docker 镜像,以及优化了Nacos 控制台的

    Elasticsearch-基础介绍及索引原理分析

    Elasticsearch是一个Lucene支持的分布式文本检索引擎。针对大型数据集的索引与检索功能,Elasticsearch性能非常优越。当你有关于数据的附加属性且你能够知道具体需要查询的记录时,通常可以使用Elasticsearch。

    JavaScript 引擎 V8 发布 8.3 版本,性能提升

    JavaScript 引擎 V8 发布了 8.3 版本

    Spring Cloud 2020.0.1 BUG 修复版本发布

    2021 首发, Spring Cloud 2020.0.1 (代号"Ilford",伊尔福德)版本发布,此版本 BUG 修复版本,可从 2020.0.0 版本平滑升级。目前已可以从 maven

    Redis 6.0.10 发布维护版本

    Redis 6.0.10 现已发布,这是一个维护版本,升级迫切性等级为中等:修复了一些具有中等影响的错误。具体更新内容如下: Command behavior changes

    JimuReport 积木报表 1.3.3 版本发布,可视化报表工具

    项目介绍 积木报表,是一款免费的可视化Web报表工具,像搭建积木一样在线拖拽设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等! 秉承“简单、易用、专业”的产品理念,极大的降低报表开发

    Spring Boot 2.3.6 发布,Bugfix 版本

    Spring Boot 2.3.6 已发布,可从 Maven 中央仓库获取新版本。 <!-- https://mvnrepository.com/artifact/org

    IntelliJ IDEA 2021.1 首个 Beta 版本发布

    经过了近五周的 EAP 版本更新后,IntelliJ IDEA 2021.1 终于发布了首个 Beta 版本。 主要更新亮点: 支持 Java 16 支持打开存储在 WSL 2 中的 Maven

    Masterlab 3.0.0 RC3 版本发布

    版本紧急修复:更新数据库时遇到Mysql关键字错误的BUG。 Masterlab 是一款基于事项驱动和敏捷开发的在线协作系统,专为项目经理、产品经理、码农、测试工程师量身定做,简约不简单,可将复杂

    假期归来,睡前看一看多款软件发布最新版本

    SpringBoot、Element和React UI等多款软件发布新版本

    详细讲解一下Hadoop3.2 集群新版本的搭建过程

    详细讲解一下Hadoop3.2 集群新版本的搭建过程

    大多数人都不知道的 Maven 版本

    前言 大多数程序员或多或少会有这样的苦恼经历 开发了一个公共组件 maven 版本号为: 1.0.0 然后很多项目都用了这个项目的版本号 过了一段时间发现有bug,或者需要在组件中增加些代码,版本号

    Druid 1.2.4 版本发布,增强 SQL Parser,支持 JDK8 日期类型

    Druid 1.2.4 版本现已发布,这个是一个小的 bug 修复版本,修复了一系列 SQL Parser 的问题,增强对 JDK 8 的支持。 Issues SQL Parser 增强对

    WxJava 4.0.0 版本发布,微信开发 Java SDK

    本次版本更新相对于上一个正式版本,主要是微信支付模块增加完善了大量电商收付通的相关接口,企业微信模块则重构优化了第三方应用模块实现,增加了部分接口,小程序模块则增加完善了直播相关部分接口等。同时重构

    Go语言社区系统 bbs-go 3.2.0 版本发布,支持基于 Elasticsearch 的帖子搜索

    更新内容 新功能:支持基于elasticsearch的帖子搜索功能 优化:SEO优化,支持神马搜索链接推送 优化:完善数据库初始化脚本 优化:优化日志输出逻辑,日志输出到文件时同时支持输出到控制台