警告:push.default未设置;其隐含值在Git 2.0中正在更改

我已经使用Git一段时间了,最近下载了一个更新,但当我尝试push时发现此警告消息出现。

warning: push.default is unset; its implicit value is changing inGit 2.0 from 'matching' to 'simple'. To squelch this messageand maintain the current behavior after the default changes, use:
git config --global push.default matching
To squelch this message and adopt the new behavior now, use:
git config --global push.default simple

我显然可以将其设置为提到的值之一,但它们是什么意思?simplematching有什么区别?

如果我在一个客户端上更改它,我是否需要在与我共享repos的其他客户端上执行任何操作?

256377 次浏览

它在的文档中有详细的解释,但我将尝试总结:

  • matching表示git push会将所有本地分支推送到远程上同名的分支。这很容易意外推送你不想推送的分支。

  • simple表示git push仅将当前分支推送到git pull将从拉取的分支,并检查它们的名称是否匹配。这是一种更直观的行为,这就是默认值更改为此的原因。

此设置仅影响本地客户端的行为,可以通过在命令行上显式指定要推送的分支来覆盖。其他客户端可以有不同的设置,它只影响当您没有指定要推送的分支时会发生什么

我意识到这是一篇旧文章,但由于我遇到了同样的问题,很难找到答案,我想我会添加一点。

所以@hammar的答案是正确的。在某种程度上,使用push.default simple就像在分支上配置跟踪,这样你就不需要在推拉时指定远程和分支。matching选项将把所有分支推送到默认遥控器上的对应分支(这是第一个设置的,除非你已经配置了存储库)。

我希望其他人在未来发现有用的一件事是,我在OS X Mountain Lion上运行Git 1.8,从未看到此错误。升级到Mavericks是突然出现的原因(运行git --version将显示git version 1.8.3.4 (Apple Git-47),这是我在更新到操作系统之前从未见过的。

如果您收到来自git的消息,抱怨配置中的值“简单”,请检查您的git版本。

在升级Xcode(在运行Mountain Lion的Mac上)后,它也将git从1.7.4.4升级到1.8.3.4,升级前启动的shell仍在运行git1.7.4.4并抱怨全局配置中push.default的值“简单”。

解决方案是关闭运行旧版本git的shell并使用新版本。

我想知道为什么我在Ubuntu 16.04(Git 2.7.4附带)上收到那个大警告消息,而不是在ArchLinux上。原因是警告在git2.8(2016年3月)中被删除:

在Git 2.0版本前后的过渡中,用户习惯于在没有设置的情况下运行“git ush”时得到相当响亮的警告push.default配置变量。我们不再警告,因为这是很久以前的事了

因此,如果您有Git 2.8及更高版本,您将不会看到警告,并且不需要设置push.default,除非您想更改默认的'simple'行为。

从其他线程带来了我的答案,可能会作为副本关闭…

GIT留档:git文档

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

matching将在本地推送所有个在远程上具有相同名称的分支。(不考虑您当前的工作分支)。这意味着可能会推送许多不同的分支,包括您甚至不想共享的分支。

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

push.default
如果没有refspec,则定义git ush应采取的操作不同的值非常适合于特定的工作流;例如,在纯粹的中央工作流(即获取源等于推送目的地),上游大概是什么你想要的。可能的值是:

没有-不推任何东西(错误),除非一个refspec是这主要是针对那些想要避免总是直截了当的错误。

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

上游-将当前分支推回其更改的分支通常集成到当前分支(称为@{上游})。此模式仅在您推送到您通常会从相同的存储库中提取(即中央工作流)。

简单-在集中式工作流中,像上游一样工作安全策略,上游分支名称不同时拒绝推送#36825;的地方

当推到一个不同于遥控器的遥控器时通常从,工作作为电流。这是最安全的选择,是适合初学者

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

匹配-推送两端具有相同名称的所有分支。这使您正在推送的存储库记住一组分支这将被推出(例如,如果您总是推送main t和master没有其他分支,您推送到的存储库将具有这两个分支,你当地的主机和主机将被推那里)。

要有效地使用此模式,您必须确保所有分支在运行git ush之前,您将推出已准备好被推出,因为这种模式的全部要点是允许您将所有如果你通常只完成一个分支的工作当其他分支未完成时,此模式为不适合你。此外,此模式不适合推进共享中央存储库,因为其他人可能会在那里添加新的分支,或者更新超出您控制范围的现有分支的提示。

这是目前的默认值,但Git 2.0将默认值更改为很简单