Git 小调料

配置管理是规范化开发的必由之路,随着开源社区的蓬勃发展,传统的集中式配管方式显然不能保障开源社区 “ 集市 ” 开发模式的高效运行,分布式配管需求日益迫切,在开源界大神的努力下,世界上最先进的分布式版本控制系统 — Git 应运而生。Git 名为 “无用之人”,实则出类拔萃。使用 Git ,每个人的计算机上都可以拥有一个完整的版本库,既保证的多人开发工作的并行不悖,又大大提升了版本库的安全性。目前,Git 已远不局限于开源社区,亦是各大企业研发中配管工具的不二之选。

Git 带来强大功能的同时,也相较以往配管工具在使用上引入了更高的复杂性。其脱胎于 linux,以 command line 操作模式为核心,引入了一些新的概念,命令也较多。对其进行清晰梳理是高效使用的关键。

1. Git 概念模型

理解 Git 设计的概念模型是使用 Git 的基础。Git 概念分为 4 级结构,分别是工作区、暂存区、本地库、远程库。工作区是文件(不局限于代码)编写修改的前沿阵地;版本库是配管工作的真正核心,集中式配管一般只有一个库(如VSS),而分布式配管将版本库分为本地库和远程库,分别在本地和远程主机上存放了开发库,且每个库中都有不同的分支,代表不同的开发条线。暂存区是 Git 中很有特点的概念,它是工作区与本地库之间的缓冲区,工作区编写、修改的文件只有先放入暂存区,才能加入本地库,进而推送至远程库。

url-1

从操作模式上可分为本地操作和远程操作两个层次。本地操作是最基本的层次,完成本地版本库的配置管理工作。远程操作则体现分布式的特点,完成本地版本库与远程版本库之间的数据交换。

2. Git 的本地操作

Git 本地操作是配管的基础。
* 建库 init
* 本地库状态查询 status

url-2

分支管理是 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 (查看详细信息)

url-3

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 的使用十分类似。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注