Git推送--全部vs--镜像
Git推送--全部vs--镜像,git,github,push,Git,Github,Push,git-push--all和git-push--mirror之间有什么区别 我只知道: 对于已删除的本地分支,--all不会推送它,而--mirror会推送它 这是正确的吗 还有其他区别吗?如中所述: --全部 推动所有分支(即refs/heads/下的refs);不能使用 与其他人一起。 --镜子 。。。指定镜像refs/(包括但不限于refs/heads/、refs/remotes/和refs/tags/)下的所有ref… 因此,如果不是关键区别的话,关键区别在于一个是指refs/hea
git-push--all
和git-push--mirror
之间有什么区别
我只知道:
- 对于已删除的本地分支,
不会推送它,而--all
会推送它--mirror
- 推动所有分支(即
refs/heads/
下的refs);不能使用
与其他人一起。
--镜子
- 。。。指定镜像
refs/
(包括但不限于refs/heads/
、refs/remotes/
和refs/tags/
)下的所有ref…
因此,如果不是关键区别的话,关键区别在于一个是指refs/heads/*
,另一个是指refs/*
。refs/heads/*
名称是分支名称。refs/remotes/
中的任何内容都是远程跟踪名称,refs/tags/
中的任何内容都是标记名称。其他值得注意的名称空间包括refs/notes/
,refs/replace/
,以及单数refs/stash
--mirror
选项接着提到:
本地更新的引用将在远程端强制更新,
删除的参照将从远程端删除
因此,--mirror
有效地暗示了--force
和--prune
<代码>--所有不可用。但是,如果愿意,您可以将--force
和/或--prune
添加到git push--all
总是由另一个Git来决定是否遵守礼貌的请求(那些在没有--force
的情况下发送的请求)或命令(--force
)来更改其引用
对于已删除的本地分支,--all
不会推送它,而--mirror
会推送它
这是--prune
选项的结果:告诉你的Git使用--prune
意味着“要求他们删除他们名字空间中不在我名字空间中的名字”。使用Git 2.24(2019年第4季度),你将无法使用Git push--all
和--mirror
问题是:--all
有时是隐含的,当您从本地存储库中推送刚刚用--mirror
克隆的存储库时 最近有一次不幸的经历: 好的,吉特,WTF。这不在手册页中 因此,修复早期对“
git push--all
”的回归,当目标远程存储库设置为镜像时,应该禁止该回归
参见作者(2019年9月2日)(于2019年9月30日合并)
push
:设置了remote..mirror
时,不允许--所有和refspecs
如果将--all
推送,或者将--mirror
指定给“git push”,或者在存储库的配置中设置了“remote..mirror
”,则不允许使用refspec推送,因为它们可能会产生意外的效果。
(“push
:更早地检查错误”,2018-05-16,Git v2.18.0-rc0)重构此代码以更早地进行检查,因此我们可以明确检查标志的存在,而不是其副作用
但是,当在配置中设置“remote..mirror
”时,TRANSPORT\u PUSH\u mirror
标志将仅在调用“do\u PUSH()
”后设置,因此检查将完全忽略它
这会给用户带来惊喜(见上文)
通过确保在检查各种选项的兼容性之前设置标志(如果合适)来修复此问题
这导致了Git2.29(2020年第4季度)的代码清理
参见,,,,(2020年9月30日)作者
(于2020年10月5日合并)
:将未使用的回购参数拖放到do\u push()
签字人:杰夫·金
在2019-09-02,Git v2.24.0-rc0中列出的(“pushremote
:disallow--all和refspecs when remote..mirror已设置”),我们停止使用“repo”参数,这将pushremote
处理移到其调用者
好的,谢谢你@torek。我发布这个问题是因为我在执行push--all
时出错。问题是我没有使用--force
选项,文档中说通常,该命令拒绝更新不是用于覆盖它的本地引用的祖先的远程引用。此标志将禁用检查。这可能会导致远程存储库丢失提交;小心使用。
这是我的情况,因为我已重置并删除了一些提交。这是正确的吗?是的。使用git reset
将分支名称“向后”移动通常需要某种强制推送。如果您的Git不是很古老,那么您可以使用“force with lease”选项以及straight--force
,这可以让您的Git告诉另一个Git:我相信您的分支名称B标识了一些提交
,如果是这样,则让B标识另一个提交。这一个更安全,因为如果你搞错了,他们会拒绝推送,并出现错误:我的B没有识别提交,所以我什么也没做。