我知道为什么git push——tags是一个单独的操作,而不是普通的git push。推标签应该是一个有意识的选择,因为你不想不小心推到一个标签。这很好。但是有没有办法把两者结合起来呢?(除了git push && git push——标签。)


当前回答

试着everythig。

对我来说,避免在Gitlab上为同一个提交触发两个CI构建的唯一解决方案是:

git push -o ci.skip && git push --tags

@user1160006在评论中建议。

我在这里重复一遍,作为一个适当的答案,让感兴趣的人更容易看到它。 作为对我的提醒;)

其他回答

2020年8月更新

正如SoBeRich最初的回答中提到的,在我自己的回答中,git 2.4.x

git push --atomic origin <branch name> <tag>

(注意:这实际上只适用于HTTPS与Git 2.24)

2015年5月更新

从git 2.4.1开始,您可以这样做

git config --global push.followTags true

如果设置为true,默认启用——follow-tags选项。 您可以在推送时通过指定——no-follow-tags来覆盖此配置。

正如Matt Rogers在回答Wes Hurd时提到的:

——follow-tags只推送带注释的标签。

git tag -a -m "I'm an annotation" <tagname>

这将被推(与git tag <tagname>相反,这是一个轻量级标签,不会被推,正如我在这里提到的那样)

2013年4月更新

从git 1.8.3(2013年4月22日)开始,你不再需要执行2个命令来推送分支,然后再推送标签:

新的"——follow-tags"选项告诉"git push"在推出分支时推出相关的带注释的标签。

你现在可以尝试,当推送新的提交:

git push --follow-tags

不过,这不会推送所有的本地标记,只会推送git推送的提交所引用的标记。

Git 2.4.1+(2015年第二季度)将引入选项推送。followTags:参见“如何让“git push”在分支中包含标签?”。

最初的答案,2010年9月

核选项将是git push -mirror,它将推送refs/下的所有refs。

你也可以在当前分支提交时只推送一个标签:

git push origin : v1.0.0 

你可以将——tags选项与refspec组合在一起,比如:

git push origin --tags :

(因为——tags的意思是:除了命令行中明确列出的refspecs之外,refs/tags下的所有refs都会被推)


还有这个条目“使用单个“git push”调用推送分支和标签”

一个方便的提示刚刚发布到Git邮件列表Zoltán Füzesi: 我使用.git/config来解决这个问题:

[remote "origin"]
    url = ...
    fetch = +refs/heads/*:refs/remotes/origin/*
    push = +refs/heads/*
    push = +refs/tags/*

添加这些行后,git push origin将上传所有分支和标签。如果您只想上传其中的一些,可以枚举它们。 我自己还没有尝试过,但它看起来可能很有用,直到一些其他同时推送分支和标签的方式被添加到git push中。 另一方面,我不介意输入: $ git push && git push——标签

当心,正如Aseem Kishore所评论的那样

Push = +refs/heads/*将强制推送所有分支。

它刚才咬了我一下,供你参考。


René Scheibe补充了这个有趣的评论:

——follow-tags参数具有误导性,因为只考虑.git/refs/tags下的标签。 如果git gc运行,标记将从.git/refs/tags移动到.git/ packaged -refs。之后git push -follow-tags…不再像预期的那样工作。

刚刚在git 2.31.0上测试:git push <refspec>——tags。这样做的好处是它推送ALL标签,而不仅仅是——follow-tags这样的注释标签。

@since Git 2.4

Git推送——原子起源<分支名称> <标签>

假设你在github上创建了一个新的repo。所以第一步是克隆repo:git克隆{你的repo URL}

你做你的工作,添加一些文件,代码等,然后推动你的变化:

git add .
git commit -m "first commit"
git push

现在我们的变更在主分支中。让我们创建一个标签:

git tag v1.0.0                    # creates tag locally     
git push origin v1.0.0            # pushes tag to remote

如果你想删除标签:

git tag --delete v1.0.0           # deletes tag locally    
git push --delete origin v1.0.0   # deletes remote tag

试着everythig。

对我来说,避免在Gitlab上为同一个提交触发两个CI构建的唯一解决方案是:

git push -o ci.skip && git push --tags

@user1160006在评论中建议。

我在这里重复一遍,作为一个适当的答案,让感兴趣的人更容易看到它。 作为对我的提醒;)