同时推送git提交和标签

Wil*_*son 341 git

我知道这git push --tags是一个单独的操作原因git push.推动标签应该是一个有意识的选择,因为你不想意外推动标签.没关系.但有没有办法将两者结合在一起?(除了git push && git push --tags.)

Von*_*onC 497

2015年5月更新

git 2.4.1开始,你可以做到

git config --global push.followTags true
Run Code Online (Sandbox Code Playgroud)

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

2013年4月更新

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

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

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

git push --follow-tags
Run Code Online (Sandbox Code Playgroud)

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

Git 2.4.1 +(2015年第二季度)将介绍该选项push.followTags:请参阅" 如何制作" git push"在分支中包含标签? ".

原始答案,2010年9月

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

您还可以使用当前分支提交仅推送一个标记:

git push origin : v1.0.0 
Run Code Online (Sandbox Code Playgroud)

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

git push origin --tags :
Run Code Online (Sandbox Code Playgroud)

(因为--tags意味着:除了在命令行中明确列出的refspec之外,所有引用refs/tags都被推送)


您还有此条目" 使用单个"推送分支和标签"git push"调用 "

一个方便的提示刚刚被ZoltánFüzesi 发布到Git邮件列表中:

.git/config用来解决这个问题:

[remote "origin"]
    url = ...
    fetch = +refs/heads/*:refs/remotes/origin/*
    push = +refs/heads/*
    push = +refs/tags/*
Run Code Online (Sandbox Code Playgroud)

添加这些git push origin行将上传所有分支和标记.如果您只想上传其中一些,可以枚举它们.

还没有尝试过,但看起来它可能会有用,直到同时推送分支和标签的其他方式添加到git push.
另一方面,我不介意打字:

$ git push && git push --tags
Run Code Online (Sandbox Code Playgroud)

当心,因为评论Aseem纪

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

刚才这就是我,所以我是.


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

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

  • 你链接到的帖子上的一条评论正确地指出`push = + refs/heads/*`line*force*-pushes*all*你的分支.刚才这就是我,所以我是. (3认同)
  • Re:在git 1.8.3中添加了`--follow-tags`标志,我可以配置我的git安装使其成为默认值吗? (2认同)

SoB*_*ich 8

@从 Git 2.4 开始

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

  • 哈哈,我想我宁愿“git push;” git push --标签` (16认同)
  • @BlaineLafreniere 哈哈,这不是“同时”的,并且违背了这个问题 (7认同)
  • 不一样。原子性。维基百科上有几篇文章 (4认同)
  • 不,这仍然会触发 github 工作流程两次。 (4认同)

Raj*_*pta 7

假设您在 github 上创建了一个新的存储库。所以第一步是克隆 repo:git clone {Your Repo URL}

您完成您的工作,添加一些文件、代码等,然后使用以下命令推送您的更改:

git add .
git commit -m "first commit"
git push
Run Code Online (Sandbox Code Playgroud)

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

git tag v1.0.0                    # creates tag locally     
git push origin v1.0.0            # pushes tag to remote
Run Code Online (Sandbox Code Playgroud)

如果要删除标签:

git tag --delete v1.0.0           # deletes tag locally    
git push --delete origin v1.0.0   # deletes remote tag
Run Code Online (Sandbox Code Playgroud)


rbe*_*amy 7

刚刚在 git 2.31.0 上测试:git push <refspec> --tags。这样做的优点是它推送所有标签,而不仅仅是带注释的标签,例如--follow-tags.


Mar*_*ndi 5

为了避免在 Gitlab 上针对同一提交触发两个 CI 构建:

git push -o ci.skip && git push --tags
Run Code Online (Sandbox Code Playgroud)

正如@user1160006 此处建议的那样。

  • 在 gitlab 上它显示了一个管道,它只是处于跳过状态(这会破坏管道徽章)。因此它节省了构建资源,但不允许清晰地了解管道的状态。 (2认同)

归档时间:

查看次数:

98189 次

最近记录:

6 年,1 月 前