如何将 git 存储库的一部分推送到 Heroku?

发布于 2024-11-07 10:42:02 字数 416 浏览 0 评论 0原文

我有一个多模块应用程序,已经在 Github 上。它由两个模块组成,其中一个是 Android 应用程序,另一个是基于 Rails 的 Web 应用程序。因此,我的项目的目录结构采用以下形式:

ProjectRoot
|
+-- web
|
+-- android
|
+-- .git

因此,我不能简单地 cd 进入 ProjectRoot 并将我的应用程序推送到 Heroku,因为 Rails 应用程序的根文件夹是 ProjectRoot/web >。有没有办法将 web 文件夹推送到 Heroku?如果我将 web 变成 git 子模块,应该很容易实现这一点,但是我在 Git 上只有 5 个私有存储库,而且我更喜欢为我的整个应用程序只使用 1 个存储库。

I have a multi-module app that is already on Github. It is comprised of two modules, one of them an Android app and the other a Rails based Web app. So my project's directory structure is in the form of:

ProjectRoot
|
+-- web
|
+-- android
|
+-- .git

As such I cannot simply cd into ProjectRoot and push my app to Heroku as the root folder of the Rails app is ProjectRoot/web. Is there a way to push the web folder to Heroku? If I turn web into a git sub module, it should be easy to accomplish this, but then I only have 5 private repos on Git and I prefer to consume only 1 repo for my whole app.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

兮子 2024-11-14 10:42:02

您可以使用git子树推送。它将生成一个新的提交树,并将您的目录作为根目录,并将其推送。

git subtree push --prefix web heroku master

完整文档位于此处

You can use git subtree push. It will generate a new commit tree with your directory as root, and push it.

git subtree push --prefix web heroku master

Full documentation is here.

北凤男飞 2024-11-14 10:42:02

git subtree 命令(现在内置)是实现此目的的好方法。如果你想推送一个分支的子树成为你的主控,你可以使用类似:

git push --force heroku `git subtree split --prefix web HEAD`:master

The git subtree command (built in, now) is a good way to do this. If you want to push a subtree of a branch to become your master, you can use something like:

git push --force heroku `git subtree split --prefix web HEAD`:master

许一世地老天荒 2024-11-14 10:42:02

您还可以使用 git 分支而不是子文件夹。如果您有 git 1.7.2 或更高版本,您只需执行 git checkout --orphan android 即可创建一个与 master 分支(此处假设为 web 文件夹)断开连接的分支。签出孤立分支后,运行 git rm -rf . 删除现有文件,然后将 Android 特定文件复制到现在为空的根目录。

如果您想为每个模块使用单独的文件夹,您可以克隆存储库两次并使用以下结构:

ProjectRoot
├── android
│   └── .git
└── web
    └── .git

You could also use git branches instead of subfolders. If you have git 1.7.2 or newer, you can simply do git checkout --orphan android to create a branch that is disconnected from your master branch (assumed here to be the web folder). Once you have checked out the orphan branch, run git rm -rf . to remove existing files before copying in your android-specific files to the now empty root directory.

If you want to use separate folders for each module, you can clone the repository twice and use this structure:

ProjectRoot
├── android
│   └── .git
└── web
    └── .git
孤檠 2024-11-14 10:42:02

这是一个很棒的发现!
我这样做是因为 Heroku 存储库已经存在。

git subtree split --prefix web -b web-branch; git push staging web-branch:main 

另外,第一次我不得不强制推送,因为 Heroku 有一个不同的非常过时的版本。

注意:在进行分割之前不需要删除临时网络分支。基本上,拆分会覆盖分支。因此,如果您继续处理正常的存储库以及将来要重新推送的内容,那就太好了。

This was a great find!!!
I am doing it like this because the Heroku repo already existed.

git subtree split --prefix web -b web-branch; git push staging web-branch:main 

Also, the first time I had to do a forced push because the heroku had a different very outdated version.

Note: The temporal web-branch does not need to be removed before doing the split. Basically the split overwrites the branch. So it is great if you continue working on your normal repo and what to re-push again in the future.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文