2014-09-05 56 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

相关问题