Git 的简介 | 青训营笔记

125 阅读5分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记。

基本概念解析

  1. 代码托管
    负责管理公司内数十万的代码仓库,并在这之上对代码管理的相关功能进行迭代,提升研发活动的效率及质量。
  2. 代码智能
    提供更准确高效的代码搜索能力和代码导航能力,支持多种场景下的代码跳转,帮助用户更高效的去阅读代码。
  3. 代码分析 提供一种代码检查能力,目的是在整个研发流程中自动的发现并反馈代码中存在的代码结构、代码漏洞、代码风格等问题。
  4. 持续集成 一种软件开发实践,团队成员频繁将他们的工作成果集成在一起。每次提交后,自动触发运行一次包含自动化验证集的构建任务,以便能尽早发现集成问题。
  5. Cloud IDE 一个开箱即用的云端开发环境,支持node/python/go/java/C++等多种编程语言。你可以在云端开发环境中编写、编译、运行和调试你的项目。

为什么要学习git

  1. 协同工作 业界绝大多数公司都是基于Git进行代码管理,因此Git是一个程序员的必备技能。
  2. 开源社区 目前绝大多数的开源项目都是基于Git维护的,参与这些项目的开发都需要使用Git。

版本控制

Git是什么?

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

版本控制是什么?

一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。

为什么需要版本控制?

更好的关注变更,了解到每个版本的改动是什么,方便对改动的代码进行检查,预防事故发生;也能够随时切换到不同的版本,回滚误删误改的问题代码。

版本控制的类型

版本控制类型代表型工具解决的问题
本地版本控制RCS本地代码的版本控制
集中式版本控制SVN提供一个远端服务器来维护代码版本,本地不保存代码版本,解决多人协作问
分布式版本控制Git每个仓库都能记录版本历史,解决只有一个服务器保持版本的问题

本地版本控制

  1. 最初的方式
    通过本地复制文件夹,来完成版本控制,一般可以通过不同的文件名来区分版本。
  2. 解决方案
    开发一些本地的版本控制软件,其中最流行的是RCS。
  3. 基本原理
    本地保存所有变更的补丁集,可以理解成就是所有的Diff,通过这些补丁,我们可以计算出每个版本的实际的文件内容。
  4. 缺点
    RCS这种本地版本控制存在最致命的缺陷就是只能在本地使用,无法进行团队协作,因此使用的场景非常有限,因此衍生出了集中式版本控制。

集中版本控制

  1. 代表性工具
    SVN
  2. 基本原理
    提供一个远端服务来保存文件,所有用户的提交都提交到该服务器中;
    增量保存每次提交的Diff,如果提交的增量中和远端现存的文件存在冲突,则需要本地提前解决冲突。
  3. 优点
    学习简单,更容易操作;
    支持二进制文件,对大文件支持更友好.
  4. 缺点
    本地不存储版本管理等概念,所有提交都只能联上服务器后才可以提交;
    分支上的支持不够好,对于大型项目团队合作比较困难;
    用户本地不保存所有版本的代码,如果服务端故障容易导致历史版本的丢失。

分布式版本控制

  1. 代表性工具
    Git
  2. 基本原理
    每个库都存有完整的提交历史,可以直接在本地进行代码提交;
    每次提交记录的都是完整的文件快照,而不是记录增量;
    通过Push等操作来完成和远端代码的同步.
  3. 优点
    分布式开发,每个库都是完整的提交历史,支持本地提交,强调个体;
    分支管理功能强大,方便团队合作,多人协同开发;
    校验和机制保证完整性,一般只添加数据,很少执行删除操作,不容易导致代码丢失.
  4. 缺点
    相对SVN更复杂,学习成本更高
    对于大文件的支持不是特别好(git-lfs工具可以弥补这个功能)

Git发展历史

作者

Linus Torvalds(就是Linux这个项目的作者,同时也是Git的作者)

开发原因

怀疑Linux团队对BitKeeper(另一种分布式版本控制系统,专有软件)进行逆向工程,BitKeeper不允许Linux团队继续无偿使用。因此决定自己开发一个分布式版本控制系统。

开发时间

大概花了两周时间,就完成git的代码第一个版本,后续Linux项目就开始使用Git进程维护。

Github

全球最大的代码托管平台,大部分的开源项目都放在这个平台上。

Gitlab

全球最大的开源代码托管平台,项目的所有代码都是开源的,便于在自己的服务器上完成Gitlab的搭建。

Gerrit

有Google开发的一个代码托管平台,Android这个开源项目就托管在Gerrit之上

总结

通过学习Git这个分布式版本控制工具,提高开发效率,方便团队合作,多人协同开发。