除了两个不需要的标签外,我想推送所有标签。是否可以不先删除它们就可以吗?
方案:自动发布系统将发布标签分配给master分支的最新提交,例如V3.1。它还会将'LATEST'标签移动到相同的新提交中。 (实际上,创建了更多的唯一和非唯一标签)。
因此,我想做push --tags
,但忽略'LATEST'。知道怎么做吗?
答案 0 :(得分:3)
如果我理解正确,就会发现两种方法可以满足您的需求:
仅推送您刚刚创建的标签,例如:将标签名称存储在某些$tag
变量中,然后运行:
git push origin $tag
您要推送多个标签,并且作业创建的标签都将遵循相同的模式:V3.1
,V3.2
等...
在这种情况下,请使用仅匹配那些标签的refspec:
git push origin "refs/tags/V*:refs/tags/V*"
请参见git help push
答案 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是否接受提交哈希,但这是一次试运行,因此它实际上不会影响任何东西。如果输出符合您的期望,然后继续进行真实的事情。