fetch 与引用规格(refspec)—— Git 学习笔记 23
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
这也是针对远程版本库 origin
的 git 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 操作的引用规格。 如果想在每次抓取时都包括 master
和 experiment
分支,可以这样写:
[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相关推荐
- Git 学习笔记:6 GitHub
Git 学习笔记:6 GitHub 账户的 创建和配置 SSH访问 头像 邮件地址 两步验证 对项目做贡献 派生(fork)项目 GitHub 流程 创建合并请求 利用合并请求 合并请求的进阶用法 将 ...
- Git学习笔记使用记录
文章目录 Git学习笔记 基本 配置环境 Install 初始化workspace Git 全局设置Global Configuration: 配置账户 创建项目仓库Create project re ...
- Git 学习笔记:5 分布式工作流程
Git 学习笔记:5 分布式工作流程 分布式工作流程 集中式工作流 集成管理员工作流 司令官与副官工作流 工作流程总结 向一个项目贡献 提交准则 私有小型团队 John's Machine 私有管理团 ...
- Git学习笔记与IntelliJ IDEA整合
2019独角兽企业重金招聘Python工程师标准>>> Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:htt ...
- Git学习笔记:分支管理3
前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...
- Git 的安装与初次使用 —— Git 学习笔记 03
Git 的安装与初次使用 -- Git 学习笔记 03 Git 的安装与初次使用 -- Git 学习笔记 03 安装 Git 在 Linux 上安装 在 Windows 上安装 初次运行 Git 前的 ...
- Git学习笔记与IntelliJ IDEA整合
Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...
- Git学习笔记:中国版GItHub,码云
前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...
- git学习笔记——Linux和Windows下git的基本操作
git学习笔记--Linux和Windows下git的基本操作 github主页:https://github.com/Taot-chen 一.Linux环境 1.安装git sudo apt-get ...
最新文章
- oracle创建DBLink连接
- 史上最浅显易懂的Git教程!
- Bitcoin Unlimited发布BCH新版客户端1.5.0.0,包括CTOR和CDSV
- 【新年快乐】网易云信春节期间服务公告
- S3C2440的LCD编程
- 哈希表创建哈希表(Hash Table,也叫散列表),是根据键(Key)而直接访问在内存存储位置的数据结构.typedef enum{ HASH_OK-icoding-数据结构-C
- bzoj3456:城市规划
- android自定义矩形框,Android中ImageCropper矩形、圆形 裁剪框的实现方法
- 聊聊python文件
- oracle查看数据库文件大小
- sof与NIOS II的elf固件合并生成jic文件
- DIY手机万能红外遥控器
- SCU4438 Censor(审查员) (KMP算法与模拟栈的应用 || HASH表与模拟栈的结合)
- 云-腾讯云:实时音视频
- 我们提倡适量饮酒,但多少算是适量呢?
- 人工智能和嵌入式|大数据|云计算等的关系
- 带着问题重学 Java 并发编程
- AMBA总线—APB总线协议详解
- SQL 常用高级函数大全
- mysql获取上月月份_mysql 查询当前月份 上个月份 上上个月份