How can I push a part of my git repo to Heroku?

GitHeroku

Git Problem Overview


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.

Git Solutions


Solution 1 - Git

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.

Solution 2 - Git

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

Solution 3 - 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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBehrangView Question on Stackoverflow
Solution 1 - GitMichaël WitrantView Answer on Stackoverflow
Solution 2 - GitbrookrView Answer on Stackoverflow
Solution 3 - GitbmalandView Answer on Stackoverflow