git-config的手册页列出了push.default的以下选项:
nothing - do not push anything.
matching - push all matching branches. All branches having the same name in both ends are considered to be matching. This is the default.
upstream - push the current branch to its upstream branch.
tracking - deprecated synonym for upstream.
current - push the current branch to a branch of the same name.
在大多数情况下,我会假设推送到分支的上游分支与推送到同名的分支是相同的,因为上游分支通常具有相同的名称,并且由于相同名称的分支(“当前”)通常(或者总是根据定义?)往上游走。那么有什么不同呢?
更新:The man page for git-config已经更新了(不出所料),所以there的区别现在可能更清晰了。
发布于 2012-08-09 05:23:19
您已经总结了问题中的差异。upstream
推送到已配置的上游分支,而current
假定上游分支与当前本地分支同名,并推送到该特定名称。实际上,没有理由假设本地分支的上游跟踪分支与本地分支本身具有相同的名称。
例如,如果您在多个存储库中工作,或者在许多共享的开发人员远程数据库中工作,那么您最终通常会跟踪同一分支的不同分支,例如allen-master
或susan-master
,这两个分支分别跟踪艾伦和苏珊的存储库中的master
分支。在这种情况下,current
可能是不正确的设置,因为这些分支名称不存在于它们的远程设备上。然而,upstream
可以很好地工作。
一个更实际的例子可能是同时跟踪development
和production
存储库。您的工作流程可能会使用不同的主线分支,但这可能会让人感到困惑。假设您是一名代码集成者,希望分别跟踪两个存储库的master
分支。
git checkout -b production --track production/master
git checkout -b development --track development/master
现在,您已经有了两个跟踪各自存储库的分支,这两个分支都不使用master
命名约定。分支名称很容易混淆:它们显式地描述了它们跟踪的内容。然而,push.default = current
没有任何意义,因为两个remote都不包含development
或production
分支。
发布于 2013-05-12 16:11:57
current
会将当前分支推送到远程存储库上具有相同名称的分支。
upstream
会将当前分支推送到上游分支。
上游分支是已显式或隐式定义为当前分支上游的分支。这意味着默认情况下推送和拉取将与此分支同步。上游分支可以在与当前分支本身相同的存储库中。您可以做一些有趣的事情,比如将本地主分支设置为本地功能(主题)分支的上游,并在它们之间进行推拉。
隐式上行设置通过branch.autosetupmerge
配置值完成。您可以在git config
帮助页面中找到文档。显式上行设置是通过git branch
命令的-u
选项完成的。有关详细信息,请参阅帮助页面。
https://stackoverflow.com/questions/11872984
复制相似问题