1648

我使用 Git 已经有一段时间了,最​​近下载了一个更新,但当我尝试push.

warning: push.default is unset; its implicit value is changing in 
Git 2.0 from 'matching' to 'simple'. To squelch this message 
and 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

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

如果我在一个客户上更改它,我是否需要在与我共享 repos 的其他客户上做任何事情?

4

5 回答 5

2163

文档中对此进行了非常详细的解释,但我将尝试总结一下:

  • matching意味着git push会将您所有的本地分支推送到远程上具有相同名称的分支。这使得意外推送您不打算的分支很容易。

  • simple意味着git push只会将当前分支推送到git pull将从中拉出的分支,并检查它们的名称是否匹配。这是一种更直观的行为,这就是为什么将默认值更改为此的原因。

此设置仅影响本地客户端的行为,并且可以通过在命令行上明确指定要推送的分支来覆盖。其他客户端可以有不同的设置,它只会影响当你没有指定要推送的分支时发生的情况

于 2012-10-30T22:11:49.733 回答
19

我意识到这是一篇旧帖子,但是当我遇到同样的问题并且找不到答案时,我想我会补充一点。

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

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

于 2013-10-26T17:00:05.747 回答
8

如果您从 git 收到一条消息,抱怨配置中的值 'simple',请检查您的 git 版本。

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

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

于 2014-01-31T15:35:00.327 回答
2

我想知道为什么我在 Ubuntu 16.04(Git 2.7.4 附带)上收到了这么大的警告消息,但在 Arch Linux 上却没有。原因是在Git 2.8(2016 年 3 月)中删除了警告:

在 Git 2.0 版左右的过渡期间,用户在没有设置 push.default 配置变量的情况下运行“git push”时会收到非常响亮的警告。我们不再发出警告,因为过渡已在很久以前完成。

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

于 2018-03-19T13:10:12.760 回答
0

从其他可能重复关闭的线程中带来了我的答案...

来自 GIT 文档:Git Docs

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

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

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

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

nothing - 除非明确给出 refspec,否则不要推送任何内容(错误输出)。这主要适用于希望通过始终明确来避免错误的人。

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

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

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

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

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

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

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

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

于 2020-07-27T14:01:11.533 回答