Git - push.default“匹配”和“简单”之间有什么区别

时间:2014-02-17 21:30:50

标签: git git-push git-pull git-remote

我现在已经使用git了一段时间,但我从来没有必须自己设置一个新的远程仓库,我一直很好奇这样做。我一直在阅读教程,我对如何让“git push”工作感到困惑。

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

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

匹配只是推送我在本地仓库上的任何分支,如果它们不匹配,我必须手动告诉它推送我拥有的任何新的本地分支,对吗?这是最好的做法还是最简单的?

3 个答案:

答案 0 :(得分:318)

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

推送所有分支

git config --global push.default matching

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

仅推送当前分支

git config --global push.default simple

因此,在我看来,最好使用此选项并按分支推送您的代码分支。最好手动和单独推送分支。

如需进一步阅读,请转到blog post

答案 1 :(得分:88)

来自GIT文档:Git Docs

以下提供完整信息。简而言之,simple只会推送current working branch,即使它只是在遥控器上也有相同的名称。这对初学者来说是一个非常好的设置,将成为GIT 2.0

中的默认设置

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

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

  

push.default
  如果没有refspec,则定义git push应该采取的操作   明确给出。不同的值非常适合特定的   工作流程;例如,在纯粹的中心工作流程中(即获取   source等于推送目的地),上游可能是什么   你要。可能的值有:

     什么都没有 - 除非refspec是,否则不要推送任何东西(错误输出)   明确给出。这主要是针对想要避免的人   总是明确的错误。

     

current - 推送当前分支以使用相同的更新分支   接收端的名称。适用于中央和非中央   工作流程。

     

上游 - 将当前分支推回到其更改的分支   通常集成到当前分支(称为   @{上游})。这种模式只有在你推动时才有意义   您通常会从中获取相同的存储库(即中央工作流程)。

     简单 - 在集中式工作流程中,像上游一样添加工作   如果上游分支的名称不同,则拒绝推送的安全性   来自当地的。

     

当推到与遥控器不同的遥控器时   通常来自,作为当前工作。这是最安全的选择   适合初学者。

     

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

     

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

     

要有效地使用此模式,您必须确保所有分支   在推出git push之前你会推出准备推出的,   因为这种模式的重点是允许你推动所有的   分店一气呵成。如果你通常只在一个分支上完成工作   推出结果,而其他分支未完成,这种模式是   不适合你。此模式也不适合推入​​共享   中央存储库,因为其他人可能会在那里添加新的分支,或   更新您控制之外的现有分支的提示。

     

目前这是默认设置,但Git 2.0会将默认设置更改为   简单。

答案 2 :(得分:2)

Git v2.0发行说明

向后兼容性说明

git push [$there]没有说要推送什么时,我们已经使用了 传统"匹配"到目前为止的语义(你的所有分支都被发送了 只要已经存在同名分支,就可以到远程控制台 在那边)。在Git 2.0中,默认值是" simple"语义, 推动:

  • 只有当前分支到同名的分支,并且只有 当前分支设置为与该远程集成时 分支,如果你正在推送到同一个遥控器;或

  • 只有当前分支到具有相同名称的分支,如果您 正在推送到一个不是你常去的地方的遥控器。

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

在子目录中运行git add -ugit add -A时 它们没有指定在命令行上添加哪些路径 在整个树上运行以与git commit -agit add -u .保持一致 其他命令(这些命令仅用于操作当前命令 子目录中)。如果您愿意,请说git add -A .git add <path> 将操作限制为当前目录。

git add -A <path>现在与git add dir/相同,所以 git add <path>会注意到您从目录中删除的路径 记录删除。在旧版本的Git中,使用了git add --ignore-removal <path> 忽略删除。你可以说<path>来 如果您真的想要,请在if x == '1'中添加仅添加或修改的路径。