Jos*_*osh 275 git git-pull git-push git-remote
我一直在使用git一段时间,但我自己从来没有设置过新的远程仓库,我一直很好奇这样做.我一直在阅读教程,我对如何让"git push"工作感到困惑.
如果我只是用git push它要求我查看默认分支(?)指向?它为我提供的这两个选项有什么区别?
git config --global push.default matching
git config --global push.default simple
Run Code Online (Sandbox Code Playgroud)
匹配只是推动我在本地仓库上的任何分支,如果它们不匹配,我必须手动告诉它推送我所拥有的任何新的本地分支,对吗?这是最好的做法还是最简单的?
Lal*_*eva 348
git push 可以根据此配置推送所有分支或单个分支:
推动所有分支
git config --global push.default matching
Run Code Online (Sandbox Code Playgroud)
它会将所有分支推送到远程分支并合并它们.如果您不想推送所有分支,则只能推送当前分支.
仅推送当前分支
git config --global push.default simple
Run Code Online (Sandbox Code Playgroud)
因此,在我看来,最好使用此选项并按分支推送您的代码分支.最好手动和单独推送分支.
如需进一步阅读,请访问此博客文章
UpA*_*dam 89
来自GIT文档:Git Docs
下面给出了完整的信息.简而言之,simple只有current working branch在遥控器上也具有相同的名称时才会推动即使这样.这对于初学者来说是一个非常好的设置,并将成为默认设置GIT 2.0
而matching将在本地推送所有在遥控器上具有相同名称的分支.(不考虑您目前的工作分支).这意味着可能会推送许多不同的分支,包括您可能甚至不想分享的分支.
在我个人的用法中,我通常使用不同的选项:current推送当前工作分支,(因为我总是分支进行任何更改).但对于初学者我建议simple
push.default
定义git push应该采取的动作,如果没有明确给出refspec .不同的值非常适合特定的工作流程; 例如,在纯粹的中央工作流程中(即获取源等于推送目标),上游可能就是你想要的.可能的值是:没有 - 除非明确给出refspec,否则不要推送任何东西(错误输出).这主要是针对那些希望通过始终明确避免错误的人.
current - 推送当前分支以更新接收端具有相同名称的分支.适用于中央和非中央工作流程.
上游 - 将当前分支推回到分支,该分支的更改通常集成到当前分支(称为@ {upstream}).如果您要推送到通常从中拉出的相同存储库(即中央工作流),则此模式才有意义.
简单 - 在集中式工作流程中,像上游一样工作,如果上游分支的名称与本地分支不同,则会增加安全性以拒绝推送.
当推送到与您通常拉出的遥控器不同的遥控器时,请作为当前工作.这是最安全的选择,适合初学者.
此模式将成为Git 2.0中的默认模式.
匹配 - 推送两端具有相同名称的所有分支.这使得您正在推动的存储库记住将被推出的分支集合(例如,如果您总是在那里推送maint和master而没有其他分支,您推送的存储库将具有这两个分支,以及您的本地maint和master将被推到那里).
要有效地使用此模式,您必须确保在运行git push之前准备好推出所有要推出的分支,因为此模式的重点是允许您一次性推送所有分支.如果您通常只在一个分支上完成工作并推出结果,而其他分支未完成,则此模式不适合您.此模式也不适合推入共享中央存储库,因为其他人可能会在那里添加新分支,或者更新控制之外的现有分支的提示.
这是目前的默认设置,但Git 2.0会将默认设置更改为简单.
正如亚当的回答所示,现在push.default有很多选择。如果您发现自己在描述之间来回查看差异,请尝试使用此图表:
| 行为 | simple1 | upstream2 | current | matching | nothing3 |
|---|---|---|---|---|---|
| 推送已签出的分支 | \xe2\x9c\x94 | \xe2\x9c\x94 | \xe2\x9c\x94 | \xe2\x9c\x94 | |
| 推送其他分支 | \xe2\x9c\x94 | ||||
必须配置上游分支 | \xe2\x9c\x94 | \xe2\x9c\x94 | |||
| 上游分支 名称必须匹配 | \xe2\x9c\x94 | \xe2\x9c\x94 | \xe2\x9c\x94 |
1 simple是自 2014 年发布的 Git v2.0 以来的默认设置值。
\n 2 upstream有一个已弃用的别名tracking。
\n 3 nothing要求在 CLI 上指定所有选项。
我有各种存储库,每个存储库设置为simple、upstream、 和current。我发现这matching对我来说有点太疯狂了,但我可以想象它有用的情况。