【问题标题】:git: push only specific tagsgit:只推送特定的标签
【发布时间】:2013-02-09 02:09:35
【问题描述】:

AFAIK,git push --tag 将 refs/tags 下的每个标签推送到远程。我想知道git中是否有办法只推送一些匹配通配符或正则表达式的标签?

例如,我的仓库有标签v1.0v1.1v2.0v2.1。我只想推v2.*。我试过了

git push <repo> refs/tags/v2.*

出现错误

致命:refspec 的远程部分在 refs/tags/v2.* 中不是有效名称。*

当然,我总能做到

cd .git && ls refs/tags/v2.* | xargs git push <repo>

但这并没有气味。

【问题讨论】:

    标签: git tags


    【解决方案1】:
    git tag | grep '^v2\.' | xargs --no-run-if-empty  git push <repo>
    
    • .git 可能不是目录,它可能根本不存在。子模块有指向根存储库的文件。或者您可以将GIT_DIR 设置为其他位置。
    • 当没有标签符合您的条件时,您不想进行推送。

    【讨论】:

    • 如果本地有一个名为“v2.0”的分支怎么办? git push 是如何解决歧义的?
    • 标签和分支同名是个坏主意。 Git 不能很好地处理这个问题。使用v2.0 作为标签,使用stable-2.x 之类的东西作为分支。示例:git.kernel.org/?p=linux/kernel/git/stable/…
    • 参见gitrevisions(“当有歧义时, 会通过以下规则中的第一个匹配来消除歧义”)。
    • 所以标签总是优先于分支。很高兴知道。约瑟夫,您能否将此信息添加到您的答案中,我将标记为完成。谢谢!
    • git tag | grep '^v2\.' 可以简化为git tag -l "v2\.*"
    【解决方案2】:
    git push <remote> tag <tag>
    

    在你的情况下是

    git push origin tag v2.*
    

    【讨论】:

    • 我更喜欢这个简单的解决方案。
    猜你喜欢
    • 2017-08-07
    • 1970-01-01
    • 2022-06-16
    • 2019-08-19
    • 2011-02-28
    • 2023-03-29
    • 2013-10-09
    • 1970-01-01
    • 2017-04-15
    相关资源
    最近更新 更多