Git - push.default"匹配"和"简单"之间有什么区别

Jos*_*osh 275 git git-pull git-push git-remote

我一直在使用git一段时间,但我自己从来没有设置过新的远程仓库,我一直很好奇这样做.我一直在阅读教程,我对如何让"git push"工作感到困惑.

如果我只是用git push它要求我查看默认分支(?)指向?它为我提供的这两个选项有什么区别?

git config --global push.default matching
git config --global push.default simple
Run Code Online (Sandbox Code Playgroud)

匹配只是推动我在本地仓库上的任何分支,如果它们不匹配,我必须手动告诉它推送我所拥有的任何新的本地分支,对吗?这是最好的做法还是最简单的?

Lal*_*eva 348

git push 可以根据此配置推送所有分支或单个分支:

推动所有分支

git config --global push.default matching
Run Code Online (Sandbox Code Playgroud)

它会将所有分支推送到远程分支并合并它们.如果您不想推送所有分支,则只能推送当前分支.

仅推送当前分支

git config --global push.default simple
Run Code Online (Sandbox Code Playgroud)

因此,在我看来,最好使用此选项并按分支推送您的代码分支.最好手动和单独推送分支.

如需进一步阅读,请访问此博客文章

  • 我喜欢来自@UpAndAdam的`push.default current`.不知道. (15认同)
  • 请注意,`simple`不再是一个选项.在`1.7.8.4`(和更早的?)中,当你尝试推送时会导致错误.但是'current`仍然可用 (2认同)

UpA*_*dam 89

来自GIT文档:Git Docs

下面给出了完整的信息.简而言之,simple只有current working branch在遥控器上也具有相同的名称时才会推动即使这样.这对于初学者来说是一个非常好的设置,并将成为默认设置GIT 2.0

matching将在本地推送所有在遥控器上具有相同名称的分支.(不考虑您目前的工作分支).这意味着可能会推送许多不同的分支,包括您可能甚至不想分享的分支.

在我个人的用法中,我通常使用不同的选项:current推送当前工作分支,(因为我总是分支进行任何更改).但对于初学者我建议simple

push.default
定义git push应该采取的动作,如果没有明确给出refspec .不同的值非常适合特定的工作流程; 例如,在纯粹的中央工作流程中(即获取源等于推送目标),上游可能就是你想要的.可能的值是:

没有 - 除非明确给出refspec,否则不要推送任何东西(错误输出).这主要是针对那些希望通过始终明确避免错误的人.

current - 推送当前分支以更新接收端具有相同名称的分支.适用于中央和非中央工作流程.

上游 - 将当前分支推回到分支,该分支的更改通常集成到当前分支(称为@ {upstream}).如果您要推送到通常从中拉出的相同存储库(即中央工作流),则此模式才有意义.

简单 - 在集中式工作流程中,像上游一样工作,如果上游分支的名称与本地分支不同,则会增加安全性以拒绝推送.

当推送到与您通常拉出的遥控器不同的遥控器时,请作为当前工作.这是最安全的选择,适合初学者.

此模式将成为Git 2.0中的默认模式.

匹配 - 推送两端具有相同名称的所有分支.这使得您正在推动的存储库记住将被推出的分支集合(例如,如果您总是在那里推送maint和master而没有其他分支,您推送的存储库将具有这两个分支,以及您的本地maint和master将被推到那里).

要有效地使用此模式,您必须确保在运行git push之前准备好推出所有要推出的分支,因为此模式的重点是允许您一次性推送所有分支.如果您通常只在一个分支上完成工作并推出结果,而其他分支未完成,则此模式不适合您.此模式也不适合推入​​共享中央存储库,因为其他人可能会在那里添加新分支,或者更新控制之外的现有分支的提示.

这是目前的默认设置,但Git 2.0会将默认设置更改为简单.

  • 我不确定我是否明白你的意思。在任何模式下,如果你说“git push origin master”,它都会做同样的事情。模式和默认值的要点通常是当您简单地说“git Push”并且不告诉它远程或分支时会发生什么。什么默认设置?你的意思是push.default的默认设置?哪个版本的 git 的默认设置...如果你不明白你的评论是非常模糊的。 (2认同)

Mic*_*ael 6

正如亚当的回答所示,现在push.default很多选择。如果您发现自己在描述之间来回查看差异,请尝试使用此图表:

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
行为simple1upstream2currentmatchingnothing3
推送已签出的分支\xe2\x9c\x94\xe2\x9c\x94\xe2\x9c\x94\xe2\x9c\x94
推送其他分支\xe2\x9c\x94

必须配置上游分支
\xe2\x9c\x94\xe2\x9c\x94
上游分支
名称必须匹配
\xe2\x9c\x94\xe2\x9c\x94\xe2\x9c\x94
\n
\n

1 simple是自 2014 年发布的 Git v2.0 以来的默认设置值。
\n 2 upstream有一个已弃用的别名tracking
\n 3 nothing要求在 CLI 上指定所有选项。

\n
\n

我有各种存储库,每个存储库设置为simpleupstream、 和current。我发现这matching对我来说有点太疯狂了,但我可以想象它有用的情况。

\n