Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Heroku git存储库重置为其初始状态?_Git_Heroku - Fatal编程技术网

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

如何将Heroku git存储库重置为其初始状态?,git,heroku,Git,Heroku,我在git存储库中有一个web应用程序。由于历史原因,web应用程序不在存储库的根目录下,它位于名为website的文件夹中。除此之外,还有一些其他文件夹,因此我得到了以下结构: myApp +- .git +- otherFolder1 +- otherFolder2 +- otherFolder... +- otherFolderN +- website 该网站是在Heroku上运行的。由于Heroku要求您的web应用程序位于git存储库的根目录下,因此直到现在,我使用了一个构建过程,该

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

myApp
+- .git
+- otherFolder1
+- otherFolder2
+- otherFolder...
+- otherFolderN
+- website
该网站是在Heroku上运行的。由于Heroku要求您的web应用程序位于git存储库的根目录下,因此直到现在,我使用了一个构建过程,该过程将
网站
文件夹复制到一个完全不同的(外部)文件夹,其中包含自己的git存储库。然后我可以从那里推到赫罗库,一切都很好

现在,由于git包含
子树
命令,因此不再需要该命令,因为我可以直接从初始文件夹中推送,而只需使用以下命令推送
网站
子文件夹:

git subtree push --prefix=website heroku master
基本上,这是完美的。我只有一个问题:由于之前对Heroku的提交来自一个完全不同的git存储库,两者的历史不匹配-因此Heroku检测到非快进推送,并拒绝
子树
推送

那我该怎么处理呢

  • 想法1:用力推。尝试过,但不起作用,因为git子树推送没有
    --force
    选项(或任何类似选项)
  • 想法2:清除Heroku的存储库,重新开始
我很想采用想法2,但我不知道如何实现这一点

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

当然,我可以销毁应用程序并重新创建它,但随后所有的域分配和加载项也都消失了,我希望避免这种情况


还有其他想法吗?

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

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

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

对于那些从约曼(缺乏)来到这里的人,有一个更好、更容易开发的,我敦促你们所有人让你们的生活更轻松,并使用它

与已经有问题倾向的子树方法不同,这个脚本实际上
dist
/
构建
/
发布
分支上保留了您的开发提交增量历史
——而且,您甚至不需要跟踪开发分支中的
dist
文件夹

安装过程可能看起来很吓人,但相信我,事实并非如此。我只花了不到10分钟的时间就完成了安装,而且在第一次运行时,它就像承诺的那样工作,即使在Windows机器上也是如此

如果你想用Grunt实现自动化,这是很容易的。我就是这样做的:

  • 首先将X1011的
    deploy.sh
    下载到主项目文件夹中
  • 遵循简短的配置和设置指南
  • 通过此命令使用节点安装
    grunt shell
    npm安装grunt shell--save dev
    --save dev
    grunt shell
    添加到项目的开发依赖项中,以防您还不知道)。您也可以使用
    grunt exec
    ,它们基本上做相同的事情,好吧
  • Gruntfile.js
    中,将以下对象添加到
    initConfig
  • 添加到
    initConfig
    对象 五,。注册一个新任务,或将其添加到现有的
    生成
    任务中(确保声明
    目标
    参数):

    作为
    grunt build:deploy添加到现有构建任务
    独立任务
    grunt deploy
    ,还允许
    --verbose
    标志:
    不知道它是否适用于子树,但您可以
    git fetch heroku master
    ,然后
    git merge-s ours heroku/master
    ,然后再次尝试推送子树。谢谢您的提示。我这样做了,它完美地融合了,但当我尝试推动时,我得到了非常相同的结果:-/不幸的是,我是子树的新手,看起来有一个子树特定的拉动,你能从heroku的主分支中进行一次尝试吗?我也有同样的问题。你找到解决办法了吗?子树特定的拉操作有效吗?不幸的是,我没有找到解决方案。我所做的是销毁Heroku上的应用程序并重新创建它,然后进行子树推送。这是可行的,但当然这更像是一种变通办法,而不是解决方案:-/@Ivan,我遇到了完全相同的问题(不是heroku,而是我自己创造的一个子树噩梦),这就解决了它。不过,我不确定我是否明白这是怎么回事(即,您可以添加的子树的输出是什么:主控打开,然后推送它……您能详细说明一下为什么/如何工作吗?谢谢。@Sunyatasattva如果我没有错的话,它所做的是将提交作为一个子树推送到主分支,并完全覆盖整个分支历史,也就是说,其中的所有内容都将是l。)ost.但如何在Windows上执行此操作?我得到了
    错误:未知选项“prefix”
    @pilau,这似乎是一个非常可怕的命令要运行。然而,如果没有此命令,我还没有成功地使部署类的子树工作;这个想法很好,但我认为实现有点噱头。有人能解释一下该命令吗?它只是delet吗正在删除主分支?嵌套命令在做什么?对我来说,它只是删除了主分支,即:耸肩:但它似乎没有运行“嵌套”命令命令。好的,我终于有时间尝试这个解决方案,但我无法让它工作。最初的设置让我非常困惑,当我按照说明操作时发生的事情似乎与我试图实现的完全相反:我最终得到了一个断开连接的分支,除了
    dist
    目录之外,我的工作目录中都有文件:/您是否介意在X1011的GitHub回购协议上发行一期债券?从那里开始发行会更容易。另外,请详细说明您到底做了什么,以便我们能够查明哪里出了问题。
        shell: {
            deployverbose: {
              command: 'sh deploy.sh -v',
              options: {
                  stdout: true,
                  stderr: true
              }
            },
            deploy: {
              command: 'sh deploy.sh',
              options: {
                  stdout: true,
                  stderr: true
              }
            }
        }
    
    if (target && target.indexOf('deploy') > -1) {
      tasks.push('deploy');
    }
    
    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');
      }
    });