如何将Heroku git存储库重置为其初始状态?
我在git存储库中有一个web应用程序。由于历史原因,web应用程序不在存储库的根目录下,它位于名为如何将Heroku git存储库重置为其初始状态?,git,heroku,Git,Heroku,我在git存储库中有一个web应用程序。由于历史原因,web应用程序不在存储库的根目录下,它位于名为website的文件夹中。除此之外,还有一些其他文件夹,因此我得到了以下结构: myApp +- .git +- otherFolder1 +- otherFolder2 +- otherFolder... +- otherFolderN +- website 该网站是在Heroku上运行的。由于Heroku要求您的web应用程序位于git存储库的根目录下,因此直到现在,我使用了一个构建过程,该
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的存储库,重新开始
还有其他想法吗?您可以嵌套git命令来执行强制推送 对于您的情况,命令将是:
git push heroku `git subtree split --prefix website master`:master --force
对于那些从约曼(缺乏)来到这里的人,有一个更好、更容易开发的,我敦促你们所有人让你们的生活更轻松,并使用它 与已经有问题倾向的子树方法不同,这个脚本实际上在
dist
/构建
/发布
分支上保留了您的开发提交增量历史——而且,您甚至不需要跟踪开发分支中的dist
文件夹
安装过程可能看起来很吓人,但相信我,事实并非如此。我只花了不到10分钟的时间就完成了安装,而且在第一次运行时,它就像承诺的那样工作,即使在Windows机器上也是如此
如果你想用Grunt实现自动化,这是很容易的。我就是这样做的:
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');
}
});