文章目录
前言
本文仅限于课程中一些简单的git概念以及操作
一、软件配置管理 SCM 与版本控制系统 VCS:
1.软件配置管理
软件配置管理:追踪和控制软件的变化
软件配置项(SCI):软件中发生变化的基本单元(例如:文件)
基线:软件持续变化过程中的“稳定时刻”(例如:对外发布的版本)
CMDB:配置管理数据库,存储软件的各配置项随时间发生变化的信息+基线
2.版本
版本:为软件的任一特定时刻(Moment)的形态指派一个唯一的
编号,作为“身份标识"
古老的版本控制方法:通过复制文件并修改文件名
本地版本控制系统:仓库存储于开发者本地机器无法共享和协作
集中式版本控制系统:仓库存储于独立的服务器,支持多开发者之间的协作
分布式版本控制系统:仓库存储于独立的服务器+每个开发者的本地机器
二、Git 的结构、工作原理
修改、暂存、提交
Object Graph:版本之间的演化关系图,一条边 A->B 表征了“在版本 B 的基础上作出变化,形成了版本 A”
与之前 commit 中未发生变化的文件,无需重复存储
三、命令
commit命令
git commit命令将所有分阶段的更改以及用户的简短描述保存在“提交”到本地存储库中。
Git希望保持提交尽可能小,所以每当你提交时,它不是盲目地复制整个目录。如果可能的话,Git会将一次提交压缩成从仓库的一个版本到下一个版本的一组修改,或者称为“Delta”。
Git同时记录着提交的时间,这就是为什么大多数提交都有祖先提交(ancestor commits),我们在图片中用肩头来表示这种关系。记录仓库的历史对于每个维护项目的人来说都有好处。
这只是一种简化的说法,需要理解的东西还有很多,但现在你可以仅仅将提交看作是项目的快照。提交是一个轻量级的操作,两个提交之间的切换很迅速。
提交是Git使用的核心。 您可以将提交视为项目的快照,在当前存储库中创建该项目的新版本。 提交的两个重要特征是:
1.您可以稍后撤回已提交的更改,或将项目还原到该版本
2.如果多个提交编辑了项目的不同部分,则即使提交的作者彼此不知道,它们也不会互相覆盖。 这是通过Dropbox或Google Drive之类的工具使用Git的好处之一。
一个commit的节点的树状结构如下图所示:
add命令
git add命令本身并不复杂,字面意义上理解是“将一个文件添加到项目中“。但是这种理解有缺陷,有时候可能会出现某个文件同时存在暂存区域 和 非暂存区域(staged and unstaged area)。如果是将文件加到项目中,那只应该存在于暂存区,不能暂存区域 和 非暂存区域同时存在。更好的理解方式为:添加内容到下一次提交中。
分支与合并
以下图为例:
多个commit指向同一个父亲称为分支
一个commit指向两个父亲称为合并
git branch
git branch 命令实际上是某种程度上的分支管理工具。 它可以列出你所有的分支、创建新分支、删除分支及重命名分支。
git checkout
git checkout 命令用来切换分支,或者检出内容到工作目录。(类似于cmd中的cd指令)
git merge
git merge 工具用来合并一个或者多个分支到你已经检出的分支中。 然后它将当前分支指针移动到合并结果上。
实例
下图为分支合并的具体操作
对远程仓库的操作
管理远程仓库:添加远程库、移除废弃的远程库、管理各式远程库分
支、定义是否跟踪这些分支。
git remote:获取当前配置的所有远程仓库;
git remote add [shortname] [url]:添加一个远程仓库;
git fetch:从远程仓库抓取数据到本地;
git pull: 从一个仓库或者本地的分支拉取并且整合代码;
git push [remote-name] [branch-name]:将本地仓库中的数据推送到远程
仓库;
git remote show [remote-name]:查看某个远程仓库的详细信息;
git remote rm:从本地移除远程仓库;