Git入门教程
1. 基本原理
概述
Git是分布式版本控制系统(Distributed Version Control System,简称 DVCS)。 在这类系统中,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。[1][1]
Git 对待数据的方法是把数据看作是对小型文件系统的一组快照。每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。 为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个 快照流。[2][2]
三种状态
Git 有三种状态,你的文件 ( 已跟踪的文件 ) 可能处于其中之一:已提交(committed)、已修改(modified)和已暂存(staged)。 已提交表示数据已经安全的保存在本地数据库中。 已修改表示修改了文件,但还没保存到数据库中。 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。由此引入 Git 项目的三个工作区域的概念:Git 仓库、工作目录以及暂存区域。[2][2]
Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
工作目录是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作"索引",不过一般说法还是叫暂存区域。
基本的 Git 工作流程如下:
- 1.在工作目录中修改文件(文件状态:已提交->已修改)。
- 2.暂存文件,将文件的快照放入暂存区域(文件状态:已修改->已暂存)。
- 3.提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录(文件状态:已暂存->已提交)。
如果 Git 目录中保存着的特定版本文件,就属于已提交状态。 如果作了修改并已放入暂存区域,就属于已暂存状态。 如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。 [2][2]
记录每次更新到仓库
工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪。 已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改,已修改或已放入暂存区。 工作目录中除已跟踪文件以外的所有其它文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有放入暂存区。 初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态。
编辑过某些文件之后,由于自上次提交后你对它们做了修改,Git 将它们标记为已修改文件。 我们逐步将这些修改过的文件放入暂存区,然后提交所有暂存了的修改,如此反复。[3][3]
远程仓库
远程仓库是指托管在因特网或其他网络中的你的项目的版本库。多人协作时是本地仓库与远程仓库之间拉取数据或提交数据。
2. Git 常用命令
-
git clone [url]
: 远程仓库克隆到本地 ( 克隆Git 仓库服务器上的几乎所有数据 ) -
git branch -r
: 列出远程分支 -
git checkout [branch name]
: 切换分支 -
git status
: 检查当前文件状态 -
git add [file]
:开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等 -
git commit [file]
: 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。[file]选项缺省则提交暂存区域的所有文件。 -
git pull
:从远程仓库获取更新到本地仓库 -
git push
:将本地仓库推送到远程仓库
参考资料:
Git Book
[1] 1.1 起步 - 关于版本控制(https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%85%B3%E4%BA%8E%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6)
[2] 1.3 起步 - Git 基础(https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-Git-%E5%9F%BA%E7%A1%80)
[3] 2.2 Git 基础 - 记录每次更新到仓库(https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E8%AE%B0%E5%BD%95%E6%AF%8F%E6%AC%A1%E6%9B%B4%E6%96%B0%E5%88%B0%E4%BB%93%E5%BA%93)