git push.default = current和push.default = upstream有什么区别?

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. 

在大多数情况下,我会假定推送到一个分支的上游分支将推到一个相同的名称的分支相同,因为上游分支通常具有相同的名称,并且由于相同名称的分支(“当前” )通常会(或者总是按照定义?)在上游。 那有什么区别?

更新 : git-config的手册页已经更新(正如人们所期望的),所以在那里做出的区分现在可能会更清晰。

你已经总结了你的问题的不同之处。 upstream推送到configuration的上游分支,而current假设上游分支与当前本地分支具有相同的名称,并推送到该特定名称。 事实上,没有理由认为本地分行的上游追踪分行与本地分行本身同名。

例如,如果您在多个存储库或跨多个共享的开发人员远程工作,通常最终会跟踪同一分支的不同分支,如allen-mastersusan-master ,这两个分支跟踪Allen和Susan的回收分支, 分别。 在这种情况下, current将是不正确的设置,因为这些分支名称不存在于他们的遥控器上。 upstream ,但是,将工作得很好。

更实际的例子可能是跟踪developmentproduction库。 您的工作stream可能会为每个分支使用一个不同的主线分支,但这可能会令人困惑。 假设你是一个代码集成商,并且希望分别跟踪这两个存储库的master分支。

 git checkout -b production --track production/master git checkout -b development --track development/master 

现在你已经有了两个分支来跟踪他们各自的仓库,根本不使用master命名约定。 关于分支名称几乎没有混淆:他们明确地描述了他们跟踪的内容。 尽pipe如此, push.default = current是没有意义的,因为远程都不包含developmentproduction分支。

current会将当前分支推送到远程回购中具有相同名称的分支。

upstream将推动当前分支到上游分支。

上游分支是明确或隐含地定义为当前分支上游的分支。 这意味着默认情况下的推拉将与此分支同步。 上游分支可以与当前分支本身在相同的回购中。 你可以做一些有趣的事情,比如将本地主分支设置为本地特性(主题)分支的上游,并在它们之间进行推拉。

隐式上游设置是通过branch.autosetupmergeconfiguration值完成的。 你可以在git config帮助页面find文档。 显式的上游设置是通过对git branch命令的-u选项完成的。 详细信息请参阅帮助页面。