2014-09-05 50 views
9

我有一個正常運行的PHP盒式磁帶,除非我無法找到一種直接的方式,以便在推送我的核心回購文件時/之後讓OpenShift(遞歸)推送我的git子模塊的文件。如何在推送時自動部署我的git repo的子模塊?

這似乎應該是一個非常簡單和常見的用例。我可以忽略一些東西嗎

我大概可以將ssh放入我的服務器,然後手動將它們拉出來,但我想完全自動化,這樣如果我更新了我的repo中子模塊的引用,這些更改將在我部署時反映出來。

回答

7

好了,我要在這50個加分刺;)

這裏有我遵循的步驟:

1.)在OpenShift上創建php-5.3應用程序克隆到本地機器上。
2.)在github上創建公共git存儲庫以用作子模塊。
3.)使用以下命令將github存儲庫添加到OpenShift應用程序中,確保您使用https url而不是git @ url,否則,當OpenShift Online嘗試檢出子模塊時,您將獲得私鑰問題。

cd into your locally cloned openshift application directory 
git submodule add https://github.com/developercorey/somesubmodule.git ./directory_name 
git add . 
git commit -am "adding a submodule" 
git push 

如果你沒有在你的git push中看到任何錯誤,那麼一切都應該正常工作。如果你看到這樣的錯誤

remote: Host key verification failed. 
remote: fatal: Could not read from remote repository. 
remote: 
remote: Please make sure you have the correct access rights 
remote: and the repository exists. 

這意味着你使用的混帳@網址,而不是HTTPS URL添加您的git子模塊,或者您試圖訪問一個私人倉庫。現在你可以使用rhc ssh命令ssh進入你的應用程序,並進入你的〜/ app-root/runtime/repo目錄,你應該在裏面看到你的子模塊目錄以及來自該存儲庫的文件。

如果這不適合你,請讓我知道你的git push的輸出是什麼,我們將從那裏開始。

+0

看起來像'git @ ...'改變'.gitmodules'中的子模塊URL爲'https:// ...'做了訣竅。謝謝! – 2014-09-16 23:42:02

6

對於父回購(其中包含子模塊),您應該只需推送父回購本身:它包括引用每個子模塊的右側SHA1的gitlink (special entries in the index)

一旦推,後收到鉤可以觸發:

git submodule update --init --recursive 

這將更新每個子模塊向右SHA1。

的後收到鉤父bare repo/path/to/parent.git/hooks/post-receive有:

#! /bin/bash 
cd /path/to/non-bare/parent 
git --git-dir=/path/to/parent.git checkout 
git --git-dir=/path/to/parent.git submodule update --init --recursive 
+0

你可以添加如何做到這一點,確切地說,你的答案? (添加後接收掛鉤,即) – 2014-09-10 17:16:43

+0

@MurraySmith我已經更新了答案。 – VonC 2014-09-10 17:29:31

+0

對不起,我仍然對如何將這個應用到我的OpenShift回購中感到困惑;恐怕我剛剛接觸裸回購的概念,並不清楚要編輯哪些文件以及如何編輯。你是否專門用OpenShift的設置完成了這個修復,或者這個建議通常適用? – 2014-09-16 23:36:31