【问题标题】:Testing Heroku-based apps BEFORE committing to Git在提交到 Git 之前测试基于 Heroku 的应用程序
【发布时间】:2014-04-21 07:45:02
【问题描述】:

我对 Git 和服务器的第一次体验是当我们有一个服务器时,将代码放到它上面的唯一方法是推送到 Github,然后让服务器通过 webhook 进行拉取。我们最终得到了很多带有诸如“修复先前的提交 - 提交 #3”和“修复尝试的提交 #3 的修复”等消息的微小提交,因为我们无法知道我们的提交是否会在服务器上正常运行直到它们被提交并推送之后。

最近我将我的第一个 Rails 应用程序部署到 Heroku,虽然我在那里看到了很多积极的一面,但在我看来,这与我上面描述的情况非常相似。除非我们想设置我们自己的服务器来非常紧密地镜像 Heroku 服务器,以便我们可以在不提交到 Git 的情况下上传和测试代码,否则在我们的代码已经提交之前无法知道它是否工作,因此它可能需要许多小的、无用的(就 repo 的历史而言)“调整”提交以修补失败的提交。

我知道除了生产服务器之外,已经有plentyofquestions 解释了如何使用set up and use a staging server,但这仍然不能解决污染回购历史的问题。我知道可以修改提交、压缩、rebase 等,以便可以处理这些“无用”的提交(如this question 的答案中所述),但是有多个人可能会同时执行所有这些操作,我可以看到它变得丑陋并在 Git 中产生各种冲突。


TL;DR
我们如何在使用 Heroku 时为我们的项目维护一个“干净”的 Git 历史记录,这样我们就不会为了修复本来应该可以工作的东西而产生大量的提交或分支,从而造成混乱和噪音,但是不只是因为我们无法在服务器环境中测试它,直到提交和推送之后?

【问题讨论】:

  • 你说你不能在本地测试。为什么?
  • 不是我不能在本地测试,而是本地环境不太可能完全反映生产环境,因此可以推送在本地工作的提交并且不适用于生产服务器。

标签: git heroku version-control github


【解决方案1】:

您可以考虑将Heroku Local 添加到您的工作流程中,以便在本地测试您的应用程序。

heroku local

【讨论】:

    【解决方案2】:

    你可以试试这个How to avoid tons of commits when debugging Heroku app

    更重要的问题可能是:为什么您的软件经常中断,以至于您认为修复量会污染您的存储库?也许你可以简化你的开发过程。

    【讨论】:

    • 正如我在问题中提到的那样,我已经看过那篇文章,它确实可以解决我的问题,除了一个问题:多个团队成员各自重写 Git 历史并推送到同一服务器罢工我是灾难的秘诀。并不是我们的软件经常中断,而是无法判断提交(无论是引入新功能还是修复错误)在提交和推送之前是否会在服务器上按预期工作。
    • 根据this Heroku page,每个 app 获得 750 dyno-hours/month。也许一个潜在的解决方案是让每个开发人员拥有自己的应用程序fork 进行开发,以便他们可以推送、变基、压缩等,而不会与其他开发人员发生冲突,然后当他们的提交确定有效时,他们可以推送到主仓库?
    【解决方案3】:

    您可以拥有一个单独的 Heroku 应用程序,仅用于测试目的,当您的提交工作时,将所有提交压缩为 1 并将其推送到生产环境。

    git remote add origin https://git.heroku.com/production-repo.git
    git remote add test https://git.heroku.com/test-repo.git
    

    当你工作时你提交和git push test master,然后当你准备好推送到生产环境时,启动交互式 rebase:

    git rebase <commit-id-of-the-first-commit-before-production> -i
    

    然后改变:

    pick 8e4804f test this
    pick 6c29fdd fix that
    pick 4ddbb35 break this
    pick ececbfb try that
    pick 4f563eb add this
    pick be065ae delete that
    

    pick 8e4804f test this
    s 6c29fdd fix that
    s 4ddbb35 break this
    s ececbfb try that
    s 4f563eb add this
    s be065ae delete that
    

    并将提交消息更改为您想要的任何内容。 现在你可以

    git push origin master

    并且您只会在生产仓库中获得所需的提交

    【讨论】:

      猜你喜欢
      • 2012-08-26
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      • 2014-12-21
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      相关资源
      最近更新 更多