Understand Git Concept (理解 Git 的 概念)

什么是 版本控制系统

Git 是一种 Source Code Version Control System (VCS 版本控制系统). 版本控制系统的核心功能是:

  1. 能够将代码库回滚到任意一个之前的状态.

  2. 允许多人合作, 在同一个代码库上工作, 并轻松的合并大家的工作. 特别是多个人对同一个文件的修改.

Git 不仅仅可以用来做代码版本控制, 还可以用来作任何系统的版本控制. 因为代码大多数是纯文本文件, 是一行一行的. 体积小, 可以用增量来表示修改. 而对于图片, Word, Excel 这一类的文件, 为了保存修改, 需要保存每一个版本的备份, 会导致文件体积很容易变得很大. Git 只是比较适合用于代码版本控制. 用来写书, 写博客, 管理新闻媒体稿件都很合适.

什么是 Git

Git 是一个 VCS, 也是目前最流行的 VCS. Git 本身包含两个组件:

  1. 安装在本地机器上的 git 和 git 命令行工具. 用户可以选择性的安装 GUI 图形界面攻击. 我们用它来 添加, 修改, 删除 我们的代码文件.

  2. 安装在远程服务器上的 git server. 用于永久保存在云端并有多个备份, 为多位开发者提高代码的下载和提交服务.

什么是 Repo (代码库)

版本控制的对象叫做 Repository. 由许多文件和文件夹组成.

Git 是怎么实现 版本控制 的? (commit 又名 提交)

repo 的修改操作有 add 增加, update 修改, delete 删除 三种. 其他的例如 重命名, 移动都是以上三种操作的排列组合. 这三种 最小操作 叫做 原子操作.

每一次对 repo 的修改都是一系列的三种原子操作的集合. 将这些原子操作打包成为一次 提交, 又名 commit. 每次 commit 都会改变 repo 的版本. 也就是说, repo 的改变的最小单位是 是 commit.

每一个 commit 有一个 sha1 hash, 是全世界唯一的, 简称 hash. git 可以用 hash 来精准定位到某一个具体的版本.

之后我们说 “某一个 commit” 同时也指的是 “该次 commit 所做的所有更改”.

Git 是怎么实现多人合作的? (branch 又名 分支)

你可以基于任何具体的版本创建一个 branch, 然后你新的 commit 就会在这个 branch 上进行. 每一个 branch 有一个名字. 通常一个代码库的第一个, 也是默认的 branch 名字叫 master. 每一个 branch 都有一个 base branch, 通常开发中我们会从 master 进行 branching. 当然我们也可以以其他的 branch 作为 base 进行 branching.

branch 是名词, 指一个具体的分支. 而 branching 是动词, 指从某个 commit 进行分支的动作.

多个开发者可以各自创建自己的 branch, 分别负责不同的修改, 然后将这些修改合并到 master 上. 如果两个人对同一个文件的一段代码进行了修改, 那么就会产生 conflict, 此时就要 人工 resolve conflict 才能合并. 这个合并的操作叫做 merge.

merge 之前, 通常要由 branch 的作者之外的人进行审核. 这个审核的过程叫做 code review.

Git 服务器的作用是什么

服务器是代码库的事实标准. 由于有多人参与了开发, 所以我们需要一个公认的事实标准.

Git 允许你将所有代码下载到本地, 这个操作叫 clonepull (两者有不同). 然后你可以在断网的情况下进行开发. 等有网的时候再将修改推送到服务器, 这个操作叫 push.

通常你需要将 Git 服务器部署到一台或多台虚拟机上 (多台是用来做冗余备份的), 然后你的个人电脑要能联网到服务器才能使用 Git. 而 GitHub 就是世界上最大的 Git 服务器托管服务提供商, 无需设置服务器就可以使用 Git.

总结

以上就是 Git 的核心概念.