Git如何检测工作流的类型:中央或非中心

has*_*ian 1 git git-workflow

Git-config中,您可以看到:

简单 - 在集中式工作流程中,像上游一样工作,如果上游分支的名称与本地分支不同,则会增加安全性以拒绝推送.

当推送到与您通常拉出的遥控器不同的遥控器时,请作为当前工作.

所以Git必须那样工作之间做出选择upstream或者current.但如何Git检测工作流程类型?是否Git觉得工作流程是centralized,如果明白我们想要一个沟通bare信息库?

Vam*_*ire 5

upstream您链接的相同文档中的描述为您提供了问题的答案.

如果您要推送到通常从中拉出的相同存储库(即中央工作流),则此模式才有意义.

因此,在这种情况下,"中央工作流程"被定义为"无论您是使用rebase还是合并,都可以推送到同一个仓库,从而获得最新的上游变更".(pull = fetch + merge或fetch + rebase,具体取决于配置和参数)

无论您是否具有"中央工作流程",在这种情况下,每次推送呼叫都可能不同.如果您要为您的本地分支设置远程跟踪分支(上游分支),那么此跟踪分支是您通常从中获取更新的地方(它是您跟踪的分支),因此如果您执行rebase或合并(或拉当然,因为它是fetch + merge或fetch + pull)而没有指定要重新绑定到什么或要合并什么,然后使用远程跟踪分支.

现在,如果你推动,Git知道你是否推送到你设置为跟踪分支的同一个遥控器的同一分支,以便推送你的本地分支.如果匹配,则在此上下文中具有被定义为"中央工作流"的内容,并且upstream如果没有或者如果没有设置跟踪分支(也是"非"的情况),current则使用该中心工作流.

不同之处是:

目前:

  • 您的本地分支foo跟踪远程分支bar/baz:
    • 在推送到任何遥控器时,foo如果不另外说明,则按下分支.
  • 您的本地分支foo跟踪远程分支bar/foo:
    • 在推送到任何遥控器时,foo如果不另外说明,则按下分支.
  • 您的本地分支foo不跟踪任何远程分支:
    • 在推送到任何遥控器时,foo如果不另外说明,则按下分支.

上游:

  • 您的本地分支foo跟踪远程分支bar/baz:
    • 在推送到远程时bar,baz如果不另外说明,则推送到分支.
    • 在推送到任何其他遥控器时,您会收到一条错误消息,指出您应该准确指定推送位置,因为遥控器不是上游遥控器
  • 您的本地分支foo跟踪远程分支bar/foo:
    • 在推送到远程时bar,foo如果不另外说明,则推送到分支.
    • 在推送到任何其他遥控器时,您会收到一条错误消息,指出您应该准确指定推送位置,因为遥控器不是上游遥控器
  • 您的本地分支foo不跟踪任何远程分支:
    • 在推送到任何遥控器时,您会收到一条错误消息,说您应该设置上游分支

简单:

  • 您的本地分支foo跟踪远程分支bar/baz:
    • 在推送到远程时bar,您会收到一个错误,告诉您在名称不匹配时显式推送
    • 在推送到任何其他遥控器时,您可以推送到分支机构foo.
  • 您的本地分支foo跟踪远程分支bar/foo:
    • 在推送到任何遥控器时,foo如果不另外说明,则按下分支.
  • 您的本地分支foo不跟踪任何远程分支:
    • 在推送到任何遥控器时,您会收到一条错误消息,说您应该设置上游分支