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 -u
和git 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。