- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我一直在关注 this guide关于配置 GitLab 与 Jenkins 的持续集成。
作为流程的一部分,需要按如下方式设置 refspec:+refs/heads/*:refs/remotes/origin/* +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*
帖子中没有解释为什么这是必要的,所以我开始在网上寻找解释并查看了 official documentation以及一些相关的 StackOverflow 问题 like this one .
尽管如此,我还是一头雾水:
refspec 到底是什么? 为什么需要上述 refspec - 它有什么作用?
最佳答案
refspec 告诉 git 如何将引用从远程仓库映射到本地仓库。
您列出的值是 +refs/heads/*:refs/remotes/origin/* +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*
;所以让我们分解一下。
你有两个模式,它们之间有一个空格;这只是意味着你给出了多个规则。 (pro git 书将此称为两个 refspecs;这在技术上可能更正确。但是,如果需要,您几乎总是能够列出多个 refspecs,因此在日常生活中它可能没什么区别。)
然后,第一个模式是 +refs/heads/*:refs/remotes/origin/*
,它包含三个部分:
+
意味着应用规则而不会失败,即使这样做会以非快进方式移动目标引用。我会回到那个。:
之前的部分(如果有,则在+
之后)是“源”模式。那是 refs/heads/*
,这意味着此规则适用于 refs/heads
(意思是分支)下的任何远程引用。:
之后的部分是“目标”模式。那是 refs/remotes/origin/*
。所以如果 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)
现在 Remote 上发生了一些事情。有人可能做了一个 reset
删除 B
,然后提交 C
,然后强制推送。所以 Remote 说
A --- C <--(master)
当你获取时,你得到
A --- B
\
C
并且 git 必须决定是否允许将 origin/master
从 B
移动到 C
。默认情况下它不会允许这样做,因为它不是快进(它会告诉你它拒绝了那个 ref 的 pull ),但是因为规则以 +
开头它会接受它。
A --- B <--(master)
\
C <--(origin/master)
(在这种情况下, pull 将导致 merge 提交。)
第二种模式类似,但用于merge-requests
refs(我假设这与您的服务器对 PR 的实现有关;我对此并不熟悉)。
关于引用规范的更多信息:https://git-scm.com/book/en/v2/Git-Internals-The-Refspec
关于Git - 什么是 "Refspec",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44333437/
根据git config的文档,支持以下两项: remote..fetch The default set of "refspec" for git-fetch(1). See git-fet
我一直在关注 this guide关于配置 GitLab 与 Jenkins 的持续集成。 作为流程的一部分,需要按如下方式设置 refspec:+refs/heads/*:refs/remotes/
我在 eclipse 中有一个基于 java 的动态 web 项目,它被放置在 git 下进行源代码控制。我想将这个项目上传到 bitbucket 中的存储库中。为此,我使用了命令下面- git re
查看this示例显示 refspecs 可以过滤目录/命名空间,如下所示: +refs/heads/qa/*:refs/remotes/origin/qa/* 但是我正在尝试优化提取,而我正在使用的
嗨,我想推送一些东西到特定的远程分支 我制作局部区域 git clone https://~~~.Something cd https://~~~.Something 我可以使用访问特定的分支 git
我在 GitHub 上创建了一个 repo。从网站创建了一个新分支(名为“anythingslider”)。 然后: cd /home/multiformeingegno git clone git@
我镜像了一个 git 存储库并删除了 application.properties包含来自 MyProject 的密码存储库。我可以看到 Deleted files 下的消息和我的文件名如下: $ j
考虑以下存储库。它有很多团队成员的私有(private)分支,都在 refs/heads/team/ 命名空间下,我不想获取,但我仍然想获取所有其余部分,包括任何可能是在 team 命名空间之外新创建
我正忙着整合 Jenkins 和 TFS。我第一次不成功的尝试是使用 Jenkins 的多分支管道设置和 TFS。因此,我的第二次尝试是使用带有参数的单个 Jenkins 构建来指定要构建的分支。 我
在当前的 Git 上,git push --force-with-lease origin +somebranch 和 git push --force-with-lease origin someb
我和几个 friend 在 GitLab 有个项目,当然有 master 分支,还有一些其他的。当我克隆存储库时,我还使用命令 git remote add upstream ... 创建了一个上游。
我在 cloufforge 上设置了一个新的 Git 存储库,但遇到了一些不寻常的问题。 When I do a git pull origin master From https://dndigit
如何通过单个命令获取有关 gerrit 更改的最新 refspec。我需要输出为“refs/changes/11/1234/4”。是否有相同的 git 命令 我知道结合 gerrit 查询和一些脚本的
Refspec 和 Branch specifier(默认为空) 有什么区别:在下面的 Jenkins 作业配置中: 我尝试在作业配置中设置 Refspec 选项: +refs/heads/maste
我从主分支创建了一个功能分支,并向我的分支添加并提交了一些更改。 现在我想把我的工作推送到远程仓库,但是失败了。我能做些什么来解决这个问题?谢谢。 当运行 git push 命令时,它没有询问我的密码
看来很多人已经用 git init && git fetch 组合替换了 git clone。这看起来相当愚蠢,不幸的是像 Jenkins 这样的工具不会为你做这件事。那么,为什么 git clone
这个问题在这里已经有了答案: Message 'src refspec master does not match any' when pushing commits in Git (128 个答案
使用 refspec 是一种获取远程分支并创建类似但具有给定名称的分支的便捷方法(或者反过来:创建一个具有与本地名称不同的给定名称的远程分支)。我对一件小事感到困惑——因为 pull 也会与当前分支
我已经使用我的 GitHub 帐户在 https://github.com/darKoram/sphero_tracker.git .到目前为止,它只包含一些 wiki 页面,但我已准备好上传我的代码
这个问题在这里已经有了答案: Message 'src refspec master does not match any' when pushing commits in Git (126 个答案
我是一名优秀的程序员,十分优秀!