软件构造笔记 02 (Git 总结)
- Git仓库结构
- 对象图(Object graph)
- Git常用命令
Git仓库结构
Git仓库分为三个区:
- 版本库: 本地的CMDB
- 暂存区: 隔离工作目录和Git仓库
- 工作区: 本地文件系统
git仓库的内容可以导出到工作区,程序员对工作区的内容修改临时存储在暂存区,完成一定量修改后可以将暂存区的内容提交至git仓库,据此文件分为三类:已修改、已暂存、已提交。内容提交后git仓库中仍保存着原先的程序内容,相关版本信息存储在版本库中,示意图如下:
对象图(Object graph)
对象图即版本之间的演化关系图,以git项目为单位传递时,会传递整个对象图。
变化管理: 对于任何合理大小的项目,大多数文件都不会改变,因此存储文件的多余副本是一种浪费,所以Git对每个版本对每个单独的文件只存储一次,允许多个提交(commit)共享该副本。特别的,传统VCS以行为单位存储版本之间的变化,而git存储发生变化的文件而非代码行,不变化的文件不重复存储。
节点: 每次commit操作会在对象图中添加一个节点,节点会保存指向具体文件存储的指针以实现上述的变化管理,同时记录一些日志信息,HEAD指向当前的commit。
边: 对象图中的一条边A → B表示在版本B的基础上,形成了版本A,可分为三种情况:
- 一般情况: 一个节点指向一个父亲
- 分支: 多个节点指向同一个父亲
- 合并: 一个节点指向多个父亲
分支管理: 分支就是指向一个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) | 删除分支 |