git push --all --tags:不兼容

时间:2018-07-10 04:36:47

标签: git git-push

当我尝试将所有分支和标签推送到远程时,git发出以下错误:

# git push origin --all --tags
fatal: --all and --tags are incompatible

但是,这可行:

# git push origin refs/heads refs/tags
Everything up-to-date

问题:

  1. 为什么git命名所有分支机构--all而不是--branches--headsgit push origin --all仅推送分支,而不推送所有引用。这种命名背后的哲学是什么?这是否意味着标签确实是Git回购中的二等公民?

  2. 为什么git不允许同时使用--all--tags


PS。我知道有一个--follow-tags选项。我知道有些人不建议推送所有标签,但这与主题无关。


man git-push

  

-全部

     

推送所有分支(即refs / heads /下的refs);不能与其他一起使用。

     

-标签

     

除了在命令行上明确列出的参考规范外,所有参考/标签下的参考都被推送。

1 个答案:

答案 0 :(得分:1)

消息“ --all来自builtin/push.c#cmd_push()

这是 Marek Zawirski 于2008年8月在commit b259f09中引入的(Git v1.6.1-rc1):

  

对选项的非法组合进行更详细的介绍

     

目前尚不清楚--mirror--tagsgit push和/或明确的refspecs   是$ git push --tags --all的非法组合。

     

在这些情况下,Git默默地失败了,尽管我们可以更适当地抱怨它。

2008年,Marek分别为implementing git push in JGitproposed that patch mentioned above,并补充:

  

我忘了这个,很久以前就有报道。

     

似乎真的不清楚git在[remote "origin"] push = refs/heads/* push = refs/tags/* 等上失败了,这可能与实现有关。

it is possible to configure a remote带有:

git push --follow-tags

Jeff King discovered a bug(有点死锁),可能是存在此修补程序的原因。

  

发送者执行“更多信息”,然后等待回退。
  接收者可以获得更多的信息,但大概什么也没说   因为他没有那个承诺(因为主人领先于任何   标签)。

简而言之,分别推送分支和标签似乎比一起推送更容易支持。

通过“ Push git commits & tags simultaneously”,“ git config --global push.followTags true”或“ {{1}}”查看更多信息。