Git 必知必会

基础概念与配置

像 CVS、Subversion、Perforce等版本控制系统存储的是每个文件与初始版本的差异

而Git更像是把数据看做是对小型文件系统的一组快照,存储的是项目随时间改变的快照

Git基础概念- SHA1

SHA1

  • 所有用来表示项目历史信息的文件,是通过一个40个字符的“对象名”来索引
  • “对象名”看起来像这样:82e777898ff32f0be3c247b2a7132ac90f8f99cf

优点

  • Git只要比较“对象名”,就可以很快的判断两个对象是否相同
  • 因为在每个仓库的“对象名”的计算方法都完全一样,如果同样的内容存在两个不同的仓库中,就会存在相同的“对象名”下。
  • Git可以通过检查对象内容的SHA1的哈希值和“对象名”是否相同,来判断对象内容是否正确。

Git基础概念-blob、tree、commit、tag

blob: 用来存储文件数据(文件内容而非文件名),通常是一个文件。

tree: 有点像一个目录,它管理一些“tree”或者“blob”(就像文件和子目录)

commit:指的是Git的一个提交对象。指向一个“tree”,并且带有相关的描述信息。

tag:用来标记某一个commit的方法。

Git基础概念-对象模型

可以类比为文件系统

Git基础概念-三个区域

工作区工作目录是对项目的某个版本独立提取出来的内容。

暂存区是一个文件,保存了下次将提交的文件列表信息,一般在Git仓库目录中。有时候也被称作“索引”,不过一般说法还是叫暂存区域。

Git仓库目录是Git用来保存项目的元数据和对象数据库的地方。

基本的Git工作流程

  1. 在工作目录中修改文件
  2. 暂存文件,将文件的快照放入暂存区域
  3. 提交更新,找到暂存区域的文件,将快照永久性存储到Git仓库目录。

Git首次配置&获取帮助

配置文件优先级(从高到低)

  • .git/config(只会影响当前仓库) -> ~/.gitconfig (会影响到所有仓库) -> /etc/gitconfig

必须配置

  • $ git config --global user.name "John Doe"
  • $git config --global user.email [email protected]

常用配置

  • $ git config --global core.editor vim (改编辑器)
  • $ git config --list (查看所有配置项)

获取帮助

  • git help config (查看 git config 命令的帮助文档)

Git首次配置-Gerrit SSH

Gerrit SSH

  • $ ssh-keygen -> 一路回车 -> cat ~/.ssh/id_rsa.pub -> 复制
  • Gerrit -> 账号 -> Settings -> SSH Public Keys -> Add Key -> 粘贴 -> Add

Git首次配置-Gerrit HTTP

Gerrit HTTP 避免每次输入用户名和密码

获取、修改并提交到仓库

clone with commit-msg hook 会自动添加 Change-Id footer(当前没有Change-Id,推送会失败)

可以通过 --reference 来加速clone,先检查本地 mirror仓库路径
例子:

git clone ssh://ssh地址 --reference /地址 

修改并提交到仓库 - 文件状态

文件地状态变化周期只有两种:已跟踪未跟踪
已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改已修改或已放入暂存区

工作目录中,除已跟踪文件以外的所有其它文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有放入暂存区。

修改并提交到仓库 - git status

$git status

修改并提交到仓库 - git add

git add -Agit add . 一样,会将new files, modified files 和 deleted files都放到暂存区。
git add -u new files需要手动放入暂存区。

修改并提交到仓库 - git diff

  • git diff 查看详细修改,工作区和暂存区比较
  • git diff --cached 暂存区和HEAD比较
  • git diff HEAD 工作区和HEAD比较

修改并提交到仓库 - git commit

每次准备提交前,先用 git status 检查一下,然后再运行提交命令 git commit

基本操作:
git clone -> 修改,会文件总共有四种状态 -> git status -> git diff 查看修改内容 -> git status -> git add -> git status 检查状态,没问题后 -> git commit 提交

历史穿梭

分支管理

解决冲突

远程版本库

Git Rebase

图解Git

基线升级实战演练

你可能感兴趣的:(Git 必知必会)