如何将Heroku git存储库重置为其初始状态?

时间:2012-09-28 17:43:06

标签: git heroku

我在git存储库中有一个Web应用程序。由于历史原因,Web应用程序不在存储库的根目录下,因此它位于名为website的文件夹中。除此之外还有一些其他文件夹,因此我有以下结构:

myApp
+- .git
+- otherFolder1
+- otherFolder2
+- otherFolder...
+- otherFolderN
+- website

该网站在Heroku上运行。由于Heroku要求您的Web应用程序位于git存储库的根目录,因此直到现在我使用了一个构建过程,该过程将website文件夹复制到具有自己的git存储库的完全不同的(外部)文件夹。然后我就能从那里推到Heroku,一切都很好。

现在,由于git包含subtree命令,因此我不再需要这个命令,因为我可以直接从我的初始文件夹推送,而只是website子文件夹,使用:

git subtree push --prefix=website heroku master

基本上,这完美无缺。我只有一个问题:由于之前对Heroku的提交来自一个完全不同的git存储库,两者的历史记录彼此不匹配 - 因此Heroku检测到非快进推送,并拒绝subtree推。

那我该怎么处理呢?

  • 想法1:强制推动。试过,但不起作用,因为git subtree push没有--force选项(或任何类似的选项)。
  • 想法2:清除Heroku的存储库并从头开始。

我很乐意接受创意2,但我不知道如何实现这一目标。

我的第一个方法是运行git push heroku :master,但Heroku检测到这一点并拒绝它。

当然,我可以破坏应用程序并重新创建它,但是所有域名分配和附加组件也都消失了,我想避免这种情况。

还有其他想法吗?

2 个答案:

答案 0 :(得分:46)

您可以嵌套git命令来执行强制推送。

对于您的情况,命令将是:

git push heroku `git subtree split --prefix website master`:master --force

答案 1 :(得分:2)

对于那些来自Yeoman(缺少)deployment guide来自这里的人来说,solution开发了一个更好,更好,更容易的X1011,我敦促大家让你的生活更轻松和使用它!

与已经容易发生问题的子树方法相比,此脚本实际上会在dist / build / release分支上保留您的开发提交增量历史记录 - 而且,您甚至不需要跟踪开发分支中的dist文件夹。

设置过程可能看起来令人生畏,但相信我,事实并非如此。我花了不到10分钟的时间进行设置,它在第一次运行时就像承诺的那样工作,即使在Windows机器上也是如此。

如果您想使用Grunt自动化它,这很容易。这就是我做到的:

  1. 首先将X1011的deploy.sh下载到您的主项目文件夹。
  2. 请遵循简短的配置和设置指南。
  3. 通过此命令与节点安装grunt-shellnpm install grunt-shell --save-dev--save-dev会将grunt-shell添加到项目的dev依赖项中,以防您不知道)。您也可以使用grunt-exec,他们基本上做同样的事情,AFAIK。
  4. Gruntfile.js中,将以下对象添加到initConfig
  5. 添加到initConfig对象

        shell: {
            deployverbose: {
              command: 'sh deploy.sh -v',
              options: {
                  stdout: true,
                  stderr: true
              }
            },
            deploy: {
              command: 'sh deploy.sh',
              options: {
                  stdout: true,
                  stderr: true
              }
            }
        }
    

    5。注册新任务,或将其添加到现有build任务中(确保您声明target参数):

    grunt build:deploy

    添加到现有构建任务
    if (target && target.indexOf('deploy') > -1) {
      tasks.push('deploy');
    }
    

    独立任务grunt deploy,也允许--verbose标志:

    grunt.registerTask('deploy', 'standalone deploy command', function () {
      if (grunt.option.flags().indexOf('--verbose') > -1) {
        grunt.task.run('shell:deployverbose');
      } else {
        grunt.task.run('shell:deploy');
      }
    });
    
相关问题