我现在已经使用git了一段时间,但我从来没有必须自己设置一个新的远程仓库,我一直很好奇这样做。我一直在阅读教程,我对如何让“git push”工作感到困惑。
如果我只是使用git push
,它会要求我查看默认分支(?)以指向?它为我提供的这两个选项有什么区别?
git config --global push.default matching
git config --global push.default simple
匹配只是推送我在本地仓库上的任何分支,如果它们不匹配,我必须手动告诉它推送我拥有的任何新的本地分支,对吗?这是最好的做法还是最简单的?
答案 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是,否则不要推送任何东西(错误输出) 明确给出。这主要是针对想要避免的人 总是明确的错误。
如果没有refspec,则定义git push应该采取的操作 明确给出。不同的值非常适合特定的 工作流程;例如,在纯粹的中心工作流程中(即获取 source等于推送目的地),上游可能是什么 你要。可能的值有:current - 推送当前分支以使用相同的更新分支 接收端的名称。适用于中央和非中央 工作流程。
上游 - 将当前分支推回到其更改的分支 通常集成到当前分支(称为 @{上游})。这种模式只有在你推动时才有意义 您通常会从中获取相同的存储库(即中央工作流程)。
简单 - 在集中式工作流程中,像上游一样添加工作 如果上游分支的名称不同,则拒绝推送的安全性 来自当地的。当推到与遥控器不同的遥控器时 通常来自,作为当前工作。这是最安全的选择 适合初学者。
此模式将成为Git 2.0中的默认模式。
匹配 - 推送两端具有相同名称的所有分支。这个 使您正在推动的存储库记住分支集 这将被推出(例如,如果你总是推动maint和master 那里没有其他分支,你推送的存储库将有 这两个分支,你的当地maint和master将被推动 有)。
要有效地使用此模式,您必须确保所有分支 在推出git push之前你会推出准备推出的, 因为这种模式的重点是允许你推动所有的 分店一气呵成。如果你通常只在一个分支上完成工作 推出结果,而其他分支未完成,这种模式是 不适合你。此模式也不适合推入共享 中央存储库,因为其他人可能会在那里添加新的分支,或 更新您控制之外的现有分支的提示。
目前这是默认设置,但Git 2.0会将默认设置更改为 简单。
答案 2 :(得分:2)
当git push [$there]
没有说要推送什么时,我们已经使用了
传统"匹配"到目前为止的语义(你的所有分支都被发送了
只要已经存在同名分支,就可以到远程控制台
在那边)。在Git 2.0中,默认值是" simple"语义,
推动:
只有当前分支到同名的分支,并且只有 当前分支设置为与该远程集成时 分支,如果你正在推送到同一个遥控器;或
只有当前分支到具有相同名称的分支,如果您 正在推送到一个不是你常去的地方的遥控器。
您可以使用配置变量" push.default"改变 这个。如果你是一个想要继续使用的老人 "匹配"语义,您可以将变量设置为"匹配",for 例。阅读文档以了解其他可能性。
在子目录中运行git add -u
和git add -A
时
它们没有指定在命令行上添加哪些路径
在整个树上运行以与git commit -a
和git 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'
中添加仅添加或修改的路径。