在同一个命令中使用 "git push" 和 "git push --tags"?

33

我通常跑步:

git push
git tag v4.7
git push --tags

第一和第三个操作都连接到服务器,这浪费时间。
我想通过仅推送一次来加快速度。哪个命令可以实现这个目的?
它在一个bash 脚本中,需要在任何分支中运行良好,而不仅仅是master

阅读手册,我不认为git push all是解决方案:

--all:不需要命名每个要推送的引用,指定推送refs/heads/下所有引用。

--tags:除了在命令行上明确列出的refspecs之外,还会推送refs/tags下的所有引用。


git push --tags HEAD 是什么意思? - Daniel Hilgarth
HEAD 意味着当前分支,因此我确实可以将其用作“显式列出的 refspec”!您能否将其发布为答案,以便我可以接受它? - Nicolas Raoul
之前问过:https://dev59.com/lG865IYBdhLWcg3wkfgW - Paul Verest
3个回答

37

最接近的选项可能是:

git push --follow-tags

使用此选项将推送所有本来会被推送的引用,以及在refs/tags中指向可以从正在推送的引用到达的提交的注释标签,在远程上缺失的标签。


这听起来也是一个有效的解决方案... 它与 git push --tags HEAD 有什么不同? - Nicolas Raoul
@NicolasRaoul 就像 git push 一样,它也会推送其他跟踪分支(取决于 push.default 配置),而不仅仅是 HEAD,并且它会在推送的分支上推送标签,而不是所有标签。 - Kornel
我认为那不正确。据我所知,git push 只会推送当前分支。 - Daniel Hilgarth
8
请注意,--follow-tags 只会推送 带注释的 标签(尽管通常这正是您想要的)。 - torek
1
@DanielHilgarth,git push 没有显式传递refspecs时,会根据push.default配置变量进行操作,如果该变量不存在,则默认为matching - kostix
1
从git 2.0开始,如果未设置push.default,则默认设置为simple,这基本上意味着当前分支。请参见此问题 - Jacob Wang

7
根据--tags文档,您可以指定要推送的其他refspecs。因此,您只需使用
git push --tags origin HEAD

2
看起来这个不起作用: "fatal: 'HEAD' does not appear to be a git repository". 但是 git push origin HEAD --tags 是可以的。 - Marius Gedminas
@MariusGedminas:感谢您发现了这个问题。已经修复。 - Daniel Hilgarth

4

您可以创建别名来快速访问此命令:

git config --global alias.p '!git push && git push --tags'

或者

git config --global alias.pa '!git push --all && git push --tags'

现在你可以这样做:
git tag v4.7
git p

您可以在此处了解有关别名的更多信息

3
有趣的提示,但这不会减少对服务器发出的请求次数,对吧?正如问题中所解释的那样,它是用于bash脚本的,所以我的问题不是关于输入更少。 - Nicolas Raoul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接