Git – push.default“匹配”和“简单”之间的区别是什么?

我一直在使用git,但是我从来没有必要自己创build一个新的远程回购,我一直很好奇。 我一直在阅读教程,我很困惑如何让“git推”工作。

如果我只是使用git push它要求我看到一个默认分支(?)指向? 它提供给我的这两个选项有什么区别?

 git config --global push.default matching git config --global push.default simple 

匹配只是推动我在本地回购的任何分支,如果他们不匹配,我不得不手动告诉它推动任何新的本地分支,对吗? 这是使用或最简单的最佳做法吗?

git push可以依赖于这个configuration推送所有分支或者一个分支:

推送所有分支

 git config --global push.default matching 

它会将所有分支推送到远程分支并合并它们。 如果您不想推送所有分支,则只能推送当前分支。

只推送当前分支

 git config --global push.default simple 

所以,在我看来,更好的方法是使用这个选项,并通过分支推送你的代码。 手动和单独推动分支更好。

为了进一步阅读,请转到这篇博文

从GIT文档: Git文档

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

matching则会推送本地所有在远端具有相同名称的分支。 (不考虑你目前的工作分支)。 这意味着可能会推出许多不同的分支机构,包括那些你可能甚至不想分享的分支机构。

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

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

没有 – 不要推动任何东西(出错),除非明确给出refspec。 这主要是针对那些想要避免错误的人而始终明确的。

当前 – 推送当前分支在接收端更新同名的分支。 适用于中央和非中央工作stream程。

上游 – 将当前分支推回到其更改通常集成到当前分支中的分支(称为@ {upstream})。 这种模式只有在你推送到你通常需要的同一个仓库(例如中央工作stream程)时才有意义。

简单 – 在集中式工作stream程中,像上游一样工作,如果上游分支的名称与本地名称不同,则拒绝推送。

当推送到一个不同于远程的远程设备时,您通常会从当前设备开始工作。 这是最安全的select,适合初学者。

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

匹配 – 推送两端同名的所有分支。 这使得你正在推动的存储库记住将被推出的分支的集合(例如,如果你总是推动主线和主而没有其他分支,则推送到的存储库将具有这两个分支,并且您的本地主线和主将被推到那里)。

为了有效地使用这个模式,你必须确保你所有推出的分支都可以在运行git push之前被推出,因为这个模式的全部要点是让你一次推送所有的分支。 如果您通常只完成一个分支的工作并推出结果,而其他分支未完成,则此模式不适合您。 此外,此模式不适合推入​​共享的中央存储库,因为其他人可能会在其中添加新的分支,或更新您的控制之外的现有分支的提示。

这是目前的默认,但Git 2.0会改变默认为简单。

Git v2.0发行说明

向后兼容性说明

git push [$there]没有说明推送什么的时候,我们已经使用了传统的“匹配”语义(只要已经有相同名称的分支在那里,所有分支都被发送到远程)。 在Git 2.0中,缺省是现在的“简单”语义,它推动:

  • 只有当前分支具有相同名称的分支,并且只有当当前分支设置为与该远程分支集成时,如果您正在推送到您从同一个远程获取; 要么

  • 只有当前分支具有相同名称的分支,如果您推送到远不是您通常从中获取的远程。

你可以使用configurationvariables“push.default”来改变它。 例如,如果您是一位想要继续使用“匹配”语义的老人,则可以将该variables设置为“匹配”。 阅读文档以了解其他可能性。

git add -ugit add -A在一个子目录内运行,而不指定在命令行上添加哪些path时,它们在整个树上运行,以便与git commit -a和其他命令一致(这些命令只用于当前子目录)。 说git add -u . 或者git add -A . 如果你想限制操作到当前目录。

git add <path>现在与git add -A <path>相同,所以git add dir/会注意从目录中删除的path并logging删除。 在旧版本的Git中, git add <path>用来忽略删除。 如果你真的想,你可以说git add --ignore-removal <path>git add --ignore-removal <path>中添加只添加或修改的path。