ChatGPT解决这个技术问题 Extra ChatGPT

警告:push.default 未设置;它的隐含价值在 Git 2.0 中正在发生变化

我使用 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

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

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


D
David Waller

the docs 中对其进行了非常详细的解释,但我将尝试总结一下:

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

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

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


很高兴知道这个变化。当我刚接触 git 时,我不小心推送了所有本地分支,认为 git push 只会推送当前分支。
动机是,根据经验,大多数人期望新的默认行为
在警告消息本身中包含您非常清晰的摘要会好得多,而不是指示告诉我们打开文档并搜索字符串。
“文档中解释得非常清楚” 当然,如果您最终在正确的页面上,但是 git push 的手册甚至没有提到这个词 simple< /b> ,这可能是很多人最终来到这里的人。
hammar 的摘要是比 git 文档更简洁的解释。
w
wgp

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

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

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


在升级到 Mavericks 后,我也开始看到这一点。所以我猜 Git 和 Mavericks 是同时升级的,就像你暗示的那样。
g
grg

如果您从 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 并使用新版本。


我正在使用全新的 Xcode 安装(git 版本为 1.8.5.2),但在运行之前我仍然遇到此错误:git config --global push.default simple
E
Eugene Yarmash

我想知道为什么我在 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' 行为,否则您不会看到警告。


U
UpAndAdam

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

来自 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 会将默认设置更改为简单。