我们刚刚从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或标签而不是分支名称会发生什么?
我应该担心吗?我做错了吗?
答案 0 :(得分:1)
branch
参数指定在目标中使用哪个分支来签出rev
分支/标记/提交。如果您不使用此参数,则rev
将在目标中处于活动状态的任何分支中签出。
我认为文档很清楚:
检查指定转速的分支的名称。如果不 指定,然后Salt不关心本地使用什么分支 并且只会使用当前存在的任何分支。
注意:如果未指定,则表示本地分支名称不会 如果存储库重置为另一个分支/标记/ SHA1,则更改。
我不知道之前的行为是什么。现在,如果您在未指定本地分支的情况下签出提交或标记,则会将本地签出分支硬复位到指定的rev
,而不管其先前的状态(假设您使用force_reset=True
)
就个人而言,我使用远程存储库中不存在的本地分支名称,因此不会混淆已签出的内容。