【问题标题】:Why are git private tags and associated private code uploaded to public repositories?为什么 git 私有标签和关联的私有代码会上传到公共存储库?
【发布时间】:2016-01-10 12:26:02
【问题描述】:

我维护了一个 git 树,其中包含许多分支,一些是私有的,一些是推送到 bitbucket 的公共存储库的。我最近无意中发现,如果我在私有分支中标记提交,然后使用

上传标记
git push --tags

导致私有分支中的所有提交和私有标签作为悬挂标签上传。这暴露了很多从未打算公开的私有代码,导致我删除了整个存储库并重新上传它而不使用违规标签以尝试解决问题。

我创建了一个示例 git 树,其中只有 2 个公共提交和一个在单独的私有分支中的私有提交,显示了推送标签如何在此处推送私有标签和相关的私有提交: https://bitbucket.org/ckolivas/testtag/commits/all PU1 和 PU2 是在主分支上制作的标签,PR1 是在私有分支上制作的标签。

想要推送标签会使其推送所有标签,即使它们不是主标签的一部分,这是正确的行为吗?这对我来说似乎违反直觉。

【问题讨论】:

  • 您需要保留两个不同的存储库,一个公共的和私有的。永远不要从私人仓库推送到公共仓库或 bitbucket 仓库(除非您非常小心。我建议您做一些事情 like this(除了没有电子邮件),这样您就可以确保没有私人仓库被转移)。

标签: git bitbucket


【解决方案1】:

想要推送标签会使其推送所有标签,即使它们不是主标签的一部分,这是正确的行为吗?这对我来说似乎违反直觉。

标签与 master 或任何其他分支无关。标签只是对提交的引用,实际上您使用 ``push --tags` 将它们“加载”到远程

“Private” 分支是未发布到远程存储库的本地分支。
“Public” 分支是远程存储库中的分支。


最佳实践

如果您使用标签,则更喜欢带注释的标签git tag -a,而不是“常规标签”git tag。它将创建带有与提交相同信息的注释标签,以便您稍后查看。


来自git push 文档:

git push --follow-tags

您也可以使用git push --follow-tags 推送所有标签

--关注标签

推送所有将被推送的引用没有这个选项,并且还推送远程缺少的引用/标签中的注释标签,但指向可从引用访问的提交-ish被推。

这也可以用配置变量push.followTags来指定。
有关详细信息,请参阅 git-config 中的 push.followTags

--标签

除了在命令行中明确列出的 refspecs 之外,refs/tags 下的所有 refs 都会被推送。

【讨论】:

    【解决方案2】:

    这是正确的行为,因为您正在上传all 标签。如果您只想上传与某些“公共”分支关联的标签,请明确列出这些标签,例如

    git push some_remote some_public_tag
    

    【讨论】:

      【解决方案3】:

      发件人the documentation for git push:

      --tags

      refs/tags 下的所有 refs 都被推送,除了命令行中明确列出的 refspecs。

      所以,是的,git push --tags 推送所有标签。

      【讨论】:

        猜你喜欢
        • 2011-12-27
        • 1970-01-01
        • 1970-01-01
        • 2019-08-30
        • 1970-01-01
        • 2011-09-01
        • 2016-10-18
        • 2022-12-19
        • 2012-02-02
        相关资源
        最近更新 更多