首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不要在存储库中复制更新的标记

不要在存储库中复制更新的标记
EN

Stack Overflow用户
提问于 2017-09-28 19:47:14
回答 1查看 61关注 0票数 0

我已经克隆了很多存储库,所以我编写了一个脚本来检查预期的标记是否与我所拥有的相同。如果不是,它将git pull origin newtag。但是,有时期望的标记比远程中的最后一个标记更老,即使这两个标记之间没有任何更改(但是创建新标记是因为其他repos接收到了更改)。但是有了那个吉特拉力,我得到的是最新的标签,而不是预期的标签。因此,脚本将再次git pull origin newtag,即使我已经拥有它。要检查我所在的当前标记,我使用git describe --tags --exact-match

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-28 21:10:34

TL;DR:只是不要再拿东西了

如果您避免抓取,您将避免为现有提交选择新名称。如果这不合适,您只需将标签名称保存在某个地方即可。如果您找到一个新标记,可以使用git rev-parse检测它指向相同的提交。

代码语言:javascript
复制
git rev-parse android-8.0.0_r4^{commit}
git rev-parse android-8.0.0_r12^{commit}

会产生同样的哈希。

长描述

标签不一定有时间--Git的“带注释的标记”确实有时间戳,但是轻量级标记只是为现有的提交添加了一个新的名称,并且没有自己的时间戳--即使这样,在处理分支时,单个线性度量很少足够。

git clone -b android-8.0.0_r4 https://android.googlesource.com/platform/build/blueprint

在您的特定示例中,如果我们查看https://android.googlesource.com/platform/build/blueprint,我们会发现标记8.0.0_r48.0.0_r12是带注释的标记,但实际上指向相同的提交,4fcacd3d193f1e1dfb0f5a9e818dd895eca45427

标记8.0.0_r11还指向相同的提交(单击r11查看;将r11更改为r4r8以查看所选网页显示格式中的每个带注释的标记)。

换句话说,您签出的这些标记中的哪一个并不重要:您为所有三个标记都获得了相同的源代码。如果您想要记住用于执行git checkout操作(示例中的git clone的最后一步)的标记,则必须将其保存在某个地方。相反,Git保存了这样一个事实:签出提交4fcacd3d193f1e1dfb0f5a9e818dd895eca45427,而git describe --tags查找一个导致4fcacd3d193f1e1dfb0f5a9e818dd895eca45427的标记。它发现了很多,并挑选了一个。在这里,如果它查看带注释的标记,就会使用带注释的标记日期。

无论何时运行git fetch (git pull的前半部分),Git都会获得新的对象;这可能包括新的标记。避免获取(任何类型的、轻量级的或带注释的)新标记的主要方法是避免获取。

如果选择新标记为时已晚,请注意,您可以通过使用git for-each-ref refs/tags并将每个标记解析到其目标对象(通常是提交),或者具体地解析到commit (如果标记指向其他对象类型(在可能遍历了前一个标记之后),查看所有标记(或所有带注释的标记)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46477162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档