Как «git push heroku master» знает, куда и как перейти в другое репо?

92

При отправке в репозиторий, размещенный на Heroku, необходимо выполнить следующую команду:

git push heroku master

Что делать herokuиmaster означают указывают в этой команде? Как git знает, куда нажимать? (путь git)

Кроме того, я не знал, что могу использовать heroku renameдля переименования приложения, поэтому, скажем, раньше я использовал имя приложения trytryheroku, а теперь я использую, heroku create real-thingно если я нажимаю, оно все равно подталкивает к trytryheroku ... есть ли способ нажать на реальная вещь вместо этого?

Сара Вонг
источник

Ответы:

107

Часть 'heroku' - это имя пульта дистанционного управления, который вы настроили - когда вы создаете приложение heroku в первый раз, когда оно создает удаленный вызов git 'heroku', указывающий на ваше приложение - если вы набираете 'git remote' в своем проекте, это покажет вам удаленные конечные точки. Ничто не заставляет вас использовать «heroku» в качестве имени пульта дистанционного управления - если у вас есть несколько сред для вашего приложения, у вас могут быть пульты с именем production или staging, например.

«Мастер» - это локальная ветка, которую вы хотите отправить на удаленный компьютер. Если вы разрабатываете ветку функций, например, с именем myfeature, и хотите развернуть ее на heroku, вы бы сделали;

git push heroku myfeature:master

дополнительно: мастер говорит, что вставьте мою локальную myfeatureветку вmaster ветку на удаленном компьютере - примечание: heroku может развертываться только из главной ветки.

Если вы переименуете приложение, удаленный URL-адрес heroku git изменится - сделайте a, git remote -v который покажет вам репозиторий git, который использует ваше приложение, вам, вероятно, потребуется удалить свое старое происхождение heroku и добавить новое,git remote rm heroku затемgit remote add heroku git@newgitpathfromcontrolpanel

Чтобы узнать больше о Git, я бы порекомендовал эту книгу

Джон Бейнон
источник
Вы можете обновить удаленный URL-адрес с помощью git remote set-url <remote-name> <new-url>(Git 1.7.0 и новее), или git config remote.<remote-name>.url <new-url>, или путем редактирования .git/config(возможно, через git config -eGit 1.6.3 и новее).
Крис Йонсен,
3
это было очень-очень полезно. Спасибо
Диего Урения
43

ЧАСТЬ 1: «Откуда git знает, куда нажимать?»

Перед выполнением указанной выше команды:

$ git push heroku master

Всегда есть несколько других шагов, которые нужно выполнить: установка Git и Heroku, создание локального репозитория Git, регистрация в heroku, вход в heroku через командную строку, создание дескриптора heroku для точки хостинга ( объяснено в ЧАСТИ 2 )

1. Локальный репозиторий Git:

    $ 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. Зарегистрируйтесь (ed) в Heroku и войдите в систему через командную строку:

$ heroku login
Enter your Heroku credentials.
Email: user@example.com
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

Итак, запустив, $ git push heroku masterвы отправили код / ​​приложение в Heroku.


ЧАСТЬ 2: а что указывает heroku и master ?

Это скорее вопрос Git, чем Heroku - Heroku - это хостинговая платформа, развертывание которой зависит от Git (распределенной системы контроля версий).

Основная концепция «push» - это подтолкнуть что-то (файл, приложение, ..), которое у нас есть локально (на нашей рабочей машине), куда-то еще, в данном случае в удаленный репозиторий (удаленный компьютер).

В Git перед использованием 'push' мы создаем удаленный (дескриптор), который действует как ссылка на удаленный репозиторий (полный URL-адрес), мы делаем это с помощью следующей команды:

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

Основная структура команды push:

$ git push <remote-name> <branch>

Таким образом, $ git push heroku masterвы фактически подталкиваете ваш код / ​​приложение / файл (из некоторого локального репозитория Git) в удаленное репо «heroku».

интересно, когда был создан этот пульт 'heroku', он был добавлен, когда вы выполнили $ heroku create

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

Обратите внимание на последнюю строчку « Git remote heroku добавил ».

чтобы было понятнее, вот команда Git для проверки / вывода всех пультов: $ git remote -v отобразит что-то похожее на следующее

$ git remote -v
heroku     git@heroku.com:somerepo.git (fetch)
heroku     git@heroku.com:somerepo.git (push)

Таким образом, мы можем предположить, что следующая команда была выполнена (неявно) где-то, когда вы сделали $ heroku create , следовательно, создавая удаленный сервер heroku для некоторого репозитория heroku (url) *

$ git remote add heroku git@heroku.com:somerepo.git
Набиль Ахмед
источник
12

heroku требуется как часть гема heroku, чтобы помочь с толчком, а master - это просто ветка git, которую вы нажимаете. Git знает, куда нажимать, потому что вы создаете приложение heroku, push настраивается автоматически, что вы можете увидеть, набрав

git remote -v

если вам нужно изменить это, удалите его, git remote rm herokuа затем добавьте новое приложение yoru сgit remote add heroku git@heroku.com:your-application-15.git

Уилл Айд
источник
обратите внимание, что удаленная ветка обычно создается с тем же именем, что и ветка, которую вы нажимаете. Однако это можно изменить (git push heroku master: mymaster, например, или через файл confgi)
sehe
2
Этот ответ неверен. heroku- это имя пульта дистанционного управления, которое полностью не связано с гемом heroku.
jergason
1

Как и вы, я также изо всех сил пытался понять эти мелкие детали git и heroku, и я тоже был сбит с толку. Но теперь у меня есть немного ясности, чтобы коротко ответить на ваш вопрос.

Предполагая, что у вас есть установка git в каталоге вашего проекта. В папке вашего проекта существует скрытая папка .git, содержащая файл с именем «config», в котором содержится вся информация о пультах дистанционного управления.

Пульты - это ваши индивидуальные репозитории с индивидуальными именами, например origin, heroku, staging, prod и т. Д.

В вашей команде heroku обозначает репозиторий, который вы сопоставили с проектом heroku. Откройте файл конфигурации, вы увидите URL-адрес.

Когда ты бежишь

git push heroku master

вы говорите git переместить основную ветку текущего репозитория происхождения в основную ветку репозитория heroku

Остальные, все подробности уже опубликованы в других ответах, поэтому не хочу повторяться. Насколько я понимаю, это всего лишь короткий ответ. Надеюсь, это поможет.

Самир
источник
0

но если я нажимаю, он все равно подталкивает к тригероку ... есть ли способ вместо этого подтолкнуть к реальной вещи?

Я нашел ответ, который может вас заинтересовать, на сайте heroku:

https://dashboard.heroku.com/apps/NAMEOFYOURAPP/deploy/heroku-git

$ cd my-project/
$ git init
$ heroku git:remote -a nameofyourapp

$ git add .
$ git commit -am "make it better"
$ git push heroku master

Таким образом, герой будет знать, куда толкать!

iair
источник