我们最近刚刚从 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
(
就个人而言,我使用远程存储库中不存在的本地分支名称,因此不会混淆签出的内容。