我使用git已经有一段时间了,但我自己从来没有设置过一个新的远程repo,我对此一直很好奇。我一直在阅读教程,我对如何让"git push“工作感到困惑。
如果我简单地使用git push
,它会要求我看到一个默认的分支(?)指向什么?它为我提供的这两个选项之间有什么区别?
git config --global push.default matching
git config --global push.default simple
匹配只是推送我的本地存储库上的任何分支,如果它们不匹配,我必须手动告诉它推送我的任何新的本地分支,对吗?这是使用的最佳实践,还是简单的最佳实践?
发布于 2014-02-19 05:06:32
git push
可以根据此配置推送所有分支或单个分支:
推送所有分支
git config --global push.default matching
它会将所有分支推送到远程分支,并合并它们。如果您不想推送所有分支,如果您完全指定了当前分支的名称,则可以推送当前分支,但这与default
没有太大区别。
如果命名的上游分支与相同,则仅推送当前分支
git config --global push.default simple
因此,在我看来,使用此选项并逐个分支推送您的代码更好。最好是手动或单独推送分支。
发布于 2014-02-19 06:26:15
来自GIT文档:Git Docs
下面提供了完整的信息。简而言之,仅当current working branch
在遥控器上具有相同的名称时,simple
才会推送它。对于初学者来说,这是一个非常好的设置,并且将成为GIT 2.0
中的默认设置
而matching
将在本地推送远程上具有相同名称的所有分支。(不考虑您当前的工作分支)。这意味着可能会推送许多不同的分支,包括那些您可能甚至不想共享的分支。
在我个人的使用中,我通常使用一个不同的选项:current
,它推送当前的工作分支(因为我总是分支任何更改)。但对于初学者,我建议使用simple
push.default
定义如果没有显式给出refspec,git推送应该采取的操作。不同的值非常适合特定的工作流;例如,在纯粹的中央工作流中(即抓取源等于推送目的地),上游可能是您想要的。可能的值包括:
nothing -除非显式给出refspec,否则不要推送任何内容(错误)。这主要是为那些希望通过始终明确的方式来避免错误的人而设计的。
当前-推送当前分支以更新接收端上具有相同名称的分支。可在中心工作流和非中心工作流中工作。
upstream -将当前分支推回到更改通常集成到当前分支中的分支(称为@{upstream})。只有当您推送到通常从中提取的相同存储库(即中央工作流)时,此模式才有意义。
简单-在集中式工作流中,如果上游分支的名称与本地分支名称不同,则会像上游一样工作,并增加安全性,以拒绝推送。
当推送到与您通常使用的遥控器不同的遥控器时,请按当前状态工作。这是最安全的选择,适合初学者。
此模式将成为Git2.0的默认模式。
匹配-推送两端具有相同名称的所有分支。这使得您正在推送的存储库记住将被推出的分支集(例如,如果您总是在那里推送maint和master,而没有其他分支,那么您推送到的存储库将具有这两个分支,并且您的本地maint和master将被推送到那里)。
要有效地使用此模式,您必须确保在运行git push之前,您将推出的所有分支都已准备好推出,因为此模式的主要目的是允许您一次性推出所有分支。如果您通常只在一个分支上完成工作并推送结果,而其他分支尚未完成,则此模式不适合您。此外,这种模式不适合推送到共享的中央存储库,因为其他人可能会在那里添加新的分支,或者更新您控制之外的现有分支的提示。
这是目前的默认设置,但是Git2.0会将默认设置更改为simple。
发布于 2016-01-01 06:33:21
Git v2.0发行说明
向后兼容性说明
当git push [$there]
没有说明要推送什么时,到目前为止,我们使用的是传统的“匹配”语义(只要那里已经有同名的分支,所有的分支都会被发送到远程)。在Git2.0中,默认的是“简单”语义,它推送:
仅将当前分支
您可以使用配置变量"push.default“来更改此设置。例如,如果你是一个想要继续使用“匹配”语义的老手,你可以将变量设置为“匹配”。请阅读文档以了解其他可能性。
如果在子目录内运行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中,git add <path>
习惯于忽略删除。如果你真的想要,你可以说git add --ignore-removal <path>
在<path>
中只添加添加或修改过的路径。
https://stackoverflow.com/questions/21839651
复制相似问题