当前位置: 首页 > 面试题库 >

Git-什么是“ Refspec”

柯瀚海
2023-03-14
问题内容

我一直在遵循本指南来配置GitLab与Jenkins的持续集成。

作为该过程的一部分,有必要将respec设置如下

+refs/heads/*:refs/remotes/origin/* +refs/merge- requests/*/head:refs/remotes/origin/merge-requests/*

为什么没有必要在这篇文章中进行解释,所以我开始在网上寻找解释,并看了一下官方文档以及一些与此相关的堆栈溢出问题。

尽管如此,我仍然感到困惑-

refspec到底是什么?

为何上述refspec是必要的-它有什么作用?


问题答案:

refspec告诉git如何将引用从远程映射到本地仓库。

您列出的值是+refs/heads/*:refs/remotes/origin/* +refs/merge- requests/*/head:refs/remotes/origin/merge-requests/*; 所以让我们分解一下。

您有两个模式,它们之间有一个间隔;这只是意味着您要给出多个规则。(专业版git书将其称为两个refspecs;从技术上讲,这可能更正确。但是,您几乎总是可以列出多个refspecs,因此在日常生活中,这可能几乎没有什么区别。)

那么,第一种模式+refs/heads/*:refs/remotes/origin/*包括三个部分:

  1. +方法适用无故障的规则,即使这样做会在非快进方式移动的目标参考。我会回到那。
  2. :(但+如果有的话之后)之前的部分是“源”模式。即refs/heads/*,表示此规则适用于refs/heads(含义,分支)下的任何远程引用。
  3. 后面的部分:是“目标”模式。那是refs/remotes/origin/*

因此,如果原点有一个分支master表示为refs/heads/master,这将创建一个远程分支引用origin/master表示为refs/remotes/origin/master。对于任何分支名称(*)依此类推。

回到那个+…假设起源

A --- B <--(master)

您获取并应用该refspec即可

A --- B <--(origin/master)

(如果您应用了典型的跟踪规则并且做了,pull您也已经master指出了B。)

A --- B <--(origin/master)(master)

现在,某些事情发生在遥控器上。也许有人做了一个reset删除B,然后提交C,然后强行推动的操作。所以遥控器说

A --- C <--(master)

当您获取时,您会得到

A --- B
 \
  C

和git必须决定是否允许origin/masterB到的移动C。默认情况下,这是不允许的,因为它不是一个快进(它会告诉您它拒绝了该引用的请求),但是因为规则以+它开头而将接受它。

A --- B <--(master)
 \
  C <--(origin/master)

(在这种情况下,拉动将导致合并提交。)

第二种模式是相似的,但是对于merge-requests引用(我认为与您的服务器对PR的实现有关;我不熟悉)。

有关refspec的更多信息:https : //git-scm.com/book/en/v2/Git-Internals-The-Refspec



 类似资料:
  • Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的分布式版本控制系统。 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持(注:这得分是用什么样的服务端,使用http协议或者git协议等不太一样。并且在push和pull的时候和服务器端还是有交互的),使源代码的发布和交流极其方便。 Git

  • 到目前为止,Git 是世界上使用最为广泛的现代化版本控制系统。Git 最初由 Linux 系统内核的作者 Linus Torvalds 在 2005 年开始开发,目前已经是一个持续维护的成熟开源项目。如今,大量软件项目依赖 Git 进行版本管理,其中既有开源软件,也有商业软件。Git 在很多操作系统和集成开发环境(IDE)上都表现良好。绝大多数软件开发者或多或少都使用过 Git。 Git 是分布式

  • 这两天我一直在和Git Bash合作。我现在知道了诸如、、、和等基本操作。但我还是不知道Git Bash本身到底是什么! 我已经搜索了很多关于Git Bash的内容,但是我看到的所有站点都集中在它的命令的功能上。我仍然没有为我的问题找到一个好的答案。现在,我想,我在正确的地方得到这个答案!

  • 虽然市场上有几十种不同的版本控制系统,一些世界上最著名的项目(例如 Linux 内核, Ruby on Rails,或是jQuery)都选择了使用 Git 作为它们的版本控制系统。为什么它们都选择 Git 呢? 节省时间 Git 运行快速。尽管我们在这里讨论的只是运行一个命令所需要的几秒钟,但是把它累积在你的日常工作中就是一个不小的飞跃了。它可以节省那些不必要的等待时间,并且去完成其它一些有意义的

  • 无法删除所有本地分支。最后会附加一些特殊字符,git会抛出以下错误:

  • 问题内容: 什么是selenium? 当您打开Selenium的官方页面时,您首先读到的是“什么是Selenium?”中的“ Selenium automates browser”。部分。“selenium的哪个部分适合我?”部分 下面提供了Selenium WebDriver和Selenium IDE之间的选择。由此,我推断出Selenium是一组工具,并且该集合包括IDE,WebDriver