【发布时间】:2012-09-20 14:59:28
【问题描述】:
我在 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 检测到这一点并拒绝了它。
当然,我可以销毁应用程序并重新创建它,但是所有域分配和附加组件也都消失了,我想避免这种情况。
还有其他想法吗?
【问题讨论】:
-
不知道它是否适用于子树,但您可以
git fetch heroku master后跟git merge -s ours heroku/master然后尝试再次推送子树。 -
感谢您的提示。我这样做了,它完美地合并了,但是当我尝试推动时,我得到了完全相同的结果:-/
-
不幸的是,我是子树的新手,看起来有一个子树特定的拉动,你能从 heroku 的主分支中试一试吗?
-
我遇到了同样的问题。您是否设法找到解决方案?子树特定的拉动是否有效?
-
不幸的是我没有找到解决方案。我所做的是销毁 Heroku 上的应用程序并重新创建它,然后进行子树推送。这行得通,但当然它更多的是一种解决方法而不是解决方案:-/