Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does "git push heroku master" know where to push to and how to push to a different repo?

Tags:

git

heroku

When pushing to a repository hosted on Heroku one must execute the following command:

git push heroku master 

What do heroku and master indicate in this command? How does git know where to push to? (the git path)

Also, I didn't know I can use heroku rename to rename an app, so before, say I was using the app name trytryheroku and now I use heroku create real-thing but if I push, it still pushes to trytryheroku... is there a way to push to real-thing instead?

like image 581
Sarah Wong Avatar asked Mar 17 '11 11:03

Sarah Wong


Video Answer


2 Answers

The 'heroku' part is the name of the remote that you have setup - when you create a heroku app the first time it creates a git remote call 'heroku' pointing at your application - if you type 'git remote' within your project it will show you the remote endpoints. There's nothing locking you into using 'heroku' as the name of the remote - if you have multiple environments for your application you may have remotes named production or staging for example.

The 'master' part is the local branch you wish to push to the remote. If you develop in a feature branch for example named 'myfeature' and you want to deploy that to heroku you would do;

git push heroku myfeature:master 

the additional :master here is saying push my local myfeature branch into the master branch on the remote - note: heroku can only deploy from the master branch.

If you rename an app the heroku git remote url will change - do a git remote -v which will show you the git repo your app is using, you will probably need to delete your old heroku origin and add the new one, git remote rm heroku then git remote add heroku git@newgitpathfromcontrolpanel

To learn more about Git I would recommend this book

like image 144
John Beynon Avatar answered Sep 23 '22 12:09

John Beynon


PART 1 : "How does git know where to push to?"

Before executing the above mentioned command:

$ git push heroku master 

There are always few other steps to execute: Installing Git and Heroku, creating a local Git repo, signing-up to heroku, log-in heroku via command-line, creating heroku handle to hosting point (explained in PART 2)

1. A local Git repository:

    $ 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     ... 

2. Have sign-up(ed) for Heroku and logged-in via command-line:

$ heroku login Enter your Heroku credentials. Email: [email protected] Password: Could not find an existing public key. Would you like to generate one? [Yn] Generating new SSH public key. Uploading ssh public key /Users/adam/.ssh/id_rsa.pub 

So by running $ git push heroku master you have pushed the code/app to Heroku.


PART 2: but what does heroku and master indicate?

It is more of a Git question than Heroku - Heroku is a hosting platform, which depends on Git (Distributed Version Control System) for deployment.

The basic concept of 'push' is pushing some thing (file, app, ..) we have locally (in our working machine) to somewhere else, in this case to a remote repository (remote machine).

In Git before using 'push' we create a remote (handle) which acts as a reference to a remote repository (Complete URL), we do so using the following command:

$ git remote add <remote-name-of-our-choice> <URL-where-you-be-pushing-yourapp> 

The basic structure of 'push' command is:

$ git push <remote-name> <branch> 

So $ git push heroku master is actually pushing your code/app/file (from some local Git repo) to a remote repo 'heroku' .

wondering when this 'heroku' remote got created, it was added when you executed $ heroku create

$ heroku create Creating stark-fog-398... done, stack is cedar http://stark-fog-398.herokuapp.com/ | [email protected]:stark-fog-398.git Git remote heroku added 

Do notice the last line "Git remote heroku added".

to make it more clear, here's a Git command to check/output all the remotes: $ git remote -v will display something similar to the following

$ git remote -v heroku     [email protected]:somerepo.git (fetch) heroku     [email protected]:somerepo.git (push) 

So we can assume that the following command was executed (implicitly) somewhere, when you did $ heroku create , hence creating the heroku remote to some heroku repo (url)*

$ git remote add heroku [email protected]:somerepo.git 
like image 44
Nabeel Ahmed Avatar answered Sep 22 '22 12:09

Nabeel Ahmed