首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >push.default“匹配”和“简单”的区别是什么?

push.default“匹配”和“简单”的区别是什么?
EN

Stack Overflow用户
提问于 2014-02-18 05:30:50
回答 3查看 124.3K关注 0票数 317

我使用git已经有一段时间了,但我自己从来没有设置过一个新的远程repo,我对此一直很好奇。我一直在阅读教程,我对如何让"git push“工作感到困惑。

如果我简单地使用git push,它会要求我看到一个默认的分支(?)指向什么?它为我提供的这两个选项之间有什么区别?

代码语言:javascript
复制
git config --global push.default matching
git config --global push.default simple

匹配只是推送我的本地存储库上的任何分支,如果它们不匹配,我必须手动告诉它推送我的任何新的本地分支,对吗?这是使用的最佳实践,还是简单的最佳实践?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-19 05:06:32

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

推送所有分支

代码语言:javascript
复制
git config --global push.default matching

它会将所有分支推送到远程分支,并合并它们。如果您不想推送所有分支,如果您完全指定了当前分支的名称,则可以推送当前分支,但这与default没有太大区别。

如果命名的上游分支与相同,则仅推送当前分支

代码语言:javascript
复制
git config --global push.default simple

因此,在我看来,使用此选项并逐个分支推送您的代码更好。最好是手动或单独推送分支。

票数 404
EN

Stack Overflow用户

发布于 2014-02-19 06:26:15

来自GIT文档:Git Docs

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

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

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

push.default

定义如果没有显式给出refspec,git推送应该采取的操作。不同的值非常适合特定的工作流;例如,在纯粹的中央工作流中(即抓取源等于推送目的地),上游可能是您想要的。可能的值包括:

nothing -除非显式给出refspec,否则不要推送任何内容(错误)。这主要是为那些希望通过始终明确的方式来避免错误的人而设计的。

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

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

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

当推送到与您通常使用的遥控器不同的遥控器时,请按当前状态工作。这是最安全的选择,适合初学者。

此模式将成为Git2.0的默认模式。

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

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

这是目前的默认设置,但是Git2.0会将默认设置更改为simple。

票数 98
EN

Stack Overflow用户

发布于 2016-01-01 06:33:21

Git v2.0发行说明

向后兼容性说明

git push [$there]没有说明要推送什么时,到目前为止,我们使用的是传统的“匹配”语义(只要那里已经有同名的分支,所有的分支都会被发送到远程)。在Git2.0中,默认的是“简单”语义,它推送:

仅将当前分支

  • 到具有相同名称的分支,并且仅当将当前分支设置为与该远程分支集成时(如果您正在推送到与从中提取相同的远程分支);或者
  • 仅将当前分支
  • 到具有相同名称的分支(如果您正在推送到不是通常从中提取的远程分支)。

您可以使用配置变量"push.default“来更改此设置。例如,如果你是一个想要继续使用“匹配”语义的老手,你可以将变量设置为“匹配”。请阅读文档以了解其他可能性。

如果在子目录内运行git add -ugit add -A,但没有指定要在命令行中添加哪些路径,则它们将对整个树进行操作,以与git commit -a和其他命令保持一致(这些命令仅用于对当前子目录进行操作)。如果您希望将操作限制在当前目录,则可以使用git add -u .git add -A .

git add <path>现在与git add -A <path>相同,因此git add dir/将注意到您从目录中删除的路径并记录删除。在旧版本的Git中,git add <path>习惯于忽略删除。如果你真的想要,你可以说git add --ignore-removal <path><path>中只添加添加或修改过的路径。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21839651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档