[ Git 的前世今生 | 青训营笔记 ]

98 阅读3分钟

一. Git的正确使用姿势与最佳实践

1.1为什么要学习Git
  • 协同工作

业界绝大多数公司都是基于Git进行代码管理,因此Git是一个程序员的必备技能

  • 开源社区

目前绝大多数的开源项目都是基于Git维护的,参与这些项目的开发都需要使用Git

1.2为什么要设计这门课程?
  • 常见问题
  1. 入职后按照文档进行Git配置,但是配置后依然拉取代码有问题,缺少自己排查配置问题的能力
  2. 研发流程中进行一些异常操作,不符合研发规范,不清楚保护分支,MR / PR等概念
  • 课程目标
  1. 学习基本的Git命令,并了解原理,在遇到Git相关问题时,能自行排查并解决
  2. 了解研发流程中的基本概念和规范,学会正确的使用Git

二. Git 是什么

2.1 Git 是什么?

Git是一个免费的开源分布式版本控制系统,旨在以快速和高效的方式处理从小型到超大型项目的所有内容。

2.2版本控制是什么?

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

2.3为什么需要版本控制?

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

2.4.1本地版本控制
  • 最初的方式

通过本地复制文件夹,来完成版本控制,一般可以通过不同的文件名来区分版本

  • 解决方案

开发了一些本地的版本控制软件,其中最流行的是RCS

  • 基本原理

本地保存所有变更的补丁集,可以理解成就是所有的Diff,通过这些补丁,我们可以计算出每个版本的实际的文件内容

1.1.2集中版本控制
  • 代表性工具: SVN
  • 基本原理:
  1. 提供一个远端服务来保存文件,所有用户的提交都提交到该服务器中
  2. 增量保存每次提交的 Diff,如果提交的增量中和远端现存的文件存在冲突,则需要本地提前解决冲突

优点:

  1. 学习简单,更容易操作
  2. 支持二进制文件,对大文件支持更友好

缺点:

  1. 本地不存储版本管理的概念,所有提交都只能联上服务器后才可以提交
  2. 分支上的支持不够好,对于大型项目团队合作比较困难
  3. 用户本地不保存所有版本的代码,如果服务端故障容易导致历史版本的丢失
1.1.3分布式版本控制
  • 代表性工具: Git
  • 基本原理:
  1. 每个库都存有完整的提交历史,可以直接在本地进行代码提交
  2. 每次提交记录的都是完整的文件快照,而不是记录增量
  3. 通过Push等操作来完成和远端代码的同步

优点:

  1. 分布式开发,每个库都是完整的提交历史,支持本地提交,强调个体
  2. 分支管理功能强大,方便团队合作,多人协同开发
  3. 校验和机制保证完整性,一般只添加数据,很少执行删除操作,不容易导致代码丢失

缺点:

  1. 相对SVN更复杂,学习成本更高
  2. 对于大文件的支持不是特别好(git-Ifs工具可以弥补这个功能)

三. 个人感悟

  1. 不能只知其然,要知其所以然
  2. 要多思考,多想,多去理解
  3. 多敲代码