大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是分布式版本控制工具Git

1.为什么需要版本控制系统?

  单人软件项目开发过程,往往很多功能都是逐步增加的,在代码开发过程中,有的时候功能并不是单向递增的,中途可能会经过不断地优化设计与修改,而修改的过程中有时会出现误操作导致功能缺陷,当时并没有及时发现,等出问题时,这时候免不了要回过头来查找问题,定位问题最常用的办法就是查看自己曾经到底修改了哪里,此时便涉及到一个概念叫“版本控制”,显然我们需要一个工具能记录开发过程中的所有版本,并能够在需要的时候能切换到任意指定的版本。

  随著软件项目规模越来越大,多人协作开发已成为不可避免的趋势,每个成员都在本地修改,添加,删除项目里的功能,当把每个人的工作汇总起来时,麻烦就出现了,到底是改了哪些功能?功能里的哪些细节被修改了?功能的修改出现冲突怎么办?此时功能汇总合并工作便变得非常低效,汇总完成后还需要再将代码同步到每个项目成员本地。此时便涉及到另外一个概念叫“版本库”,版本库就是一个有着自定义数据结构的仓库,进入仓库的东西都按照统一结构存放着,版本库用来记录整个项目的功能是如何一步步演化的。显然版本库使得团队协同开发变得简单。

  总结一下,版本控制系统=版本库+版本管理工具。版本控制系统使得项目开发变得更加高效。

2.版本控制系统Git由来

  版本控制系统有很多,比如CVS、SVN、Mercurial、Git,其中Git是一个概念非常先进的完全分布式版本控制系统。

  Git诞生2005年,其创始人叫Linus Torvalds,什么?没听到这位仁兄?如果你知道Linux系统的话,没错,这位仁兄也是Linux内核发明人。

  Git设计的初衷是为了管理Linux系统源码,Linus于1991年创建了开源的Linux,世界各地Linux社区的人都在为Linux编写代码,那Linux的代码是如何管理的呢?实际上,在2002年之前,Linux代码合并工作完全是Linus手工完成的。到了2002年,Linux代码库之大让Linus很难继续通过手工方式管理了,Linus迫于压力只得选择一款叫BitKeeper的商业版本控制系统,到了2005年,Linux社区有人试图破解BitKeeper协议,但被BitMover公司及时发现了,BitMover一怒之下收回了Linux社区使用权。于是Linus花了两周时间用C写了一个分布式版本控制系统,这便是Git!之后一个月,Linux系统的源码开始由Git管理了!

  自那以后,Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。

3.Git主要有哪些特点?

  Git是一款免费的、开源的、分布式的版本控制系统。Git主要有以下4大特点:

  • 速度极快:Git在本地保存着所有当前项目的历史更新,所以处理起来速度飞快。
  • 省心可靠:Git可以时刻保持数据完整性,多数操作仅是添加数据,一旦提交快照之后就完全不用担心丢失数据。
  • 离线工作:Git近乎所有操作都是本地执行,绝大多数操作都只需要访问本地文件和资源,不用连网。
  • 资源丰富:越来越多的公司,开源项目使用Git,包括Ruby On Rails,jQuery,Perl,Debian,Linux Kernel等等。拥有一个强大的社区是很大的优势,有很多教程、工具。

4.三种常见的Git开发流程

  Git是分布式管理方式,它与集中式管理方式最大的区别是Git支持本地提交,因为每个开发者本地都有服务器的完整数据库。当需要将本地提交同步到公共服务器上的数据库时,就出现了以下三种开发模式来规范这种同步行为。

  第一种模式叫平等合作模式,这种模式下没有明确的项目负责人,每个人对项目的控制权平等。每个开发都可以对项目进行任意修改。

  第二种模式叫经典开发模式,这种模式下明确了一个项目负责人,由这个负责人汇总所有开发人员的提交,并负责对项目进行统一修改。

  第三种模式叫超大项目模式,这种模式下有二级经典开发模式,即将项目分成多个子模块,每个子模块均有自己的公共服务器,每个子模块的开发使用经典开发模式,而子模块的汇总也是经典开发模式。

  Git的世界还有很多好玩的东西,具体我们下篇再说。

  至此,分布式版本控制工具Git基本知识痞子衡便介绍完毕了,掌声在哪里~~~

参考资料

[1]. Git简介

[2]. Git浅显易懂教程

[3]. 迁移到Git的八个理由

[4]. Git的主要特点

[5]. git使用简介

痞子衡嵌入式:备受开源社区推崇的分布式版本控制工具(Git)的更多相关文章

  1. 开源分布式版本控制工具 —— Git 之旅

    Git 主张的分布式代码库与文件快照的设计思想,相对于传统 CVS.SVN 等集中式.文件差异式版本控制工具是一种挑战与颠覆.Git 带来了离线提交.轻量级分支等诸多便利.不过,也有人质疑 Git 的 ...

  2. 痞子衡嵌入式:开源软件协议(MIT/BSD/Apache/LGPL/MPL/GPL)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是关于开源软件协议基本知识. 牛顿曾说过:"如果我比别人看得更远,那是因为我站在巨人的肩上".在软件开发中如果说也存在巨 ...

  3. 痞子衡嵌入式:恩智浦MCU安全加密启动一站式工具NXP-MCUBootUtility用户指南

    NXP MCU Boot Utility English | 中文 1 软件概览 1.1 介绍 NXP-MCUBootUtility是一个专为NXP MCU安全加密启动而设计的工具,其特性与NXP M ...

  4. 痞子衡嵌入式:恩智浦SDK驱动代码风格检查工具预览版

    大家好,我是痞子衡,是正经搞技术的痞子. 接上文 <恩智浦SDK驱动代码风格.模板.检查工具> 继续聊,是的,过去的三天里我花了一些时间做了一个基于 PyQt5 的 GUI 工具,可以帮助 ...

  5. 痞子衡嵌入式:ARM Cortex-M文件那些事(6)- 可执行文件(.out/.elf)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式开发里的executable文件(elf). 第四.五节课里,痞子衡已经给大家介绍了2种output文件,本文继续给大家讲proje ...

  6. 痞子衡嵌入式:恩智浦MCUX SDK在GitHub上线了

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是恩智浦MCUX SDK 在GitHub上线一事. 其实在差不多一个月前(2021年1月6日),恩智浦MCUX SDK就在GitHub悄悄上 ...

  7. 痞子衡嵌入式:对比MbedTLS算法库纯软件实现与i.MXRT上DCP,CAAM硬件加速器实现性能差异

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是MbedTLS算法库纯软件实现与i.MXRT上DCP,CAAM硬件加速器实现性能差异. 近期有 i.MXRT 客户在集成 OTA SBL ...

  8. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU特性介绍(2)- RT1052DVL6性能实测

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的性能. 在前面的文章 i.MXRT微控制器概览 里,痞子衡给大家简介过恩智浦半导体在2017年推出的新 ...

  9. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(8)- 从Raw NAND启动

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Raw NAND启动. 前面铺垫了七篇启动系列文章,终于该讲具体Boot Device了,我们知道i. ...

随机推荐

  1. (30)3 ways to make better decisions — by thinking like a computer

    https://www.ted.com/talks/tom_griffiths_3_ways_to_make_better_decisions_by_thinking_like_a_computer0 ...

  2. Qt HID USB通讯错误

    1.下载hidapi库 链接:https://pan.baidu.com/s/1iQBuTxg-fReN-7GTrCT6SA 提取码:xzqw 2.把库加入qt 转自:https://www.cnbl ...

  3. JAVA 8 主要新特性 ----------------(五)Lambda方法引用与构造器引用

    一.Lambda方法引用 当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!(实现抽象方法的参数列表,必须与方法引用方法的参数列表保持一致!) 方法引用: 使用操作符 “::” 将 ...

  4. oracle odbc mysql 字段不全

    主要是字段集不对,mysql的字符集默认设置为utf8,odbc才是unicode编码连接,无法转发.选择ansi连接方式即可.

  5. selenium自动化打开浏览器不受信任解决办法

    之前在用selenium(火狐浏览器)打开一个https网站时,总是弹出不受信任,修改配置后,每次加载的浏览器都是还原了配置,无法加载出页面,这里给出解决办法:让浏览器去加载我们修改后的配置,具体如下 ...

  6. 从今天开始慢慢阅读java9源码决心的声明。

    我从很早的时候就好奇java的源码了,因为有使用者就有制作者. 在校期间使用了java两年多的我却不知道java里面的任何东西. 这个寒假前我无意之间看到了java9出现的新闻,网上查询到原来源码就隐 ...

  7. SSAS 后端数据库访问模块中存在错误。 为绑定指定的大小太小,导致一个或多个列值被截断。

    在处理AS的过程中报错如上,经排查发现原因为数据库 “工号” 字段长度过长导致. 因为我的字段内容基本是人名加工号:张三/1001 不曾想有用户录入非正常数据 :张三/100/1001 这样导致我截取 ...

  8. vs2012升级vs2017后的一些坑

    异常信息:未能加载文件或程序集"System.Web.Helpers... 未能加载文件或程序集"System.Web.Helpers, Version=2.0.0.0, Cult ...

  9. 【洛谷3865】 【模板】ST表(猫树)

    传送门 洛谷 Solution 实测跑的比ST表快!!! 这个东西也是\(O(1)\)的,不会可以看我上一篇Blog 代码实现 代码戳这里

  10. QQ现状深度剖析:你还认为QQ已经被微信打败了吗?

    本文来自“人人都是产品经理”公众号作者栗栗粥的原创分享. 1.前言   移动端的时代里,微信占据了社交领域的半壁江山,不得不让人想起曾经PC时代里的王者“QQ”,微信的爆发和QQ的停滞让很多人认为微信 ...