g4e基础篇#1 什么是版本控制系统
g4e 是 Git for Enterprise Developer的简写,这个系列文章会统一使用g4e作为标识,便于大家查看和搜索。
章节目录
1. 基础篇:
- 为什么要使用版本控制系统
- Git 分布式版本控制系统的优势
- Git 安装和设置
- 初始化Git存储库(Repo)
- 起步 1 – 创建分支和保存代码
- 起步 2 – 了解Git历史记录
- 起步 3 – 拉取请求 Pull Request 工作机制
Git是一种版本控制系统,让我们首先了解一下使用版本控制系统的必要性。
版本控制系统有助于你跟踪和保存在一段时间内所修改的代码,同时帮助你跟踪所有你所作出的变更,它就如同一部相机,不停的帮助你记录某一时刻的代码状态快照并永久保存这些快照,以便你可以在未来的任何时间找回之前的改动。
如果没有版本控制系统,你需要在自己的计算机上保存同一份代码的多个副本才能确保满足很多常见的开发场景。我相信很多刚刚接触编程的同学都这样做过,但是这样做会非常危险,因为你可能会误删或者修改了其中某些文件,造成工作丢失,最糟糕的是,你无法知道你为什么做了这些改动以及做了什么改动。在团队开发的场景下,版本控制系统变得更加重要,因为你会非常频繁的和其他开发人员交换代码,有时需要同步,有时需要并行,如果没有版本控制系统,这一切会变成每个人的噩梦,让你无法专注于你的开发工作,造成极大的浪费的效率损失。
对于企业开发者而言,如果没有版本控制系统基本上就无法开展日常工作,因为与个人开发不同的是,企业开发需要几十人甚至成百上千人协同完成开发工作。同时,企业级软件还存在多个并行发布版本,多个运行环境(调测,测试,预生产,生产等),多种专业分工(架构,设计,开发,测试,运维)等复杂情况;要适应这样复杂的情况,没有高效的版本控制系统和适当的分支策略和流程控制是不可能实现的。
简单总结一下使用版本控制系统的好处如下:

统一工作方式:版本控制系统工作流可防止每个人使用各种不兼容的工具按照自己的习惯进行开发的混乱局面。 版本控制系统提供流程强制执行措施和权控制能力,让所有人都有章可循。这对于企业开发者尤其重要,虽然软件开发是非常强调单个开发者个性的过程,但团队开发中个性化的环境和工具只能造成协作效率的下降,因此通过统一的版本控制工具来统一所有人的工作方式至关重要。

跟踪改动:每个版本都有一个关于版本更改(如修复 bug 或新增功能)的说明。 此说明有助于按版本(而不是按各个文件更改)来跟踪代码更改。 可以根据需要随时在版本控制系统中查看和还原各个版本中存储的代码。 这样一来,你就可以在任意一版代码的基础上轻松开展新工作。这一特性对于很多企业开发中场景的场景非常有帮助,比如:在同步开发新版本的时候需要临时解决一个线上问题,我们必须能够精准定位线上环境所使用的代码版本,在这个版本上进行修复并快速发布解决问题,同时还要确保这个bug修复不会在未来版本被遗漏。

团队协作:版本控制系统可以帮助不同开发人员同步代码版本,并确保你的更改不会与团队其他成员的更改相互冲突。 团队依赖版本控制系统中的各种功能来预防和解决冲突,让团队成员可以同时进行代码修改。很多人在使用版本控制系统时最头疼就是冲突的解决,因此很多团队会禁止成员使用分支。对分支进行一定程度的控制是很有必要的,但是控制过死会让团队成员束手束脚,造成团队成员之间的紧耦合,从而降低开发效率。有效的分支策略需要综合考虑多种因素,包括:团队结构,发布方式,环境部署流程,职能团队间的配合,代码质量的控制等。Git所代表的分布式版本控制系统有效的平衡了管控和自由之间的矛盾,允许你设计成最适合你的团队的编码协作模式。

保留历史:在团队保存代码的新版本时,版本控制系统会保留变更历史记录。 团队成员可以查看此历史记录,了解是谁在何时进行更改以及更改原因。 有了历史记录,你就有信心进行各种尝试和探索,因为可以随时回退到上一正常版本。历史记录不仅仅可以帮助成员有效的了解代码的来龙去脉,还能帮助成员避免犯错误。基于历史记录进行一定的数据分析后,我们可以让开发人员更智能的进行工作。

配合持续集成:持续集成/发布工具必须和版本控制系统有效的集成才能发挥出真正的能量,一个高效的分支策略的设计必须考虑持续集成和发布的要求,同时兼顾开发流程的有效性。持续集成和持续发布已经成为现代企业级软件开发的必需品,降低软件发布过程的成本,减少错误,避免失误,这些都需要CI/CD的配合。但是我们改在怎样的代码版本上进行CI/CD,这恐怕是困扰很多人的难题。我见到的大多数团队的CI/CD都是与某一分支绑定的,这其实一种错误的做法,因为这样你只能在代码已经进入分支之后才能进行验证,CI对于代码质量的验证成为了马后炮,无法起到预防的作用;使用Git我们可以针对代码变更进行预评审,预合并和预构建和发布,让你更为有效的组织自己的CI/CD流水线。
小结
版本控制系统的优化对于提高软件开发团队效率至关重要,充分了解你所使用的版本控制系统的特性并加以利用是每个开发人员都必须掌握的基本能力。
相关文章:
- 微软研发云全家桶VSTS登陆中国
- Markdown/reST 文档发布流水线
- 几款好用的Git GUI客户端工具
- 使用 SSH 连接 TFS/VSTS 的GIT仓库
- GitHub + VSTS 开源代码双向同步
请关注微信公众号 【devopshub】,获取更多关于DevOps研发运维一体化的信息

g4e基础篇#1 什么是版本控制系统的更多相关文章
- g4e基础篇#2 Git分布式版本控制系统的优势
g4e 是 Git for Enterprise Developer的简写,这个系列文章会统一使用g4e作为标识,便于大家查看和搜索. 章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git ...
- g4e基础篇#1 为什么要使用版本控制系统
g4e 是 Git for Enterprise Developer的简写,这个系列文章会统一使用g4e作为标识,便于大家查看和搜索. 章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git ...
- g4e基础篇#3 Git安装与配置
g4e 是 Git for Enterprise Developer的简写,这个系列文章会统一使用g4e作为标识,便于大家查看和搜索. 章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git ...
- g4e基础篇#6 了解Git历史记录
章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git 分布式版本控制系统的优势 Git 安装和设置 了解Git存储库(Repo) 起步 1 – 创建分支和保存代码 起步 2 – 了解Git ...
- g4e基础篇#5 创建分支和保存代码
章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git 分布式版本控制系统的优势 Git 安装和设置 了解Git存储库(Repo) 起步 1 – 创建分支和保存代码 起步 2 – 了解Git ...
- g4e基础篇#4 了解Git存储库(Repo)
章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git 分布式版本控制系统的优势 Git 安装和设置 了解Git存储库(Repo) 起步 1 – 创建分支和保存代码 起步 2 – 了解Git ...
- 如何选择版本控制系统之二---Git的研发应用场
之前写了一篇<如何选择版本控制系统 ---为什么选择Git版本控制系统>,地址是:http://www.cnblogs.com/goldenfish/p/6876864.html,有兴趣的 ...
- Git 基础(分布式版本控制系统)
1.Git 简史 自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标.它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统. 2.Git 基 ...
- linux进阶之SVN集中式版本控制系统篇
代码上线--版本控制系统 SVN 集中式版本控制系统 git 分布式版本控制系统 SVN是subversion的缩写,即版本控制系统,是一个开放 ...
随机推荐
- 教我徒弟Android开发入门(一)
前言: 这个系列的教程是为我徒弟准备的,也适合还不懂java但是想学android开发的小白们~ 本系列是在Android Studio的环境下运行,默认大家的开发环境都是配置好了的 没有配置好的同学 ...
- Java集合(1)一 集合框架
目录 Java集合(1)一 集合框架 Java集合(2)一 ArrayList 与 LinkList Java集合(3)一 红黑树.TreeMap与TreeSet(上) java集合(4)一 红黑树. ...
- HBase存储剖析与数据迁移
1.概述 HBase的存储结构和关系型数据库不一样,HBase面向半结构化数据进行存储.所以,对于结构化的SQL语言查询,HBase自身并没有接口支持.在大数据应用中,虽然也有SQL查询引擎可以查询H ...
- PHP入门怎么选?大学生适合学习吗?
大学毕业,面对竞争激烈的社会,理想总是很丰满,现实却很残酷.在硕士.博士都随处可见的今天,本科和大专文凭就显得苍白无力,在面试官问你"有没有工作经验"的时候,你是不是只想起实习期间 ...
- linux下php7安装memcached、redis扩展
linux下php7安装memcached.redis扩展 1.php7安装Memcached扩展 比如说我现在使用了最新的 Ubuntu 16.04,虽然内置了 PHP 7 源,但 memcache ...
- Servlet实践--留言板-v1
功能介绍: 由三个jsp页面组成,在doGet中根据请求URL中的请求参数不同,跳转到不同的页面: 页面1:显示整个留言板列表 页面2:创建留言页面(包括用户.主题.内容和上传文件) 页面3:在查看单 ...
- include、include_once、require、require_once其区别
1.include: 载入文件.未找到文件,则产生E_WARNING 级别的警告错误,脚本继续运行. 2.include_once: 与include 语句作用相同,区别只是如果该文件已经被包含过,则 ...
- Vue.js学习 — 微信公众号菜单编辑器(一)
学习里一段时间Vue.js,于是想尝试着做一个像微信平台里那样的菜单编辑器,在这里分享下 具体样式代码查看项目github 创建一个vue实例 <!DOCTYPE html> <ht ...
- Netty与传统Server对比
前言 本文旨在介绍传统Socket服务端与NIO服务端的差异. 以餐厅服务员简单举例,每个客人对应一个请求. 传统Socket / OIO public class OioServer { @Supp ...
- 编写高质量代码—javascript的分层—base层
base层的功能是为common层和page层提供接口.封装不同浏览器下javaScript的差异,提供统一的接口 1.用getNextNode 函数封装IE和Firefox的差异: 2.透明度:封装 ...