【问题标题】:Unable to fetch code from git repository for a specific SHA in ansible无法从 git 存储库中获取 ansible 中特定 SHA 的代码
【发布时间】:2017-07-07 16:46:20
【问题描述】:

我想使用特定的 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"}

【问题讨论】:

  • 问:你的 .git objects 文件夹中是否存在 :"dbde451f203a112d0838fb09bc19ed28bd231e6e"?
  • 是的。这是我的旧部署 sha-id。

标签: git ansible


【解决方案1】:

(注意:我对ansible知之甚少,只是个普通用户。)

大多数(但不是全部)Git 服务器根本不允许您通过哈希 ID 检索对象。大多数服务器要求对象具有名称,例如refs/heads/master(分支master)或refs/tags/v1.1(名为v1.1 的标记)。

如果服务器确实允许通过哈希 ID 进行检索(请参阅 VonC's answer here),您不得限定哈希 ID:它不是 refs/heads/dbde451f203a112d0838fb09bc19ed28bd231e6e 位,而是简单的 dbde451f203a112d0838fb09bc19ed28bd231e6e。这将成为 src:dst refspec 的 src 部分。

通常您会在此处使用标签名称,而不是哈希 ID,但如果您的服务器确实允许通过哈希 ID 进行检索,则 refspec 行在逻辑上必须为:

refspec: '+{{ GIT_TAG }}:refs/remotes/origin/some-particular-name'

因为使用哈希 ID 作为名称不是一个好主意(出于多种原因,主要原因是您会混淆人类)。

【讨论】:

  • 能否请您解释一下 + 登录 refspec 的用途?
  • 前导+ 的含义与--force 相同:即使正常规则不允许这样做,也要覆盖目标引用。
  • 实际上我需要这个来恢复上次部署中的更改。当我使用 +{{ GIT_TAG }}:refs/heads/{{ GIT_TAG }}:refs/remotes/origin/{{ GIT_TAG }} 它向我抛出了 Invalid refspec 错误。
  • 有可能 ansible 对 refspec 的形式过于挑剔,但更有可能是您的服务器不接受哈希 ID
  • 感谢您的回复,但我采取了第二种方式。
【解决方案2】:

我使用了间接方法。我已将提交 ID 保存在文件中并添加了以下代码

- name: Reverting Changes
      command: "git reset --hard {{ GIT_TAG }}"
      args:
        chdir: "{{ app_path }}/{{ app_dir }}"
      when: build_type  == "revert"

即我采用了一个额外的变量 build_type 并检查这是否用于 revert 更改。如果是,那么我从我的 git 信息文件中读取提交 ID 并硬重置我的分支。

【讨论】:

    猜你喜欢
    • 2017-12-16
    • 2012-02-13
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 2011-04-16
    • 2018-12-10
    相关资源
    最近更新 更多