小编典典

同时推送 git 提交和标签

all

我知道与git push --tags普通 old 分开操作的原因git push。推送标签应该是有意识的选择,因为您不想意外推送标签。没关系。但是有没有办法将两者结合在一起?(除了git push && git push --tags。)


阅读 353

收藏
2022-03-11

共1个答案

小编典典

2020 年 8 月更新

正如答案中最初提到的,在我自己的答案中,从git2.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 在推送时覆盖此配置。

正如马特罗杰斯在回答韦斯赫德的帖子中指出的那样:

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

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

这将被推送(而不是git tag <tagname>轻量级标签,不会被推送,正如我在这里提到的

2013 年 4 月更新

git 1.8.3 (April 22d, 2013)
开始

您不再需要执行 2 个命令来推送分支,然后推送标签

新的“ --follow-tags”选项告诉“ git push在推出分支时推送相关的注释标签

您现在可以在推送新提交时尝试:

git push --follow-tags

不过,这不会推送 所有 本地标签,只会推送提交引用的标签,这些标签使用git push.

Git 2.4.1+(2015 年第 2 季度)将引入该选项push.followTags:请参阅“如何gitpush在分支中包含标签?

原始答案,2010 年 9 月

核选项将是git push --mirror,这将推动所有裁判refs/

您还可以在当前分支提交中只推送一个标签:

git push origin : v1.0.0

您可以将该--tags选项与 refspec 结合起来,例如:

git push origin --tags :

(因为意味着: _ 除了在命令行上明确列出的 refspecs 之外,*_--tags所有 refsrefs/tags都被推送) _ *_


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

Zolt谩n Fuezesi刚刚在Git
邮件列表中发布了一个方便的提示:

.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 --tags

push = +refs/heads/*强制推动你所有的分支

这刚刚咬了我一口,仅供参考。


René添加了这个有趣的评论:

--follow-tags参数具有误导性,因为仅.git/refs/tags考虑了下面的标签。
如果git gc运行,标签将从 移动.git/refs/tags.git/packed-refs。之后git push --follow-tags ...不再按预期工作。

2022-03-11