新的`branch`参数在git.latest状态中意味着什么,我该如何使用它?

时间:2016-02-09 18:57:09

标签: git salt-stack

我们刚刚从Salt 2014.7升级到2015.8,我对git.latest状态中的新行为感到困惑,即新的branch参数。

在我们的暂存环境中,我们习惯于部署到一个命名分支,git.latest state从支柱中获取并跳入rev参数。像这样:

{% set branch = salt['pillar.get']('myapp:branch', 'master') %}
{% set code_prefix = "/tmp/myapp" %}

{{ code_prefix }}:
  file.directory:
    - user: myapp
    - group: myapp

myapp-repo:
  git.latest:
    - name: git@github.com:MyOrg/myrepo.git
    - rev: {{ branch }}
    - force_checkout: true
    - force_clone: true
    - force_fetch: true
    - force_reset: true
    - target: {{ code_prefix }}
    - user: myapp
    - require:
        - file: {{ code_prefix }}

升级后,我们开始在某些回购中遇到奇怪的git错误;我不确定究竟是什么导致了错误,但它似乎与工作目录的rev发生变化但本地命名分支没有改变的新行为有关,因此它与远程版本不匹配当地分公司。

长话短说,将branch参数设置为git.latest似乎可以解决问题:

myapp-repo:
  git.latest:
    - name: git@github.com:MyOrg/myrepo.git
    - rev: {{ branch }}
    - branch: {{ branch }}
    - force_checkout: true
    - force_clone: true
    - force_fetch: true
    - force_reset: true
    - target: {{ code_prefix }}
    - user: myapp
    - require:
        - file: {{ code_prefix }}

但我想知道:为什么我突然需要branch参数?如果我部署sha或标签而不是分支名称会发生​​什么?

我应该担心吗?我做错了吗?

1 个答案:

答案 0 :(得分:1)

branch参数指定在目标中使用哪个分支来签出rev分支/标记/提交。如果您不使用此参数,则rev将在目标中处于活动状态的任何分支中签出。

我认为文档很清楚:

  

检查指定转速的分支的名称。如果不   指定,然后Salt不关心本地使用什么分支   并且只会使用当前存在的任何分支。

     

注意:如果未指定,则表示本地分支名称不会   如果存储库重置为另一个分支/标记/ SHA1,则更改。

我不知道之前的行为是什么。现在,如果您在未指定本地分支的情况下签出提交或标记,则会将本地签出分支硬复位到指定的rev,而不管其先前的状态(假设您使用force_reset=True

就个人而言,我使用远程存储库中不存在的本地分支名称,因此不会混淆已签出的内容。