Warning: push.default is unset; its implicit value is changing in Git 2.0
我一直在使用Git一段时间,最近只下载了一个更新,当我尝试push时发现这个警告信息。
1 2 3 4 5 6 7 8 9
| 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之间有什么区别?
如果我在一个客户端上更改它,我是否需要在我共享回购的其他客户端上做任何事情?
-
stackoverflow.com/questions/948354/git-push-current-branch
-
stackoverflow.com/a/948397/1841194
-
注意:git 2。8(2016年3月)将删除该警告! 请参阅stackoverflow.com/a/22356644/6309
它在文档中有详细解释,但我会总结一下:
此设置仅影响本地客户端的行为,可以通过显式指定要在命令行上推送哪些分支来覆盖此设置。其他客户端可以具有不同的设置,它只会影响您未指定要推送哪些分支时发生的情况。
-
很高兴知道这种变化。当我刚开始使用git时,我不小心推动了所有本地分支机构认为git push只会推送当前分支。
-
这种变化背后有什么动机吗?
-
动机是,根据经验,大多数人都期望新的默认行为
-
是否有办法在全局设置中配置simple以通过所有计算机上的dotfiles进行交换,同时为旧版本的Git设置计算机特定~/dotfiles/.git/config设置matching且无法处理simple?
-
@JJD:存储库的本地$repo/.git/config文件将始终覆盖其他可用的gitconfig文件,包括~/.gitconfig。如果您移植全局配置,只需使用git config push.default matching覆盖旧存储库上的设置。
-
@Christopher这正是我所期待的和我所做的。但它不起作用。一旦我配置git config --global push.default simple Git 1.7.1停止工作并声明此错误:error: Malformed value for push.default: simple。
-
@JJD:发出该命令后,发出git config push.default matching(不要使用--global标志),然后再试一次。存储库的推送默认值应覆盖您的全局git配置。
-
@Christopher你错了。我按照你的建议设置了本地配置和全局配置。但它仍然失败。
-
在警告消息本身中有一个非常清晰的摘要,而不是告诉我们打开文档并搜索字符串的指令,这样会好得多。
-
"在文档中对此进行了非常明确的解释"当然,如果你最终出现在正确的页面上,那么git push的手册甚至没有提到simple这个词,这可能是很多人最终在这里取而代之的。
-
另外,谷歌通常更擅长记录软件的特定方面(我懒得搜索),而不是软件本身。谢谢!
-
等等,所以如果你执行git config --global push.default simple,你将如何覆盖它并通过一次性命令行推送匹配
-
hammar的摘要比git docs更简洁。
-
@MichaelKMadison,man git-push | grep match -B10说git push origin :将为你的simple配置选项的一次性matching覆盖提供技巧。适合我,但你必须指定远程名称(通常origin)。 git push --matching对我来说更有意义,但无论如何,git的大部分内容都在我头上。
-
实际上,git docs和hammar的解释一样简洁。然而,哈马尔的解释对我来说更有用,因为它解释了为什么除了以更容易理解的方式解释行为之外,你还要选择其中一个。通常情况下,git docs为git专家提供了解释。我读了push.default的git docs条目,但仍然丢失了。这个答案使事情变得非常清楚。
-
小心!如果在机器上设置push.default = simple,然后使用matching在其他人身上发出git push -f,请务必小心。它会强行推动所有远程分支机构!
-
"动机是,根据经验,大多数人都期望新的默认行为" - 实际上,'简单'有一些复杂性(需要设置上游分支等),我不认为,根据经验,任何人只是"期望" 。 current的此错误选项中未提及的内容似乎是人们在默认情况下实际期望的行为。
-
那么simple和upstream之间有什么区别?
-
@MarkReed上游是我刚刚找到的设置。这是因为当你不希望分支与服务器上的名称相同时(我想要使用复杂的子树合并配置)这意味着分支将被推送到你设置它的位置以跟踪'git branch -u project / foo'
我意识到这是一个很老的帖子但是因为我遇到了同样的问题并且很难找到答案我认为我会添加一些。
所以@ 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收到一条消息抱怨配置中的值simple,请检查你的git version。
升级XCode(在Mac运行Mountain Lion上),也将git从1.7.4.4升级到1.8.3.4后,在升级之前启动的shell仍在运行git 1.7.4.4并抱怨值< x2>用于全局配置中的push.default。
解决方案是关闭运行旧版git的shell并使用新版本!
-
我正在使用一个全新的Xcode安装(git是版本1.8.5.2),我仍然遇到此错误,直到我运行:git config --global push.default simple
我想知道为什么我在Ubuntu 16.04(Git 2.7.4附带)上收到了那个大警告信息,但是在Arch Linux上没有。原因是在Git 2。8(2016年3月)中删除了警告:
Across the transition at around Git version 2.0, the user used to
get a pretty loud warning when running"git push" without setting
push.default configuration variable. We no longer warn because the
transition was completed a long time ago.
因此,如果您使用Git 2.8及更高版本并且不需要设置push.default,则不会看到警告,除非您想要更改默认的'simple'行为。