【问题标题】:Push just part of a git repository to heroku将 git 存储库的一部分推送到 heroku
【发布时间】:2013-08-23 00:29:00
【问题描述】:

我有一些由 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 中)。对此有什么想法?

【问题讨论】:

  • 你可以用不同的提交创建两个分支。

标签: git heroku


【解决方案1】:

我会选择的解决方案是分支。你有一个包含所有文件的主分支,然后是每个应用程序的一个分支,只包含它需要的内容。

例如:

$ 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 你不想提交什么。

【讨论】:

    【解决方案2】:

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

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

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

    app1:

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

    应用程序2:

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

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

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

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

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

    cd app1
    node server.js
    

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

    web: node app1/app.js
    

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

    【讨论】:

      【解决方案3】:

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

      Sharing Python code between Heroku apps

      【讨论】:

        猜你喜欢
        • 2021-11-17
        • 2011-11-24
        • 2011-08-24
        • 2013-07-24
        • 2023-03-11
        • 1970-01-01
        • 1970-01-01
        • 2013-10-07
        相关资源
        最近更新 更多