g4e基础篇#1 为什么要使用版本控制系统

本篇是Git企业开发者教程基础篇的第一篇


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流水线。


小结

版本控制系统的优化对于提高软件开发团队效率至关重要,充分了解你所使用的版本控制系统的特性并加以利用是每个开发人员都必须掌握的基本能力。


原文地址:http://devopshub.cn/2018/01/02/g4e-basic-1-about-version-control/


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

15-多对多做左连接查询(查询老师,并且把关联的学生也查出来)

多对多左连接查询 目录 左连接查询老师对学生是多对多的关系,把中心放在老师上,一个老师可以教多个学生,实际上老师对学生也可以理解为一对多的关系。 左连接查询 场景:查询老师,并且把关联的学生也查出来。 Teac…

2.数据湖DeltaLake之DDL操作

转载自 2.数据湖DeltaLake之DDL操作 前面讲了delta lake简介,特性及基本操作。本文主要是讲DeltaLake的DDL操作,实际上是依赖于spark datasourcev2 和catalog API(3.0)的,所以Deltalake整合spark的时候最好是3.0开始…

jzoj4804-[NOIP2016提高A组模拟9.28]成绩调研【指针,模拟】

正题 题目大意 求一个序列里有多少个区间满足kkk的个数在lr∼rkl_r\sim r_klr​∼rk​之间 解题思路 首先十分显然对于一个固定的右端点rrr可以匹配的左指针一定是一个区间[L2..L1−1][L_2..L_1-1][L2​..L1​−1]。 也就是[L2..L1−1][L_2..L_1-1][L2​..L1​−1]任意一个作…

.Net 如何模拟会话级别的信号量,对http接口调用频率进行限制(有demo)

现在,因为种种因素,你必须对一个请求或者方法进行频率上的访问限制。 比如, 你对外提供了一个API接口,注册用户每秒钟最多可以调用100次,非注册用户每秒钟最多可以调用10次。比如, 有一个非常吃服务器资源的…

(八)IT_开发常用单词大全

开发单词 单词 音标 注释 a collection of… 一组… a couple of… 几个 a kind of 一种 a number of… 许多… a point in time n.时间点 a set of… 一组… a series of 一系列 ability [əbɪlətɪ] n.能力 absence [ˈbsəns] …

1.数据湖deltalake初识

转载自 1.数据湖deltalake初识 1.delta特性简介 Delta Lake是Spark计算框架和存储系统之间带有Schema信息数据的存储中间层。它给Spark带来了三个最主要的功能: 第一,Delta Lake使得Spark能支持数据更新和删除功能; 第二,Del…

Quartz.NET 3.0 正式发布

Quartz.NET是一个强大、开源、轻量的作业调度框架,你能够用它来为执行一个作业而创建简单的或复杂的作业调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。在2017年的最后一天Quartz.…

jzoj4805-[NOIP2016提高A组模拟9.28]跟踪【dfs,树】

正题 题目大意 一棵树一个人从sss开始,有两个追击者从p,qp,qp,q出发, 在3k1s3k1\ s3k1 s,那个人走 在3k2和3k3s3k2和3k3\ s3k2和3k3 s,追击者走。 求那个人最久多久不会被追上。 解题思路 首先计算出每个点距离两个追击者和那个…

ScheduledThreadPool中的Leader-Follow模式你知道不?

转载自 ScheduledThreadPool中的Leader-Follow模式你知道不? ScheduledThreadPoolExecutor 是java中一个非常常用的定时调度的工具,其提供了两种定时调度常用模式: 1.固定调度周期的任务执行。 2.固定延迟间隔的任务执行,延迟间隔表示的是…

(九)IDEA便捷配置MyBatis.xml文件

在使用IDEA新建mybatis.xml经常需要手动复制粘贴之前的xml配置。这样也比较麻烦。我们可以IDEA进行关于xml的配置 1.创建MyBatis Config的模版 1.打开新增2.查看编辑页面查看编辑页面 我们看到Name:为我们新增模版的文件名称。Extension:为我们新增文件…

用 Identity Server 4 (JWKS 端点和 RS256 算法) 来保护 Python web api

目前正在使用asp.net core 2.0 (主要是web api)做一个项目, 其中一部分功能需要使用js客户端调用python的pandas, 所以需要建立一个python 的 rest api, 我暂时选用了hug, 官网在这: http://www.hug.rest/.目前项目使用的是identity server 4, 还有一些web api和js client.项目…

欢乐纪中A组莫名其妙赛【2019.6.6】

前言 好像明天他们就高考了,先祝福一波。 然后今天AKKKKKKKKKKKKKKKKKKKKKKKKK!AKKKKKKKKKKKKKKKKKKKKKKKKK!AKKKKKKKKKKKKKKKKKKKKKKKKK! 成绩 JJJ表示初中,HHH表示高中后面加的是几年级 RankRankRankPersonPersonPersonScoreScoreScoreAAABBBCCC111(…

MySQL死锁如何处理

转载自 MySQL死锁如何处理 前提 笔者负责的一个系统最近有新功能上线后突然在预警模块不定时报出MySQL死锁导致事务回滚。幸亏,上游系统采用了异步推送和同步查询结合的方式,感知到推送失败及时进行了补偿。于是,笔者争取了一点时间详细分析…

(十)IDEA添加mybatis-mapp.xml文件

1.点击file–Settings–Editor–file and Code Templates 2.配置mybatis-mapper.xml的网址,点击file–Settings–ages& Frameworks–Schmas and DTDs 3.创建mapper.xml文件

g4e基础篇#2 Git分布式版本控制系统的优势

1. 基础篇:为什么要使用版本控制系统Git 分布式版本控制系统的优势Git 安装和设置初始化Git存储库(Repo)起步 1 – 创建分支和保存代码起步 2 – 了解Git历史记录起步 3 – 拉取请求 Pull Request 工作机制Git是当前最棒的版本控制系统,已经迅速成为了事…

P4989-二进制之谜【堆,贪心】

正题 题目链接:https://www.luogu.org/problemnew/show/P4989 题目大意 一个二进制数两两配对,要求 配对的数不能交叉(用同一个区间但不包含)0在前1在后 要求配对最多的情况下所有配对的距离之和最远。 解题思路 将0视为左括号,1视为右括号&#xf…

案例分析 | 由Decimal操作计算引发的Spark数据丢失问题

转载自 案例分析 | 由Decimal操作计算引发的Spark数据丢失问题 供稿 | Hadoop Team 编辑 | 顾欣怡 本文3058字,预计阅读时间10分钟 导读 eBay的Hadoop集群上面每天运行着大量Spark计算任务。对于数据计算任务,其计算性能十分重要,数据质…

(十一)MyBatis的动态SQL:trim元素

trim标记是一个格式化的标记,可以完成select,update,insert语句的格式化操作。trim元素的主要功能有四个: (1)可以在包含的内容前加上某些前缀,与之对应的属性是prefix; &#xff08…

入门干货之Electron的.NET实现-Electron.NET

0x01、Electron.NET1、介绍Electron是由Github上的一支团队和一群活跃贡献者维护。用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。 Electron通过将Chromium和Node.Js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linu…

P2514-[HAOI2010]工厂选址【贪心】

正题 题目链接:https://www.luogu.org/problemnew/show/P2514 题目大意 有一个厂,需要bbb吨煤炭,然后第jjj个矿运到该厂的运费为c0,jc_{0,j}c0,j​,运行总费用为运费之和加上h0h_0h0​ 现在在1∼n1\sim n1∼n挑选一个建一个新厂&#xff0…