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

时间:2016-05-09 18:28:44

标签: git git-workflow

Git-config中,您可以看到:

  简单 - 在集中式工作流程中,像上游一样添加工作   如果上游分支的名称不同,则拒绝推送的安全性   来自当地的。

     

当推到与遥控器不同的遥控器时   通常来自,作为当前工作。

所以Git必须决定工作方式upstreamcurrent。但Git如何检测工作流程类型?如果理解我们想要与Git存储库进行通信,centralized是否认为工作流是bare

1 个答案:

答案 0 :(得分:5)

您链接的同一文档中的upstream说明为您提供了问题的答案。

  

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

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

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

现在,如果你推,Git知道你是否推送到你设置为跟踪分支的同一个遥控器的同一分支,以便推送你的本地分支。如果匹配,则在此上下文中定义为“中央工作流”,如果没有,则使用upstream或者如果没有设置跟踪分支(也是“不”),{{1}使用。

区别在于:

当前

  • 您的本地分支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不会跟踪任何远程分支:
    • 在推送到任何遥控器时,您会收到错误消息,说明您应设置上游分支