Git:当将一个signle标签推送到远程时,如何推送包含此标签的分支?

时间:2017-02-22 07:31:24

标签: git

使用git push origin <tag_name>可以将标记推送到远程服务器,如This Question所示。但是,如果包含此标记的本地分支位于远程服务器之前,则此推送操作将创建包含此标记的匿名分支。

当另一个开发人员试图获取它时,没有任何反应。 (匿名分支不会被取出!?)

因此,问题是: 当我想要推送标签时,如何推动分支(最好只到标签的位置)?

由于我还不确定要推送分支的所有历史记录(但我肯定会推到标记点,因为我想推送标记),推送分支更方便只到标签的位置。

任何解决方案?

2 个答案:

答案 0 :(得分:0)

默认情况下,git fetch(或git pull)无法获取代码。

如果要获取远程标记:git fetch --tags

答案 1 :(得分:0)

  

当另一个开发人员试图获取它时,没有任何反应。 (匿名分支不会被取出!?)

匿名分支是有问题的。 Git的部分人认为他们是分支,而部分则不是。如果它们确实存在,那么每个提交都是它自己的匿名分支。 1 在大多数情况下,它可能更好地考虑选择一个提交,有或没有选择部分或全部它的祖先。在没有祖先的情况下选择提交bacacab 可以获得一次提交,并使用祖先选择使其成为匿名分支。

在任何情况下,git fetch总是复制未更改 - 因为它必须由提交对象本身和那些引用的东西组成:所需的任何树或blob,以及任何早期所需的提交。 2 对于带注释的标签对象,Git不加改变地复制标签对象本身,并将标签的目标对象添加到所需的对象集中(如果尚未存在则复制)。 >从。所以这意味着必须一个名字。但这是其他 Git中的名称,在另一个存储库中; 存储库中使用的名称(如果有)是您可以控制的。

事实证明,如果Git只提取标签名称,并且未指示显式复制标签名称,则会出现类似错误,它根本无法写入任何内容({{1除外)在某些情况下。请参阅my answerWhy is git fetch not fetching any tags?简而言之,如果您FETCH_HEAD,您将获得他们的 - 其他Git标签名称被复制到您的同名标签中自己的存储库,然后您可以使用该标记名称来查找提交(及其祖先)。

1 就此而言,单个提交可能是无限数量的匿名分支的提示。谁会说,如果缺少一个名字与第二个缺少名字相同?显然,以git fetch --tags结尾的匿名分支与以dadf00d结尾的匿名分支不同,因此无名称肯定不会与无名称匹配。那么bl00de1f为什么,或者没有,ac0ffee的无名称与ac0ffee的无名相匹配? (这是一个修辞/哲学问题,旨在让人们考虑Git中提交和分支名称的本质,而不是得到具体答案 - 尽管我确实有自己的具体答案。:-))

2 对于浅克隆,这会被修改。在这里,提交被复制到某些&#34;深度&#34;值,然后Git插入浅移植,人为地假装提交没有父(通过将提交ID写入.git/shallow)。但提交实际上是完整复制的;它只是被截断的图形行走。