软件构造笔记 02 (Git 总结)

  • Git仓库结构
  • 对象图(Object graph)
  • Git常用命令


Git仓库结构

Git仓库分为三个区:

  • 版本库: 本地的CMDB
  • 暂存区: 隔离工作目录和Git仓库
  • 工作区: 本地文件系统

git仓库的内容可以导出到工作区,程序员对工作区的内容修改临时存储在暂存区,完成一定量修改后可以将暂存区的内容提交至git仓库,据此文件分为三类:已修改、已暂存、已提交。内容提交后git仓库中仍保存着原先的程序内容,相关版本信息存储在版本库中,示意图如下:

git 仓库规划 git仓库结构_对象图

对象图(Object graph)

对象图即版本之间的演化关系图,以git项目为单位传递时,会传递整个对象图。

变化管理: 对于任何合理大小的项目,大多数文件都不会改变,因此存储文件的多余副本是一种浪费,所以Git对每个版本对每个单独的文件只存储一次,允许多个提交(commit)共享该副本。特别的,传统VCS以行为单位存储版本之间的变化,而git存储发生变化的文件而非代码行,不变化的文件不重复存储。

git 仓库规划 git仓库结构_对象图_02

节点: 每次commit操作会在对象图中添加一个节点,节点会保存指向具体文件存储的指针以实现上述的变化管理,同时记录一些日志信息,HEAD指向当前的commit。

git 仓库规划 git仓库结构_对象图_03


边: 对象图中的一条边A → B表示在版本B的基础上,形成了版本A,可分为三种情况:

  • 一般情况: 一个节点指向一个父亲
  • 分支: 多个节点指向同一个父亲
  • 合并: 一个节点指向多个父亲

git 仓库规划 git仓库结构_工作区_04


分支管理: 分支就是指向一个commit节点的指针,通过建立新的分支可以在版本控制下对对象进行复制,以便可以沿两个分支平行地进行修改,并且可以随时通过分支合并操作合并不同的分支。

Git常用命令

命令

说明

git init

初始化仓库

git clone

拷贝一份远程仓库

git add

添加文件到仓库

git status

查看仓库当前的状态,显示有变更的文件

git diff

比较文件的不同,即暂存区和工作区的差异

git commit

提交暂存区到本地仓库

git rm

删除工作区文件

git mv

移动或重命名工作区文件

git log

查看历史提交记录

git blame < file >

以列表形式查看指定文件的历史修改记录

git remote

远程仓库操作

git fetch

从远程获取代码库

git pull

下载远程代码并合并

git push

上传远程代码并合并

git branch (branchname)

创新分支

git checkout (branchname)

切换分支

git merge

合并分支

git branch

列出本地分支

git branch -d (branchname)

删除分支