3

我有一些由 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 存储库(一个只包含 app1 需要的东西和一个用于 app2 等的东西)然后将这些单独的存储库推送到 heroku 来解决这个问题。这可行,但似乎有点笨拙,因为我有所有这些我必须管理的其他额外存储库。此外,如果其他开发人员希望能够推送到 heroku,我需要将这些 repos 提供给他们,也许通过将它们签入 git(似乎很奇怪)。

有什么好方法可以做到这一点?


更新:

如果我创建了 heroku 存储库,所以它们只包含每个应用程序的适当内容,然后让 heroku 成为这些存储库的主要远程(而不是 github)?我仍然需要处理多个存储库,但至少所有开发人员都有一个标准的位置来克隆它们(源代码存储库位于 github 中,heroku 部署存储库位于 heroku 中)。对此有什么想法?

4

3 回答 3

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在每个分支中拥有一个唯一的 -file 来告诉 git 您不想提交什么。

于 2013-08-09T23:57:51.773 回答
1

我最终这样做的方式是让 heroku 容纳部署在那里的应用程序版本的主要遥控器。同时,每个人都在使用的主要源代码仓库在 github 上。假设代码如下所示:

src/
 app1/
 app2/
 app3/
 lib-files/
 other-files/
 package.json

然后我有 app1 和 app2 的两个 heroku 应用程序。这些只是每个应用程序所需的代码:

应用程序1:

src/
  app1/
  lib-files/
  other-files/
  package.json

应用程序2:

src/
  app2/
  lib-files/
  other-files/
  package.json

当您想处理源代码时,您可以从 github 克隆完整版本。当您想部署到 heroku 时,您可以从那里克隆一个应用程序存储库。

我创建了一个脚本来部署执行以下操作的每个应用程序:

  1. 如果本地盒子上不存在,则从 heroku 克隆 git repo
  2. 仅将该应用程序所需的文件从主源代码库复制到 heroku 代码库
  3. 提交更改
  4. 将 repo 推送到 heroku

我遇到的一个问题是我的每个应用程序都有自己的 Node.js 应用程序,我通常通过进入该目录并运行 node 命令在我的开发环境中启动每个应用程序:

cd app1
node server.js

但是,这在 Heroku 上并不完全有效,因为它希望 Procfile 和 package.json 文件位于 git repo 的最外层目录中。我的 package.json 文件已经位于那里,但我必须为每个应用程序创建单独的 Procfiles 并根据我正在部署的应用程序复制它们。他们每个人在里面看起来像这样:

web: node app1/app.js

无论如何,这个设置似乎有效。

于 2013-08-14T16:19:48.740 回答
0

我遇到了完全相同的问题(正如我猜很多人所做的那样),并选择了不同的方法:我为每个应用程序都有一个单独的存储库,以及一个共享代码的存储库。我通过 requirements.txt 在本地磁盘和 Heroku 上的应用程序之间共享代码。这是我的SO线程:

在 Heroku 应用程序之间共享 Python 代码

于 2013-08-10T05:21:39.913 回答