配置管理是规范化开发的必由之路,随着开源社区的蓬勃发展,传统的集中式配管方式显然不能保障开源社区 “ 集市 ” 开发模式的高效运行,分布式配管需求日益迫切,在开源界大神的努力下,世界上最先进的分布式版本控制系统 — Git 应运而生。Git 名为 “无用之人”,实则出类拔萃。使用 Git ,每个人的计算机上都可以拥有一个完整的版本库,既保证的多人开发工作的并行不悖,又大大提升了版本库的安全性。目前,Git 已远不局限于开源社区,亦是各大企业研发中配管工具的不二之选。
Git 带来强大功能的同时,也相较以往配管工具在使用上引入了更高的复杂性。其脱胎于 linux,以 command line 操作模式为核心,引入了一些新的概念,命令也较多。对其进行清晰梳理是高效使用的关键。
1. Git 概念模型
理解 Git 设计的概念模型是使用 Git 的基础。Git 概念分为 4 级结构,分别是工作区、暂存区、本地库、远程库。工作区是文件(不局限于代码)编写修改的前沿阵地;版本库是配管工作的真正核心,集中式配管一般只有一个库(如VSS),而分布式配管将版本库分为本地库和远程库,分别在本地和远程主机上存放了开发库,且每个库中都有不同的分支,代表不同的开发条线。暂存区是 Git 中很有特点的概念,它是工作区与本地库之间的缓冲区,工作区编写、修改的文件只有先放入暂存区,才能加入本地库,进而推送至远程库。
从操作模式上可分为本地操作和远程操作两个层次。本地操作是最基本的层次,完成本地版本库的配置管理工作。远程操作则体现分布式的特点,完成本地版本库与远程版本库之间的数据交换。
2. Git 的本地操作
Git 本地操作是配管的基础。
- 建库 init
- 本地库状态查询 status
分支管理是 Git 的特色之一。
- 查看 branch [-a]
- 创建 branch
- 删除 branch -d
-
切换 checkout
- 创建并切换 checkout -b
- 合并某分支到当前分支 merge
3. Git 的远程操作
Git 远程操作完成本地版本库与远程版本库的数据交互。
1)远程主机管理
远程版本库部署与远程主机上,对远程主机的管理是进行远程版本数据交换的基础。对远程主机管理包括添加、删除、重命名、状态查看等操作。
- 与远程版本库建立连接,在本地添加远程主机
remote add < remote hostname > < remote address >
git remote add origin git@github.com:zhangsan/examplegit.git
- 删除远程主机
remote rm < remote hostname >
- 重命名远程主机
remote rename < old-remote hostname > < new-remote hostname >
- 删除远程主机
- 查看远程主机状态
remote 或 remote -v (查看详细信息)
2)数据获取
与远程主机建立连接后,即可进行版本库的数据交换。本地库和远程库均由多个分支组成,因此,远程数据交换也是以分支对应为基础的。如果本地库与远程库存在分支间的对位追踪关系,则两个对应分支间直接进行数据交换;如果本地库与远程库之间尚未建立分支对位追踪关系,则可通过指令新建分支间对位关系。
- fetch 命令 — 静默获取,不影响本地代码
fetch < remote hostname >
取回远程主机所有分支的更新。
fetch < remote hostname > < remote branchname >
取回远程主机< remote hostname >中的< remote branchname >分支,并在本地默认建立名为
< remote hostname >/< remote branchname >
的新分支,该分支与本地建立其他分支一样,可进行 merge 等操作。
(新分支建立并不影响本地既有代码)fetch < remote hostname > < remote branchname > : < new branchname >
取回远程主机< remote hostname >中的< remote branchname >分支,并在本地建立名为< new hostname > 的新分支,该分支与本地建立其他分支一样,可进行 merge 等操作。
-
pull 命令 — 积极获取,主动合并
pull < remote hostname > < remote branchname > : < local branchname >
取回远程主机< remote hostname >中的< remote branchname >分支,并与本地< local branchname >分支合并。
如果与本地当前分支合并,则参数可以省略。
pull 命令相当于 fetch + merge 的组合。 -
clone 命令 — 全库复制
clone < remote lib address >
clone 命令进行远程主机整个版本库的克隆。clone,顾名思义,会在本地建立一个与远程主机一模一样的库,此时,所有本地分支默认与远程主机的同名分支,建立追踪关系。
相对其他远程管理命令,clone 命令尤其与众不同,clone 可以在本地没有任何 git 库的情况下直接将远程 git 库拷贝下来,即 clone 命令的使用不需要在操作文件夹内预先建立 git 库,clone 下来的版本库中自带 git 库(版本库文件夹中自带 .git 子文件夹,git 自动把本地的 master 分支和远程的 master 分支对应起来,远程仓库默认名为 origin),而其他远程管理操作使用前,必须在操作文件夹内已存在 git 库。
clone 指令是下载使用众多 git 开源库的最常用指令。
3)数据推送
-
push 命令 — 本地更新推送至远程主机
push < remote hostname > < local branchname > : < remote branchname >
将本地< remote branchname > 的更新,推送至远程主机 < remote hostname > 中 < remote branchname > 分支。
如远程分支与本地分支存在追踪关系,则可省略相关参数。
4)分支对应追踪关系(本地分支 vs. 远程分支)
对应关系设置
git 的远程操作是以分支对应(分支映射)为基础的,正确设置本地分支与远程分支的对应是 git 高效远程操作的基础。git 使用专门的指令设置分支之间的映射关系。
git branch –set-upstream < local branchname > < remote branchname >
已有对应关系查看
git branch -vv
4. Git 命令使用特点
- Git 命令多,使用灵活,往往一个需求可以有多种 Git 命令组合完成。上文仅仅对 Git 的几个常用命令进行总结,具体命令选择需结合实际情况,灵活组合;
- Git 命令使用采用二级命令格式,即 Git (主命令) + Command (辅助命令) + Parameter 格式,这一点与 openssl 的使用十分类似。