首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >git push.default=current和push.default=upstream有什么不同?

git push.default=current和push.default=upstream有什么不同?
EN

Stack Overflow用户
提问于 2012-08-09 04:52:23
回答 2查看 49.1K关注 0票数 91

git-config的手册页列出了push.default的以下选项:

代码语言:javascript
复制
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的区别现在可能更清晰了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-09 05:23:19

您已经总结了问题中的差异。upstream推送到已配置的上游分支,而current假定上游分支与当前本地分支同名,并推送到该特定名称。实际上,没有理由假设本地分支的上游跟踪分支与本地分支本身具有相同的名称。

例如,如果您在多个存储库中工作,或者在许多共享的开发人员远程数据库中工作,那么您最终通常会跟踪同一分支的不同分支,例如allen-mastersusan-master,这两个分支分别跟踪艾伦和苏珊的存储库中的master分支。在这种情况下,current可能是不正确的设置,因为这些分支名称不存在于它们的远程设备上。然而,upstream可以很好地工作。

一个更实际的例子可能是同时跟踪developmentproduction存储库。您的工作流程可能会使用不同的主线分支,但这可能会让人感到困惑。假设您是一名代码集成者,希望分别跟踪两个存储库的master分支。

代码语言:javascript
复制
git checkout -b production --track production/master
git checkout -b development --track development/master

现在,您已经有了两个跟踪各自存储库的分支,这两个分支都不使用master命名约定。分支名称很容易混淆:它们显式地描述了它们跟踪的内容。然而,push.default = current没有任何意义,因为两个remote都不包含developmentproduction分支。

票数 72
EN

Stack Overflow用户

发布于 2013-05-12 16:11:57

current会将当前分支推送到远程存储库上具有相同名称的分支。

upstream会将当前分支推送到上游分支。

上游分支是已显式或隐式定义为当前分支上游的分支。这意味着默认情况下推送和拉取将与此分支同步。上游分支可以在与当前分支本身相同的存储库中。您可以做一些有趣的事情,比如将本地主分支设置为本地功能(主题)分支的上游,并在它们之间进行推拉。

隐式上行设置通过branch.autosetupmerge配置值完成。您可以在git config帮助页面中找到文档。显式上行设置是通过git branch命令的-u选项完成的。有关详细信息,请参阅帮助页面。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11872984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档