git - git push --all --tags:不兼容
问题描述
当我尝试将所有分支和标签推送到远程时,git 会发出以下错误:
# git push origin --all --tags
fatal: --all and --tags are incompatible
但是,这有效:
# git push origin refs/heads refs/tags
Everything up-to-date
问题:
为什么 git 命名 push-all-branchs
--all
而不是--branches
or--heads
?git push origin --all
只推送分支,而不是所有参考。这种命名背后的哲学是什么?这是否意味着标签真的是 Git 存储库中的二等公民?为什么 git 不允许同时使用
--all
and--tags
?
PS。我知道有一个--follow-tags
选择。我知道有些人不推荐推送所有标签,但这个线程不是关于那个的。
man git-push
:
- 全部
推送所有分支(即 refs/heads/ 下的 refs);不能与其他 <refspec> 一起使用。
--标签
除了在命令行上明确列出的 refspecs 之外,所有 refs/tags 下的 refs 都会被推送。
解决方案
消息“ --all and --tags are incompatible
”来自builtin/push.c#cmd_push()
这是Marek Zawirski在2008 年 8 月的提交 b259f09中引入的(Git v1.6.1-rc1):
对非法组合选项进行更详细的推送
可能不清楚
--all
,--mirror
和--tags
/或显式 refspec 是git push
.Git 在这些情况下默默地失败了,而我们可以更恰当地抱怨它。
2008 年,Marek在 JGit中实现git push
,并提出了上面提到的补丁,并补充说:
这个我忘了,很久以前就报道过了。
似乎可能真的不清楚 git 失败
$ git push --tags --all
和类似情况发生了什么,因为它可能与实现相关。
[remote "origin"]
push = refs/heads/*
push = refs/tags/*
Jeff King 发现了一个错误(某种死锁),这可能就是这个补丁存在的原因。
发件人做了一个“告诉我更多”,然后等待回复。
接收者得到了更多的信息,但从不说其他任何东西,大概是因为他没有那个提交(因为 master 领先于任何标签)。
简而言之,单独推送分支和标签似乎比将它们推送在一起更容易支持。
通过“同时推送 git 提交和标签”、使用git push --follow-tags
或来查看更多信息git config --global push.followTags true
。
推荐阅读
- fabricjs - fabricjs 并非所有下流区域都是可选的
- php - php 登录 $_SESSION
- javascript - Mongoose 不创建索引 - 自动过期文档
- java - 如何在 spring-data-elasticsearch 中为存储库接口建模,以实现独占保存和读取访问以管理索引中的数据
- javascript - 如何在 D3 中设置具有多个子部分的自定义色阶?
- xcode - Azure 管道使用 ionic 构建 iOS
- android - 如何检查耳机或内置麦克风是否用于麦克风输入?
- javascript - Angular -> 将 JSON 数据解析为 Chart.js 条形图
- tensorflow - 关于tensorflow lite量化代码、论文和文档不一致的问题
- firebase - Firebase Cloud Function 我想更改所有用户数据