fetch 与引用规格(refspec)

本文想讨论 fetch 命令的细节。

假设我们用命令添加了一个远程版本库:

$ git remote add origin https://github.com/schacon/simplegit-progit

上述命令会在 .git/config 文件中添加几行,并在其中指定远程版本库名称(origin)、URL 和一个用于获取(fetch)操作的引用规格(refspec):

[remote "origin"]url = https://github.com/schacon/simplegit-progitfetch = +refs/heads/*:refs/remotes/origin/*

第1行:表示远程仓库的简称是 origin

第2行:指明远程仓库的 URL;

第3行:引用规格的格式由一个可选的 + 号和紧随其后的 <src>:<dst> 组成。其中

  • <src> 是一个模式(pattern),代表远程版本库中的引用;
  • <dst> 是远程版本库的引用在本地所对应的位置;
  • 开头的 + 号告诉 Git 即使在不能快进的情况下也要(强制)更新引用。

默认情况下,引用规格由 git remote add 命令自动生成, Git 会获取服务器中 refs/heads/ 下面的所有引用,并将它写入到本地的 refs/remotes/origin/ 中。

如果运行git fetch 命令,示意图如下(命令中的灰色部分是默认参数):

所以,如果服务器上有一个 master 分支,我们可以在本地通过下面这种方式来访问该分支上的提交记录:

$ git log origin/master
$ git log remotes/origin/master
$ git log refs/remotes/origin/master

上面的三个命令作用相同,因为 Git 会把它们都扩展成 refs/remotes/origin/master

如果想让 Git 每次只拉取远程的 master 分支,而不是所有分支,可以把上文引用规格的第 3 行修改为:

fetch = +refs/heads/master:refs/remotes/origin/master

这也是针对远程版本库 origingit fetch 操作的默认引用规格。

对于那些只执行一次的 fetch 操作,我们可以在命令行指定引用规格。 比如,只想将远程的 master 分支抓取到本地的 origin/master 分支,可以运行:

$ git fetch origin master:refs/remotes/origin/master

也可以在命令行中按照如下的方式抓取多个分支:

$ git fetch origin master:refs/remotes/origin/master \topic:refs/remotes/origin/topic
From git@github.com:schacon/simplegit! [rejected]        master     -> origin/master  (non fast forward)* [new branch]      topic      -> origin/topic

在这个例子中,对 master 分支的抓取操作被拒绝,因为它不是一个可快进的引用。 可以在引用规格之前指定 + 号来强制抓取。例如:

$ git fetch origin +master:refs/remotes/origin/master \topic:refs/remotes/origin/topic

上面的命令表示,对于远程仓库的 master 分支,会强制抓取到本地,但是对于 topic 分支仅允许快进式抓取。

你也可以在配置文件中指定多个用于 fetch 操作的引用规格。 如果想在每次抓取时都包括 masterexperiment 分支,可以这样写:

[remote "origin"]url = https://github.com/schacon/simplegit-progitfetch = +refs/heads/master:refs/remotes/origin/masterfetch = +refs/heads/experiment:refs/remotes/origin/experiment

参考资料

【1】 https://git-scm.com/book/zh/v2/

【2】《Git 高手之路》,人民邮电出版社

fetch 与引用规格(refspec)—— Git 学习笔记 23相关推荐

  1. Git 学习笔记:6 GitHub

    Git 学习笔记:6 GitHub 账户的 创建和配置 SSH访问 头像 邮件地址 两步验证 对项目做贡献 派生(fork)项目 GitHub 流程 创建合并请求 利用合并请求 合并请求的进阶用法 将 ...

  2. Git学习笔记使用记录

    文章目录 Git学习笔记 基本 配置环境 Install 初始化workspace Git 全局设置Global Configuration: 配置账户 创建项目仓库Create project re ...

  3. Git 学习笔记:5 分布式工作流程

    Git 学习笔记:5 分布式工作流程 分布式工作流程 集中式工作流 集成管理员工作流 司令官与副官工作流 工作流程总结 向一个项目贡献 提交准则 私有小型团队 John's Machine 私有管理团 ...

  4. ​​​​​​​Git学习笔记与IntelliJ IDEA整合

    2019独角兽企业重金招聘Python工程师标准>>> Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:htt ...

  5. Git学习笔记:分支管理3

    前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...

  6. Git 的安装与初次使用 —— Git 学习笔记 03

    Git 的安装与初次使用 -- Git 学习笔记 03 Git 的安装与初次使用 -- Git 学习笔记 03 安装 Git 在 Linux 上安装 在 Windows 上安装 初次运行 Git 前的 ...

  7. Git学习笔记与IntelliJ IDEA整合

    Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...

  8. Git学习笔记:中国版GItHub,码云

    前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...

  9. git学习笔记——Linux和Windows下git的基本操作

    git学习笔记--Linux和Windows下git的基本操作 github主页:https://github.com/Taot-chen 一.Linux环境 1.安装git sudo apt-get ...

最新文章

  1. oracle创建DBLink连接
  2. 史上最浅显易懂的Git教程!
  3. Bitcoin Unlimited发布BCH新版客户端1.5.0.0,包括CTOR和CDSV
  4. 【新年快乐】网易云信春节期间服务公告
  5. S3C2440的LCD编程
  6. 哈希表创建哈希表(Hash Table,也叫散列表),是根据键(Key)而直接访问在内存存储位置的数据结构.typedef enum{ HASH_OK-icoding-数据结构-C
  7. bzoj3456:城市规划
  8. android自定义矩形框,Android中ImageCropper矩形、圆形 裁剪框的实现方法
  9. 聊聊python文件
  10. oracle查看数据库文件大小
  11. sof与NIOS II的elf固件合并生成jic文件
  12. DIY手机万能红外遥控器
  13. SCU4438 Censor(审查员) (KMP算法与模拟栈的应用 || HASH表与模拟栈的结合)
  14. 云-腾讯云:实时音视频
  15. 我们提倡适量饮酒,但多少算是适量呢?
  16. 人工智能和嵌入式|大数据|云计算等的关系
  17. 带着问题重学 Java 并发编程
  18. AMBA总线—APB总线协议详解
  19. SQL 常用高级函数大全
  20. mysql获取上月月份_mysql 查询当前月份 上个月份 上上个月份

热门文章

  1. HDU 4505 小Q系列故事——电梯里的爱情
  2. 河北科技创新平台年报系统 - 头脑风暴会
  3. 【Unity3D自学记录】判断物体是否在镜头内
  4. android — JNI注册方法说明
  5. 拦截导弹 最长上升/下降子序列
  6. 1SGD、Momention原理
  7. 脑电信号特征提取常用算法(共空间模式CSP、小波变换DWT、功率谱密度PSD、AR模型)
  8. UEFI主板GPT方式安装CentOS 6.4
  9. CentOS x64上Matlab R2015b的镜像安装方法与卸载
  10. 二十万字C/C++、嵌入式软开面试题全集宝典七