新的“分支”参数在 git.latest 状态中是什么意思,我如何使用它



我们最近刚刚从 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 或标签而不是分支名称,会发生什么情况?

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

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

我认为文档对此非常清楚:

要签出指定修订版的分支的名称。如果不是 指定,那么 Salt 将不在乎本地使用哪个分支 并且只会使用当前存在的任何分支。

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

我不知道之前的行为是什么。现在,如果您在未指定本地分支的情况下签出提交或标记,则本地签出分支将硬重置为指定的rev,无论其以前的状态如何(前提是您使用force_reset=True(

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

相关内容

最新更新