Git-总结篇-给我们带来了什么?

前言

  最初个人并不认为有必要专门准备一片文章记录Git的优势或者如题“给我们带来了什么”这样的主体,但是想到这是Git相关学习和使用的总结,所以决定单独记录一篇文章;

本文仅记录本人使用学习Git中实际接触过的范围,并且会持续更新;

Smart的本源

smart;有道翻译:聪明的;巧妙的;敏捷的;厉害的;潇洒的;剧烈的;时髦的;

  在使用Git恰好一年的时间节点上开始准备这篇文章,现在回想Git的直观感受,一如既往还是最初的印象,聪明的、巧妙的、敏捷的、厉害的;
  在总结Git的优势的之前,有必要先了解一下Git的实现逻辑和特性(个人建议至少要了解),并且也给本文定一下规范,在列举各项优势的同时提供当前优势的支撑点(即实现因素)和场景案例(切身实际会给我们带来的好处),这样总结才会更有意义;

特性

Git的底层实现方式决定了自己的特性:

文件快照存储方式

  • 以文件快照实现的底层文件存储系统;
  • 通过对源文件的索引,不重复记录无变更的文件,实现在切换版本时无需额外的差异计算过程。
  • 通过指针实现分支管理,将分支的创建和其他操作的代价降到很低;
  • 上述的方式将版本操作的代价降到了最低,达到了轻量级的效果;

分布式版本控制

  • Git中每个克隆(clone)的版本库都是平等的。你可以从任何一个版本库的克隆来创建属于你自己的版本库,同时你的版本库也可以作为源提供给他人,只要你愿意。
  • Git的每一次提取操作,实际上都是一次对代码仓库的完整备份。
  • 提交完全在本地完成,无须别人给你授权,你的版本库你作主,并且提交是独立不受干扰的。
  • 甚至基于旧版本的改动也可以成功提交,提交会基于旧的版本创建一个新的分支。
  • Git的本地操作不会被打断,冲突会直到本地与远程库进行交互时才会提示。
  • Git上述的特性决定了对离线使用的支持,只需要在与远程库交互式保证网络即可;
  • 冲突解决不再像是SVN一样的提交竞赛,而是在需要的时候才进行合并和冲突解决。
  • 可以为 Git 版本库进行授权:谁能创建版本库,谁能向版本库PUSH,谁能够读取(克隆)版本库
  • Git提供 rebase 命令,可以让你的改动看起来是基于最新的代码实现的改动
  • Git 的集中式工作模式非常灵活
  • Git 也可以模拟集中式的工作模式
  • Git 有更多的工作模式可以选择,远非 Subversion可比

特点

同样,Git的特性决定了自己特殊的特点;

快捷

  • 快速
  • 方便
    首当其冲当然是在操作上带来的提速;
    体现在常用的版本切换操作(提交,回退,切换分支,以及合并分支等)
支撑点
  • 文件快照存储系统和分支指针
  • 并且受益于简洁明了的命令行和Idea界面良好的支持,达到了快速和方便;
场景案例
  • 分支版本的快速操作;w\
  • 分支的快速切换;

安全

  • 节点互备
  • 远程服务备份
支撑点
  • 分布式管理
场景案例
  • 规避集中式系统单点故障

离线工作

  • 本地独立操作版本,无需网络支持;
支撑点
  • 分布式管理
场景案例
  • 不再对网络,无论是外网还是局域网的强依赖

独立工作

  • 本地有完整的版本库源,本地操作不受任何其他服务器节点影响
支撑点
  • 分布式管理
  • 分支管理
场景案例
  • 不论是开发成员之间还是单开发成员的不同分支管理更能够保持自主的独立性
  • 各分支分支的起始、结束版本以及合并时机更支持自由控制
  • 同样,即使在可预见有冲突的情况下,也可以灵活自主的选择合并冲突的时机,从而也降低了

灵活工作

  • 不论本地库和远程的关联还是本地分支和远程分支的关联都可以方便的进行切换
  • 可以使用Git的Submodule管理对模块项目中子模块进行区分管理
支撑点
  • 分布式管理
  • 分支管理
场景案例
  • 本地库和远程库的关联随时切换,可以实现多对多的关系
  • 本地分支和远程分支的关联也是多对多,同一个本地分支可以推送至任意当前关联远程库的远程分支,也可以从任意远程分支进行拉取

不足

  • 权限管理很难控制,尤其是在多模块项目中很难处理开发人员仅有部分权限的问题;

总结篇

自由的工作方式

  • 自由的工作方式可以算是对上述特点的总结;
  • 虽然是分布式系统,但完全可模拟集中式模式管理;
  • 低成本的分支操作,激活了分支概念的实用性;是分支的作用最大化;

友好的环境支持

  • 当前Git已成为并且会相当长时间内持续作为版本控制的不二之选,并且除了GitHub之外,有了更多优秀的远程库开放服务出现,比如码云、阿里云Code等等,我们不再需要顾虑远程服务的搭建和维护;
  • 使用Git,会给开发人员在线分享或学习时提供便利,每个开发人员应该尽快加入Git;

参考&引用文献

《Git的优点》:https://www.aliyun.com/jiaocheng/316143.html(阿里云社区)
《SVN与Git的比较》:https://www.cnblogs.com/Sungeek/p/9152223.html(cnblog)

你可能感兴趣的:(VersionControl,Git,进行曲)