- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
通常,git标签是对提交的固定引用。但是有时它们被用来标记某些事件(last-build
,base-line
等),并且它们经常更改。
我有一个脚本,可以从引用资料库中刷新那些“ float ”标签。
git fetch --tags --force
git pull origin <mybranch>
git pull
在本地存在时不会刷新标签,并且如果它先运行,它可能会与所有标签的引用一起工作。
git pull
具有
--force
选项,但是选项
--no-tags
的帮助部分将默认行为解释为:
By default, tags that point at objects that are downloaded from the remote repository are fetched and stored locally.
git pull
应该放在第一位。
最佳答案
这进入了Git较为模糊的角落之一,但最后的答案是“最初使用哪个顺序都没有关系”。但是,我建议通常避免使用git pull
,并且无论如何也不要在脚本中使用它。另外,正如您将在下面看到的那样,它确实以不同的方式准确地影响了何时获取。因此,我建议您先运行自己的git fetch
,然后根本不使用git pull
。git fetch
普通的git fetch
(不带--tags
)默认情况下使用怪异的混合标签更新,尽管每个 Remote 都可以定义一个默认标签选项来覆盖此默认值。您引用的是奇怪的混合体:指向从远程存储库下载的对象的标记被获取并存储在本地。用于此的基 native 制有些棘手,我将在以后讨论。
在--tags
参数中添加git fetch
与在命令行上指定refs/tags/*:refs/tags/*
具有几乎相同的效果。 (稍后我们会看到区别。)请注意,这在refspec中没有设置force标志,但是测试表明无论如何都对获取的标签进行了强制更新。
添加--force
与在每个显式refspec中设置force标志具有相同的效果。换句话说,git fetch --tags --force
大致等同于运行git fetch '+refs/tags/*:refs/tags/*'
:如果 Remote 上有标记refs/tags/foo
指向提交1234567...
,则您的Git将替换任何现有的refs/tags/foo
,因此您现在拥有自己的refs/tags/foo
也指向commit 1234567...
。 (但是在实践中观察到,即使仅使用--tags
,它也可以做到这一点。)
请注意,在所有情况下,git fetch
都会将有关所获取内容的信息写入FETCH_HEAD
文件。例如:
$ cat .git/FETCH_HEAD
e05806da9ec4aff8adfed142ab2a2b3b02e33c8c branch 'master' of git://git.kernel.org/pub/scm/git/git
a274e0a036ea886a31f8b216564ab1b4a3142f6c not-for-merge branch 'maint' of git://git.kernel.org/pub/scm/git/git
c69c2f50cfc0dcd4bcd014c7fd56e344a7c5522f not-for-merge branch 'next' of git://git.kernel.org/pub/scm/git/git
4e24a51e4d5c19f3fb16d09634811f5c26922c01 not-for-merge branch 'pu' of git://git.kernel.org/pub/scm/git/git
2135c1c06eeb728901f96ac403a8af10e6145065 not-for-merge branch 'todo' of git://git.kernel.org/pub/scm/git/git
--tags
的提取运行中进行):
$ git fetch --tags
[fetch messages]
$ cat .git/FETCH_HEAD
cat .git/FETCH_HEAD
d7dffce1cebde29a0c4b309a79e4345450bf352a branch 'master' of git://git.kernel.org/pub/scm/git/git
a274e0a036ea886a31f8b216564ab1b4a3142f6c not-for-merge branch 'maint' of git://git.kernel.org/pub/scm/git/git
8553c6e5137d7fde1cda49817bcc035d3ce35aeb not-for-merge branch 'next' of git://git.kernel.org/pub/scm/git/git
31148811db6039be66eb3d6cbd84af067e0f0e13 not-for-merge branch 'pu' of git://git.kernel.org/pub/scm/git/git
aa3afa0b4ab4f07e6b36f0712fd58229735afddc not-for-merge branch 'todo' of git://git.kernel.org/pub/scm/git/git
d5aef6e4d58cfe1549adef5b436f3ace984e8c86 not-for-merge tag 'gitgui-0.10.0' of git://git.kernel.org/pub/scm/git/git
[much more, snipped]
remote.origin.fetch
配置条目控制),以更新一组远程跟踪分支,并创建或更新一些标记。如果将您配置为获取镜像,并且将更新refspec设置为
+refs/*:refs/*
,那么您将获得所有内容。请注意,此refspec设置了force标志,并覆盖所有分支,所有标签,所有远程跟踪分支和所有注释。关于何时使用什么refspec的细节还有更多晦涩的细节,但是使用
--tags
(带有或不带有
--force
)不会覆盖配置条目(尽管编写一组明确的refspecs确实如此,所以这是一种方法-也许是唯一的方法-
--tags
与众不同从写出
refs/tags/*:refs/tags/*
)。
pull
而言并不重要,我们将在下一部分中看到。
git pull
git pull
仅运行
git fetch
,然后运行第二个Git命令,除非您指示它使用
git merge
,否则第二个命令默认为
git rebase
。这是正确且正确的,但途中有一个晦涩的细节。在将
git fetch
重写为C代码之前,这更容易说:在返回脚本时,您可以遵循脚本的
git fetch
和
git merge
命令并查看实际参数是什么。
git pull
运行
git merge
或
git rebase
时,它不使用您的远程跟踪分支和标记。而是使用
FETCH_HEAD
中留下的记录。
refs/heads/master
上存储库中的
git.kernel.org
指向commit
e05806d...
。在我运行
git fetch --tags
之后,新的
FETCH_HEAD
文件告诉我们
refs/heads/master
上存储库中的
git.kernel.org
指出了(在我运行
fetch
时,它可能现在已经更改了)来提交
d7dffce...
。
git pull
运行
git merge
或
git rebase
时,它将传递这些原始SHA-1数字。因此,您的引用名称解析为什么都没有关系。我运行的
git fetch
实际上更新了
origin/master
:
$ git rev-parse origin/master
d7dffce1cebde29a0c4b309a79e4345450bf352a
git pull
也会将
d7dffce1cebde29a0c4b309a79e4345450bf352a
传递给第二个命令。
--force
的标签并获得了对象
1234567...
。进一步假设,如果您一直在强行获取标签,这将是
git rev-parse refs/tags/last-build
的结果,但是由于您没有使用
--force
,因此您自己的存储库中的
last-build
指向
8888888...
(在中国非常幸运的提交:-))。如果您亲自说“告诉我有关
last-build
的信息”,您将获得修订版
8888888...
。但是
git pull
知道它得到了
1234567...
,无论发生什么其他事情,只要有需要,它都会将数字
1234567...
传递给它的第二个命令。
FETCH_HEAD
中获取该数字。因此,这里重要的是
FETCH_HEAD
的(完整)内容,这取决于您是否使用
-a
/
--append
进行获取。仅在特殊情况下才需要/想要
--append
(在此处不适用)(当您从多个单独的存储库中获取信息,或者出于调试目的而在单独的步骤中获取信息时,等等)。
last-build
标记,则必须在某个时候运行
git fetch --tags --force
-现在我们要解决原子性问题。
git fetch
,有或没有
--tags
,有或没有
--force
,也许是通过运行
git pull
而不是
git fetch
来运行
--tags
的。现在,您已经在本地提交了
1234567...
,名称
last-build
指向
8888888...
(未更新)或
1234567...
(已更新)。现在,您运行
git fetch --tags --force
来更新所有内容。现在, Remote 有可能再次移动了
last-build
。如果是这样,您将获得新值,并更新您的本地标签。
8888888...
。您可能有一个 merge 了该提交的分支,但不知道该标签的提交—现在您要更新标签,现在也不知道该标签的
8888888...
。那是好事,坏事还是无动于衷?这取决于你。
git pull
git pull
仅运行
git fetch
后跟第二个命令,因此您可以自己运行
git fetch
,后跟第二个命令。这使您可以完全控制
fetch
步骤,并避免重复获取。
fetch
步骤,因此您可以使用refspecs精确地指定要更新的内容。现在是时候访问奇怪的混合标签更新机制了。
git ls-remote
。这将显示
git fetch
在连接时看到的内容:
$ git ls-remote | head
From git://git.kernel.org/pub/scm/git/git.git
3313b78c145ba9212272b5318c111cde12bfef4a HEAD
ad36dc8b4b165bf9eb3576b42a241164e312d48c refs/heads/maint
3313b78c145ba9212272b5318c111cde12bfef4a refs/heads/master
af746e49c281f2a2946222252a1effea7c9bcf8b refs/heads/next
6391604f1412fd6fe047444931335bf92c168008 refs/heads/pu
aa3afa0b4ab4f07e6b36f0712fd58229735afddc refs/heads/todo
d5aef6e4d58cfe1549adef5b436f3ace984e8c86 refs/tags/gitgui-0.10.0
3d654be48f65545c4d3e35f5d3bbed5489820930 refs/tags/gitgui-0.10.0^{}
33682a5e98adfd8ba4ce0e21363c443bd273eb77 refs/tags/gitgui-0.10.1
729ffa50f75a025935623bfc58d0932c65f7de2f refs/tags/gitgui-0.10.1^{}
gitgui-0.10.0^{}
。此语法表示剥离的标记(请参见
gitrevisions
,尽管此处未使用单词“peeled”)。
refs/heads/*
的分支)。 (您不必下载已经拥有的对象,只需下载那些您缺少但需要的对象。)然后,您的Git可以浏览所有已剥离的标签,以查看是否有任何标签指向那些提交中的一个。如果是这样,您的Git会使用给定标签(无论是否带
--force
模式,具体取决于您的提取)。如果该标签指向标签对象,而不是直接指向提交,则Git还将该标签对象也添加到集合中。
--force
。也就是说,先前的标签目标仅需要是新标签目标的祖先。显然,这只会影响轻量级标签,在任何情况下,Git 1.8.2及更高版本在推送时都具有“从不替换没有
--force
的标签”的行为。然而,对于Git 2.10.x和2.11.x观察到的行为是,使用
--tags
时,标签在获取时被替换。
git fetch --tags --force --prune
可以做到;或者,您也可以
git fetch --prune '+refs/tags/*:refs/tags/*' '+refs/heads/*:refs/remotes/origin/*'
,它使用
+
语法来强制标记和远程跟踪分支更新。 (
--prune
像往常一样是可选的。)force标志可能是不必要的,但在这里至少是无害的,并且在某些Git版本中可能会做一些有用的事情。现在,您的标签和远程跟踪分支已更新,您可以使用不带任何参数的
git merge
或
git rebase
,使用当前分支的上游配置 merge 或重新设置基础。您可以根据需要在任意多个分支重复此操作,根本不需要运行
git pull
(及其冗余
fetch
)。
关于git - “git fetch --tags --force”和 “git pull <branch>”是可交换的操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41708925/
我正在运行此代码并在没有互联网连接的情况下进行测试: fetch(url, options) .then(res => { // irrelevant, as catch happens
function fetchHandler(evt) { console.log('request:' + evt.request.url); dealWithRequest(evt)
我在 AdventureWorks2016 上执行了两个示例查询,并得到了相同的结果。那么什么时候应该使用 NEXT 或 FIRST 关键字? select LastName + ' ' + Firs
我有以下查询: @Query("SELECT new de.projectemployee.ProjectEmployee(employee) " + "FROM ProjectEmpl
我正在尝试使用 fetch on react 来实现客户端登录。 我正在使用护照进行身份验证。我使用的原因 fetch而不是常规 form.submit() , 是因为我希望能够从我的快速服务器接收错
我正在尝试将我的 Aurelia 项目从 beta 版本升级到 3 月版本。 我遇到的错误之一是: Cannot find name 'Request'. 谷歌搜索会在 GitHub 上显示此问题:h
见标题。在我们的react项目中调用fetch时,一位(现已离职)开发人员最初使用from fetch to window.fetch。我不确定两者之间的区别,也无法在网上找到任何结论(W3Schoo
这个问题在这里已经有了答案: HTTP status code 401 even though I’m sending credentials in the request (1 个回答) How
这是代码片段: var fetch = require("node-fetch"); var fetchMock = require("fetch-mock"); function setupMock
我在这里看到了两种不同的抓取方式: https://github.com/github/fetch https://github.com/matthew-andrews/isomorphic-fetc
以下git命令有什么区别? git fetch origin 和 git fetch --all 从命令行运行它们看起来就像它们做同样的事情。 最佳答案 git fetch origin 仅从 ori
我有一个不断改变值的动态 json。我想用该数据绘制图表所以我将动态数据存储到数组然后用该数组绘制图表。目前我创建了 serinterval 用于从 api 获取新数据。但问题是如果新数据没有,它会再
我有一个很大的 JSON blob,我想预先加载我的网页。为此,我添加了 到我的页面。我也有一个 JS 请求来获取相同的 blob。 这不起作用,控制台报告: [Warning] The resour
我们在单页 JavaScript 应用程序发出 fetch 请求时遇到不一致的客户端错误。值得注意的是,它们都是同源请求。 let request = new Request(url, options
我是 ReactJS 的新手,我一直在阅读如何从 api 获取和发布数据。我见过这两个,但我不知道该用什么以及两者之间有什么区别?我读了它,但我不确定我会用什么。谢谢! react-fetch wha
Doctrine中注解@ManyToOne中的fetch="EAGER"和fetch="LAZY"有什么区别? /** * @ManyToOne(targetEntity="Cart", casca
我想要获取一个 api,然后调用另一个 api。在 javascript 中使用这样的代码是否明智? fetch(url, { method: 'get', }).then(function(re
我有一个组件,它依赖于 2 个端点来检索所需程序的名称。我有 2 个端点。第一个端点返回程序列表,它是一个对象数组。目前,它仅返回 4 个节目(2 个节目 ID 为“13”,另外两个节目 ID 为“1
我的应用程序从外部源(配置文件)接收查询,因此它必须从查询结果中获取列。我有一些代码: typedef union _DbField { text text[512]; sword i
我有一个实体A,它与实体B有对多关系。 Entity A -->> Entity B 我需要在多个屏幕上引用一对多关系的计数。此外,我可以多次从 Entity A
我是一名优秀的程序员,十分优秀!