Git 指北
一、Git 简史
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
Git 系统制订的若干目标:
- 速度
- 简单的设计
- 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
- 完全分布式
- 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统
二、版本管理控制工具演进
2.1 集中式与分布式
2.2.1 集中式版本管理
集中式版本管理系统中,
- 中央服务器集中管理版本仓库, 保存所有文件的修订版本,
- 客户端协同工作时连接到服务器,取出最新文件或提交更新,本地工作区只有当前文件快照。
- 缺点是如果发生服务器故障, 所有客户端将无法提交,还有可能丢失所有版本变更历史。
2.1.2 分布式版本管理
分布式版本管理系统中,
- 客户端并不只提取最新版本文件快照,而是把整个代码仓库完整的克隆下来。
- 服务器发生故障, 可以通过任何一个镜像仓库恢复。
2.2 不同版本管理工具对待数据的方法
2.2.1 其他的版本管理工具
其他工具将保存的信息看作是基本文件和随时间逐步累积的差异。
2.2.2 Git
GIT 每次更新都对全部文件制作一个快照(本次提交没有修改的文件,只保存一个指向该文件之前存储的链接。如 version 3 版本中的 A1,用虚线框表示), 然后保存快照的索引。
三、Git 介绍
3.1 Git 工作流程
3.1.1 工作区、暂存区和版本库
工作区
工作目录是用户实际工作的地方,是对项目某个版本提取出来的内容。这些从仓库的压缩数据库中提取出来的文件,供用户使用或修改。
暂存区域
暂存区域其实是一个文件,一般存放在 “.git目录下” 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
版本库
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
项目文件夹中文件的结构
工作区、暂存区和本地仓库通常放置在项目根目录下,如上图所示,
- 用户工作文件是用户使用和修改的项目文件
- 暂存区放置在 . git 文件夹
- .git 文件夹其实就是存放版本管理的元数据和对象数据库的本地仓库
- .gitignore 用于配置需要通过 Git 管理的内容。
3.1.2 Git 工作流程
基本的 Git 工作流程如下:
- 新建项目,工作文件夹下创建本地仓库(.git 文件夹)
- 暂存文件,将文件的快照放入暂存区
- 提交更新,将暂存区快照永久性存储到本地仓库,产生新的文件版本
- 推送到远程仓库,将本地仓库更新同步到远程仓库
- 拉取更新, 将他人推送到远程仓库的更新拉取到本地工作区
- 克隆远程仓库,建立远程仓库本地镜像,用户可以开展工作
3.2 版本管理文件状态
状态说明
状态 | 说明 |
---|---|
Untracked (未跟踪) | 在工作区新建的文件, 未被纳入 Git 版本管理 |
Staged(暂存) | 文件快照放入暂存区 |
Unmodified(未修改) | 文件提交到版本库后,文件当前为未修改 |
Modified(已修改) | 对文件再次修改后的状态 |
四、安装配置
4.1 安装
Git 下载地址: https://git-scm.com/download
4.2 Git 基本配置
4.2.1 配置文件存放位置
Linux 变量存储在三个不同的位置:
- /etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量。
- ~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。 可以传递 --global 选项让 Git 读写此文件。
- 当前使用仓库的 Git 目录中的 config 文件(就是 .git/config):针对该仓库。
每一个级别覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。
Windows 系统
- 一般情况下是 C:\Users\$USER\.gitconfig 文件。
4.2.2 配置
用户信息
当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改。
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
如果使用了 --global
选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global
选项的命令来配置。
文本编辑器
当 Git 需要你输入信息时会调用它。 如果未配置,Git 会使用操作系统默认的文本编辑器,通常是 Vim。
如果你想使用不同的文本编辑器,例如 Emacs,可以这样做:
$ git config --global core.editor emacs
如果要改成 notepad 可以这样做:
$git config --global core.editor notepad
检查配置
如果想要检查你的配置,可以使用 git config --list
命令来列出所有 Git 当时能找到的配置。
$git config --list
或查看某项具体配置:
$git config <key>