我有一個正常運行的PHP盒式磁帶,除非我無法找到一種直接的方式,以便在推送我的核心回購文件時/之後讓OpenShift(遞歸)推送我的git子模塊的文件。如何在推送時自動部署我的git repo的子模塊?
這似乎應該是一個非常簡單和常見的用例。我可以忽略一些東西嗎
我大概可以將ssh
放入我的服務器,然後手動將它們拉出來,但我想完全自動化,這樣如果我更新了我的repo中子模塊的引用,這些更改將在我部署時反映出來。
我有一個正常運行的PHP盒式磁帶,除非我無法找到一種直接的方式,以便在推送我的核心回購文件時/之後讓OpenShift(遞歸)推送我的git子模塊的文件。如何在推送時自動部署我的git repo的子模塊?
這似乎應該是一個非常簡單和常見的用例。我可以忽略一些東西嗎
我大概可以將ssh
放入我的服務器,然後手動將它們拉出來,但我想完全自動化,這樣如果我更新了我的repo中子模塊的引用,這些更改將在我部署時反映出來。
好了,我要在這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的輸出是什麼,我們將從那裏開始。
對於父回購(其中包含子模塊),您應該只需推送父回購本身:它包括引用每個子模塊的右側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
你可以添加如何做到這一點,確切地說,你的答案? (添加後接收掛鉤,即) – 2014-09-10 17:16:43
@MurraySmith我已經更新了答案。 – VonC 2014-09-10 17:29:31
對不起,我仍然對如何將這個應用到我的OpenShift回購中感到困惑;恐怕我剛剛接觸裸回購的概念,並不清楚要編輯哪些文件以及如何編輯。你是否專門用OpenShift的設置完成了這個修復,或者這個建議通常適用? – 2014-09-16 23:36:31
看起來像'git @ ...'改變'.gitmodules'中的子模塊URL爲'https:// ...'做了訣竅。謝謝! – 2014-09-16 23:42:02