g4e基础篇#2 Git分布式版本控制系统的优势
g4e 是 Git for Enterprise Developer的简写,这个系列文章会统一使用g4e作为标识,便于大家查看和搜索。
章节目录
1. 基础篇:
- 为什么要使用版本控制系统
- Git 分布式版本控制系统的优势
- Git 安装和设置
- 初始化Git存储库(Repo)
- 起步 1 – 创建分支和保存代码
- 起步 2 – 了解Git历史记录
- 起步 3 – 拉取请求 Pull Request 工作机制
Git是当前最棒的版本控制系统,已经迅速成为了事实的业界标准,以下是Stackoverflow网站在过去几年中针对版本控制系统使用情况的统计,你可以明显看出Git所占的绝对领导位置。

具体数据请参考:
• https://insights.stackoverflow.com/survey/2015
• https://insights.stackoverflow.com/survey/2017
Git和其他版本管理系统最大的区别在于它是一种分布式的版本管理系统(DVCS),这主要是针对类似SVN, TFVC或者ClearCase这种集中式版本管理系统(CVCS)而言的。简单来说,每个Git存储库都是一份完整的代码,历史记录以及分支的集合,而CVCS系统只在服务器上保存所有这些信息,而在本地一般只有当前版本和至多一个历史版本。这种能力赋予了开发人员非常灵活的工作方式,因为分支/查找历史/比较/合并等操作都不需要通过服务器进行,就可以更为轻松的脱机工作或者远程工作;同时在连接到网络的时候又可以和其他人共享代码。
Git 的灵活性和用户接受度使之成为任何团队的首选。 现在,许多开发者和大学毕业生都已知道如何使用 Git。Git 的用户社区中已有许多资源可用来培训开发者,同时 Git 的用户接受度使得用户可以在需要时轻松获得帮助。 几乎所有的开发工具和技术栈都支持 Git,Git 命令行工具可以在所有主要操作系统上运行。对于企业来说,如果不使用Git会让那些新入职的开发者感到非常不适应,并且大幅度降低他们的开发效率,我曾将见到过开发者因为应聘企业使用老旧的开发工具而拒绝接受企业的Offer。
Git的一些基本概念
提交 (commit)

每当通过git保存修改时,Git 会创建一个提交 (commit)。 提交就是在某一个时间点所有文件改动的快照。 如果在下一个提交中文件没有变化,Git 会使用之前存储的文件。 每一个提交都针对前一个提交保存一个链接,这种链接关系形成了一个开发历史的数据链路。
这种链接关系让我们可以将代码还原为以前的提交、检查两个提交的文件变化,并能查看何时在哪里进行了更改等信息。 每个提交在 Git 中都有一个唯一的标识 (commit id),这个id是通过对提交的内容执行加密哈希算法得出的。 由于一切都已经过哈希处理,因此 Git 一定可以检测到更改、信息丢失或文件损坏。
分支(branch)

Git分支与传统版本管理系统不同,并不会在文件系统中创建重复的文件,而是通过修改当前文件所指向的具体版本(commit id)来实现的,所以你不必切换文件夹就可以所以切换到任何分支上工作。
文件和提交状态

Git 中的文件有以下三种状态:已修改(modified)、已暂存(staged)或已提交(committed)。 首次修改文件时,更改只存在于工作目录中。 这些更改还不属于提交或开发历史记录。 必须暂存(stage)要包含在提交中的已更改文件(可以省略其中某些文件)才能将改动提交到Git。 暂存区域包含下一个提交将包含的所有更改。 对暂存文件感到满意后,你就可以提交(commit)这些文件,并为提交添加描述信息。 这个提交就成为开发历史记录的一部分了。
Git的优势
并行开发
每个人都有自己的代码本地副本,可以同时在自己的分支上工作。 你也可以脱机使用 Git,因为几乎所有操作都是在本地执行。
加快发布速度
借助分支,可以灵活地进行同步开发。 主分支(master)作为发布版本的稳定代码。 功能分支(feature branch)包含正在进行的工作,完成后将合并到主分支中。 通过将主分支与正在进行的开发分隔开来,可以更好地管理稳定代码,并更为高效安全的发布代码。
内置集成
因为 Git 用户接受度非常高,它已被集成到大多数工具和产品中。 所有主流的 IDE 都内置有 Git 支持,还有很多工具提供了与 Git 集成的持续集成、持续部署、自动测试、工作项跟踪、指标和报表功能。 这种集成简化了日常工作流,降低了企业开发中工具二次开发,集成和定制的需求。
强大的社区支持
Git 作为开放源代码管理系统,已经成为版本控制系统的业界标准,为团队提供所需的一切工具和资源。 相比其他版本控制系统,Git 的社区支持非常强大,你可以在需要时轻松获得帮助。
Git适用于团队协作
将 Git 与其他工具配合使用,可以鼓励团队协作、同时确保策略的实行、实现自动化,并能提高工作的可见性和可跟踪性,从而提高团队的工作效率。 你可以单独选择不同的版本控制系统、工作项跟踪系统以及持续集成和部署工具。 也可以选择 Visual Studio Team Services / Team Foundation Server 作为端到端的管理工具,团队具备非常高的自主性和灵活性。
Git结合拉取请求(Pull Request)
使用拉取请求可以确保代码检视过程的有效,然后再将它们合并到主分支中。 在拉取请求中进行的讨论非常有价值,可确保代码质量并促进团队成员相互学习和协作。 Visual Studio Team Services / Team Foundation Server 提供了非常棒的拉取请求体验,你可以浏览文件更改、发表意见、检查提交、查看生成,并能通过社交化投票来批准代码合并。
分支策略
分支策略是 Visual Studio Team Services / Team Foundation Server中提供一项有效保持主分支(master)代码质量的策略机制,让团队可以通过配置灵活的策略实现对主分支的保护,比如:不允许直接向主分支提交代码,必须经过代码检视才能合并,必须经过特定人员批准才能合并,必须解决所有代码检视意见才能合并等一系列非常有效的保护手段;同时也允许你自己定制更加复杂的策略规则来适配团队的不同诉求。
小结
到这里,我们对Git的基本工作原理和它的优势具备了一些了解。下一章中我们将开始搭建Git操作环境。
相关文章:
- 微软研发云全家桶VSTS登陆中国
- Markdown/reST 文档发布流水线
- 几款好用的Git GUI客户端工具
- 使用 SSH 连接 TFS/VSTS 的GIT仓库
- GitHub + VSTS 开源代码双向同步
请关注微信公众号 【devopshub】,获取更多关于DevOps研发运维一体化的信息

g4e基础篇#2 Git分布式版本控制系统的优势的更多相关文章
- g4e基础篇#1 什么是版本控制系统
g4e 是 Git for Enterprise Developer的简写,这个系列文章会统一使用g4e作为标识,便于大家查看和搜索. 章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git ...
- g4e基础篇#3 Git安装与配置
g4e 是 Git for Enterprise Developer的简写,这个系列文章会统一使用g4e作为标识,便于大家查看和搜索. 章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git ...
- Git ——分布式版本控制系统
Git ——分布式版本控制系统 本人git主页地址:https://github.com/lendoon/test.git git使用心得:初次接触git在课堂上,老师给我们提供了一个代码托管的场所, ...
- 开发效率优化之Git分布式版本控制系统(一)
阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680本篇文章将先从Git分布式版本控制系统来阐述开发效率优化 一,企业 ...
- Git分布式版本控制系统(下)
Git分布式版本控制系统(下) 链接:https://pan.baidu.com/s/1CgaEv12cwfbs5RxcNpxdAg 提取码:fytm 复制这段内容后打开百度网盘手机App,操作更方便 ...
- GIT分布式版本控制系统
Git诞生历史 我想大家还记得Linus torvalds在1991年时发布了Linux操作系统吧,从那以后Linux系统变不断发展壮大,因为Linux系统开源的特性,所以一直接受着来自全球Linux ...
- 手把手教你玩转Git分布式版本控制系统! (转载)
目录 Git诞生历史 Git环境准备 Git安装部署 Git常用命令 Git基本操作 Git管理分支结构 Git管理标签 GitLab安装部署 GitHub托管服务 Git客户端工具 Git诞生历史 ...
- 手把手教你玩转Git分布式版本控制系统!
目录 Git诞生历史 Git环境准备 Git安装部署 Git常用命令 Git基本操作 Git管理分支结构 Git管理标签 GitLab安装部署 GitHub托管服务 Git客户端工具 1 Git诞生历 ...
- GIT 分布式版本控制系统的简单使用介绍
GIT 分布式版本控制系统的简单使用介绍 1.GIT的概念Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 与 SVN 区别:1. GIT不仅仅是个版本控制系统,它 ...
随机推荐
- 【读书笔记】《Effective Java》——创建和销毁对象
Item 1. 考虑用静态工厂方法替代构造器 获得一个类的实例时我们都会采取一个共有的构造器.Foo x = new Foo(): 同时我们应该掌握另一种方法就是静态工厂方法(static facto ...
- 关于java' web杂谈(其实是课后作业1)1 网站系统开发需要掌握的技术
1 网站系统开发需要掌握的技术:(借鉴度娘)https://zhidao.baidu.com/question/1701850648247880220.html 需要掌握的有:Java(JavaEE) ...
- 《Linux命令行与shell脚本编程大全》第二十一章 sed进阶
本章介绍一些sed编辑器提供的高级特性. 21.1 多行命令 按照之前的知识,所有的sed编辑器命令都是针对单行数据执行操作的. 在sed编辑器读取数据流时,它会基于换行符的位置将数据分成行,一次处理 ...
- C# Excel写入数据及图表
开发工具:VS2017 语言:C DotNet版本:.Net FrameWork 4.0及以上 使用的DLL工具名称:GemBox.Spreadsheet.dll (版本:37.3.30.1185) ...
- 一个简单的 js 时间对象创建
JS中获取时间很常见,凑凑热闹,也获取一个时间对象试试 首先,先了解js的获取时间函数如下: var myDate = new Date(); //创建一个时间对象 myDate.g ...
- zoj 3195 Design the city LCA Tarjan
题目链接 : ZOJ Problem Set - 3195 题目大意: 求三点之间的最短距离 思路: 有了两点之间的最短距离求法,不难得出: 对于三个点我们两两之间求最短距离 得到 d1 d2 d3 ...
- php执行linux命令的6个函数
一般情况下,很少会用php去执行linux命令,不过特殊情况下,你也许会用到这些函数.以前我知道有二个函数可以执行linux命令,一个是exec,一个是shell_exec.其实有很多的,结合手册内容 ...
- CentOS LNMP环境搭建 各版本
我们先下载系统包. 以下centos6.5 X64系统 进行演示.本环境适应Centos5.x CentOs6.x Centos7.x 32和64版本.如有错误请回复本文主要安装代码汇总 [PH ...
- MySQL数据库数据信息迁移
环境内核信息: [root@zabbix-01 ~]# uname -a Linux lodboyedu-01 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:2 ...
- 百度编辑器的内容改变事件监听bug
先贴上我的初始化代码,可能是用法问题冤枉了百度编辑器,如果是我的用法有问题欢迎大侠们指正 <!DOCTYPE type> <html> <head> <met ...