git push --all
和git push --mirror
之间的区别是什么?
我只知道这个:
--all
不会推送它,而--mirror
会推送它。这是对的吗?
还有其他差异吗?
答案 0 :(得分:8)
正如the documentation中所述:
- 所有
推送所有分支(即
refs/heads/
下的引用);不能使用 与其他< refspec>。- 镜
...指定镜像
refs/
下的所有引用(包括但不限于refs/heads/
,refs/remotes/
和refs/tags/
)/ UL>
所以 a ,如果不是 ,关键区别在于一个意味着refs/heads/*
,一个意味着refs/*
。 refs/heads/*
名称是分支名称。 refs/remotes/
中的任何内容都是远程跟踪名称,refs/tags/
中的任何内容都是标记名称。其他值得注意的名称空间包括refs/notes/
,refs/replace/
和单数refs/stash
。
--mirror
选项继续提及:
本地更新的refs将在远程端强制更新, 已删除的引用将从远程端删除。
因此--mirror
有效地暗示了--force
和--prune
; --all
没有。但是,如果您愿意,可以将--force
和/或--prune
添加到git push --all
。
始终由其他 Git决定是否遵守礼貌请求(不带--force
的请求)或命令(--force
)来更改其引用
对于已删除的本地分支,
--all
不会推送它,而--mirror
会推送它。
这是--prune
选项的结果:告诉你的Git使用--prune
意味着“要求他们删除名字空间中不属于我的名字”。
答案 1 :(得分:1)
在Git 2.24(2019年第四季度)中,您将无法使用git push --all
和--mirror
。
问题是:{em}有时会暗示--all
,当您从刚用--mirror
克隆的本地存储库中推送时。< br />
Filippo Valsorda最近发生了不幸的经历:
确定,git,WTF。这不在手册页中。
因此,将目标远程存储库设置为镜像时,应将先前的回归修复为“ git push --all
”。
请参见commit 8e4c8af的Thomas Gummerer (tgummerer
)(2019年9月2日)。
(由Junio C Hamano -- gitster
--在commit fe048e4中合并,2019年9月30日)
push
:设置--all
时禁止remote.<name>.mirror
和refspecs在将
--all
赋予'git push'或在存储库的配置中设置'--mirror
'时,不允许使用remote.<name>.mirror
或refspec进行推送,因为它们可以具有惊人的效果。
800a4ab(“push
:更早检查错误”,2018-05-16,Git v2.18.0-rc0)重构了此代码以更早进行检查,因此我们可以显式检查是否存在以下内容:标志,而不是其副作用。但是,如果在配置中设置了“
remote.<name>.mirror
”,则仅在调用“TRANSPORT_PUSH_MIRROR
”之后才设置do_push()
标志,因此检查将完全丢失它。这会给用户带来惊喜(见上文)。
通过在检查各种选项的兼容性之前确保已设置标记(如果适用)来解决此问题。