我想使用特定的SHA-id获取代码。这就是我正在尝试的
- git:
repo: http://<git-url>/Vara-Internal/mongo-db-dev.git
dest: "{{ app_path }}/{{ app_dir }}"
version: "{{ GIT_TAG }}"
refspec: '+refs/heads/{{ GIT_TAG }}:refs/remotes/origin/{{ GIT_TAG }}'
update: yes
force: true
register: cloned
它给我这个错误
FAILED! => {"changed": false, "cmd": ["/usr/bin/git", "fetch", "--tags", "origin", "+refs/heads/dbde451f203a112d0838fb09bc19ed28bd231e6e:refs/remotes/origin/dbde451f203a112d0838fb09bc19ed28bd231e6e"], "failed": true, "msg": "Failed to download remote objects and refs: fatal: Couldn't find remote ref refs/heads/dbde451f203a112d0838fb09bc19ed28bd231e6e\n"}
答案 0 :(得分:2)
(注意:我对ansible非常了解,只是一个临时用户。)
大多数(但不是全部)Git 服务器根本不允许您通过哈希ID检索对象。大多数服务器要求对象具有名称,例如refs/heads/master
(分支master
)或refs/tags/v1.1
(标记为v1.1
)。
如果服务器允许按哈希ID检索(请参阅VonC's answer here),则不得限定哈希ID:它不是refs/heads/dbde451f203a112d0838fb09bc19ed28bd231e6e
而是简单地dbde451f203a112d0838fb09bc19ed28bd231e6e
。这将成为 src
refspec的 src:dst
部分。
通常,您在此处使用标记名称,而不是哈希ID,但如果您的服务器允许通过哈希ID进行检索,那么refspec行在逻辑上必须阅读:
refspec: '+{{ GIT_TAG }}:refs/remotes/origin/some-particular-name'
因为将哈希ID用作名称并不是一个好主意(出于几个原因,主要原因是你会混淆人类)。
答案 1 :(得分:1)
我使用了间接方法。我在文件中保存了提交ID并添加了以下代码
- name: Reverting Changes
command: "git reset --hard {{ GIT_TAG }}"
args:
chdir: "{{ app_path }}/{{ app_dir }}"
when: build_type == "revert"
即。我使用了一个额外的变量build_type,并检查这是否是还原更改。如果是,那么我从我的git信息文件中读取提交ID并硬重置我的分支。