当我尝试将所有分支和标签推送到远程时,git发出以下错误:
# git push origin --all --tags
fatal: --all and --tags are incompatible
但是,这可行:
# git push origin refs/heads refs/tags
Everything up-to-date
问题:
为什么git命名所有分支机构--all
而不是--branches
或--heads
? git push origin --all
仅推送分支,而不推送所有引用。这种命名背后的哲学是什么?这是否意味着标签确实是Git回购中的二等公民?
为什么git不允许同时使用--all
和--tags
?
PS。我知道有一个--follow-tags
选项。我知道有些人不建议推送所有标签,但这与主题无关。
man git-push
:
-全部
推送所有分支(即refs / heads /下的refs);不能与其他
一起使用。 -标签
除了在命令行上明确列出的参考规范外,所有参考/标签下的参考都被推送。
答案 0 :(得分:1)
消息“ --all
来自builtin/push.c#cmd_push()
这是 Marek Zawirski 于2008年8月在commit b259f09中引入的(Git v1.6.1-rc1):
对选项的非法组合进行更详细的介绍
目前尚不清楚
--mirror
,--tags
,git push
和/或明确的refspecs 是$ git push --tags --all
的非法组合。在这些情况下,Git默默地失败了,尽管我们可以更适当地抱怨它。
2008年,Marek分别为implementing git push
in JGit和proposed 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}}”查看更多信息。