Search This Blog

Wednesday, July 4, 2012

Deploying with Git | Heroku Dev Center

Deploying with Git | Heroku Dev Center:


Table of Contents

Git is a powerful decentralized revision control system, and is the primary means for deploying apps to Heroku. You don’t need to be proficient with Git to use it for deploying code to Heroku, but you may find it valuable to learn the basics of this excellent tool for managing source code.

Tracking your app in git

Heroku apps expect the app directory structure at the root of the repository. If your app is inside a subdirectory in your repository, it won’t run when pushed to Heroku.
Before you can push an app to Heroku, you’ll need to initialize a local Git repo and commit your files to it. For example, if you have an app in a directory, myapp, then create a new repo for it:
$ cd myapp
$ git init
Initialized empty Git repository in .git/
$ git add .
$ git commit -m "my first commit"
Created initial commit 5df2d09: my first commit
 44 files changed, 8393 insertions(+), 0 deletions(-)
 create mode 100644 README
 create mode 100644 Procfile
 create mode 100644 app/controllers/source_file
...
This is a local repository, now residing inside the .git directory. Nothing has been sent anywhere yet; you’ll need to create a remote and do a push to deploy your code to Heroku.

Creating a Heroku remote

Git remotes are references to remote repositories. You can have any number of these, but for now we’ll focus on just the remote to Heroku. The heroku createcommand creates a new application on Heroku - along with a git remote that must be used to receive your application source.
$ heroku create
Creating falling-wind-1624... done, stack is cedar
http://falling-wind-1624.herokuapp.com/ | git@heroku.com:falling-wind-1624.git
Git remote heroku added
You can verify the remote in your git configuration as well:
$ git remote -v
heroku     git@heroku.com:falling-wind-1624.git (fetch)
heroku     git@heroku.com:falling-wind-1624.git (push)
You can also take an existing Git repo and add a remote using the git URL provided when you created your app. You may need to do this to associate a Git repo with an existing application.
If you don’t have the git URL for your app on-screen anymore, you can always see it again by typing:heroku info --app appname.
The git URL for a Heroku app is always in the formatgit@heroku.com:appname.git. Once you get used to this format, you may find it easier to type than cut-and-paste each time.
$ git remote add heroku git@heroku.com:appname.git
The remote is named heroku in this example, but you can name the remote anything you want. You will probably find it easier to follow the examples if you stick to this naming convention.
There is one special remote name: origin, which is the default for pushes. Using origin as the remote name will allow you to type just git push instead ofgit push heroku, but we recommend using an explicitly named remote.

Deploying code

Your Heroku app starts with a blank repository - it has no branches and no code. So the first time you deploy, you’ll need to specify a remote branch to push to:
$ git push heroku master
updating 'refs/heads/master'
...
This will push your code to the heroku remote, created earlier. Branches pushed to Heroku other than master will be ignored by this command. If you’re working out of another branch locally, you can either merge to master before pushing, or specify that you want to push your local branch to a remote master. To push a branch other than master, use this syntax:
$ git push heroku yourbranch:master

Multiple remotes and environments

The same techniques used to deploy to production can be used to deploy a development branch of your application to a staging application on Heroku, as described in Managing Multiple Environments for an App.

Using subversion or other revision control systems

What if you’re already using Subversion or another revision control system to track your source code? Although we believe that Git is one of the best choices available for revision control, you don’t need to stop using your current revision control system. Git can be purely a deployment mechanism, existing side-by-side with your other tool.
You can learn much more about.gitignore in our article on the topic.
For example, if you are using Subversion, initialize your Git repo as described above. Then, add a .gitignore file to tell Git to ignore your Subversion directories.
$ git init
$ echo .svn > .gitignore
$ git add .
$ git commit -m "using git for heroku deployment"
Now tell Subversion to ignore Git:
$ svn propset svn:ignore .git .
property 'svn:ignore' set on '.'
$ svn commit -m "ignoring git folder (git is used for heroku deployment)"
The -f (force flag) is recommended in order to avoid conflicts with other developers’ pushes. Since you are not using Git for your revision control, but as a transport only, using the force flag is a reasonable practice.
Each time you wish to deploy to Heroku:
$ git add -A
$ git commit -m "commit for deploy to heroku"
...

$ git push -f heroku

No comments:

Post a Comment