2017-07-07 96 views
1

我想用一個特定的SHA-id.This獲取代碼是什麼我想無法在ansible特定SHA獲取從git倉庫代碼

- 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

問:確實:「dbde451f203a112d0838fb09bc19ed28bd231e6e」存在於.git對象文件夾中嗎? – paulsm4

+0

yes.it是我舊的部署sha-id。 –

回答

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:dst refspec。

通常,您將在這裏使用一個標記名稱,而不是一個哈希ID,但如果你的服務器確實允許通過哈希ID檢索,操作的Refspec線將在邏輯上已改爲:

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

,因爲它不是一個使用散列ID作爲名字是個好主意(出於以下幾個原因,最主要的是你會混淆人類)。

+0

能否請你解釋一下在refspec中使用+登錄是什麼? –

+0

前導'+'的含義與'--force'相同:即使正常規則不允許這樣做,也會覆蓋目標引用。 – torek

+0

其實我需要這個來恢復上次部署中的更改。當我使用+ {{GIT_TAG}}:refs/heads/{{GIT_TAG}}:refs/remotes/origin/{{GIT_TAG}}它會拋出無效的refspec錯誤。 –

1

我用間接法的same.I已經提交保存在一個文件ID,並添加以下代碼

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

即我花了一個額外的變量是build_type並檢查這是否爲回覆的如果它是然後我從我的git信息文件中讀取提交ID並硬重置我的分支。