如何“推--tags”忽略一些?

时间:2018-12-18 15:52:41

标签: git

除了两个不需要的标签外,我想推送所有标签。是否可以不先删除它们就可以吗?

方案:自动发布系统将发布标签分配给master分支的最新提交,例如V3.1。它还会将'LATEST'标签移动到相同的新提交中。 (实际上,创建了更多的唯一和非唯一标签)。

因此,我想做push --tags,但忽略'LATEST'。知道怎么做吗?

4 个答案:

答案 0 :(得分:3)

如果我理解正确,就会发现两种方法可以满足您的需求:

  1. 仅推送您刚刚创建的标签,例如:将标签名称存储在某些$tag变量中,然后运行:

    git push origin $tag
    
  2. 您要推送多个标签,并且作业创建的标签都将遵循相同的模式:V3.1V3.2等...
    在这种情况下,请使用仅匹配那些标签的refspec:

    git push origin "refs/tags/V*:refs/tags/V*"
    

请参见git help push

的refspec部分

答案 1 :(得分:2)

Git标签并非旨在移动,因此手册对此进行了说明。

  

Git支持两种类型的标签:轻量级标签和带注释的标签。

     

轻量级标签非常像一个不变的分支-只是指向特定提交的指针。

     

但是,带注释的标签作为完整对象存储在Git数据库中。它们是校验和;包含标记名称,电子邮件和日期;带有标记消息;并可以使用GNU Privacy Guard(GPG)进行签名和验证。 (来源:Git Manual

您可能想使用分支来指向最新提交而不是标签。正如上面摘录中提到的那样,轻量级标签与分支相同,只是不改变,而带注释的标签是附加了一些附加信息的轻量级标签。如果您想对标签进行签名,这很有用,那么您可以审核谁创建了给定的发行版,但是如果您使用标签来指向移动的目标,则没有任何好处。那就是分支的目的。

要更改分支指向的位置,请签出分支并将--hard重置为新的sha。例如(假设de39a48是发布后新的最新提交)。

git checkout latest git reset --hard de39a48

答案 2 :(得分:2)

如果您不想将closeExistingBrowser()视为标签,请不要将其设为标签。您可以完全将任意大拇指放在提交图中,

LATEST

是最简单的,尽管不恰当地使用传统保留的名称空间(这是一个完全全局的引用,例如HEAD),这对它很合适,所以也许git update-ref LATEST v3.1^{} 会是更好的专业工程。 git update-ref refs/cithumbs/LATEST v3.1^{}可以确保到达基础提交(请参阅git help revisions),以防您使用带注释的标签(例如,签名或注释)将数据存储在自己的对象中。

由于git的分支从字面上看是非常轻巧的,例如,很难让人们习惯其他vcs的旋转来简单地相信这是多么容易,所以您可以使用分支:

^{}

实际上与

完全等效
git branch -f LATEST v3.1

git update-ref refs/heads/LATEST v3.1^{} 命令在默认情况下也会设置一个参考日志,您可能需要它,并且可以获取`update-ref来为您做任何参考,请参阅reflog文档)。

答案 3 :(得分:1)

您可以尝试

git push --dry-run --tags LATEST^

它将推送每个标签,直到您的标签LATEST指向的提交之前

我不确定push命令的refspec是否接受提交哈希,但这是一次试运行,因此它实际上不会影响任何东西。如果输出符合您的期望,然后继续进行真实的事情。