我有一些由git管理的源代码,我想推送到Heroku。源代码包含多个不同的产品,其中一些产品将拥有自己的heroku实例。所以像这样:
src/
lib-files/
app1/
app2/
app3/
other-files/
package.json
所以在heroku中,我有app1和app2的实例。这两个都依赖于./lib-files和package.json,但不依赖于app2或app3或其他文件。
我真的不想将包含所有文件的整个git存储库推送到每个应用程序的heroku。换句话说,我不希望app1实例包含app2或app3或其他文件的代码,因为它有很多不需要的数据,而且需要复制它。
我通过为每个应用程序创建新的git repos来解决这个问题(一个只包含app1需要的东西,一个用于app2等),然后将这些个人回购推送到heroku。这可行,但似乎有点hacky因为我有我必须管理的所有其他额外的存储库。此外,如果其他开发人员想要推送到heroku,我需要让他们可以使用这些回购,也许可以将它们检入git(看起来奇怪)。
实现这一目标的好方法是什么?
的更新 的
如果我创建了heroku repos,那么他们只为每个应用程序包含适当的东西然后让heroku成为那些repos的主要远程(而不是github)怎么办?我仍然会有多个存储库来处理,但至少所有开发人员都有一个标准的位置来克隆它们(源代码仓库在github中,而heroku部署仓库在heroku中)。对此的想法?
答案 0 :(得分:5)
我选择的解决方案是分支。您拥有包含所有文件的主分支,然后是每个仅包含其所需内容的应用程序的分支。
例如:
$ git init
$ git add .
$ git commit -m "Initial commit"
$ git checkout -b app1 # create a new branch for app1 derived from master
$ git rm what-you-dont-need-for-app1
$ git commit -m "Initial app1 commit"
$ git checkout master # switch to master again
$ git checkout -b app2
$ # repeat same steps as for app1
您还可以在每个分支中拥有一个唯一的.gitignore
- 文件来告诉git您不想提交的内容。
答案 1 :(得分:1)
我最终这样做的方法是让heroku为那里部署的应用程序版本提供主要遥控器。同时,每个人都在使用的主要源代码仓库是github。假设代码如下所示:
src/
app1/
app2/
app3/
lib-files/
other-files/
package.json
然后我为app1和app2提供了两个heroku应用程序。这些只是每个应用程序所需的代码:
APP1:
src/
app1/
lib-files/
other-files/
package.json
APP2:
src/
app2/
lib-files/
other-files/
package.json
如果您想处理源代码,请从github克隆完整版本。如果要部署到heroku,请从那里克隆其中一个应用程序存储库。
我创建了一个脚本来部署执行以下操作的每个应用程序:
我遇到的一个问题是我的每个应用程序都有自己的Node.js应用程序,我通常在开发环境中启动每个应用程序,进入该目录并运行node命令:
cd app1
node server.js
但是,这在Heroku上并不是那么好用,因为它希望Procfile和package.json文件位于git repo的最外层目录中。我的package.json文件已经位于那里,但是我必须为每个应用程序创建单独的Procfiles并根据我正在部署的那个来复制它们。它们每个看起来都像这样:
web: node app1/app.js
无论如何,这种设置似乎有效。
答案 2 :(得分:0)
我遇到了完全相同的问题(正如我猜测的那样),并且选择不同:我为每个应用程序都有一个单独的存储库,以及共享代码的存储库。我通过requirements.txt在磁盘本地和Heroku上的应用程序之间共享代码。这是我的SO帖子: