Как протолкнуть разные локальные ветки Git в Heroku / master - PullRequest
369 голосов
/ 04 июня 2010

У Heroku есть политика игнорирования всех ветвей, кроме 'master'.

Хотя я уверен, что у разработчиков Heroku есть отличные причины для этой политики (я предполагаю, что для хранения и оптимизации производительности), для меня, как для разработчика, следствием является то, что в любой локальной ветке тем, над которой я могу работать, мне бы хотелось простой способ переключить мастера Heroku на эту локальную ветку тем и выполнить команду «git push heroku -f», чтобы перезаписать мастер на Heroku.

То, что я получил от прочтения раздела "Pushing Refspecs" http://progit.org/book/ch9-5.html, равно

git push -f heroku local-topic-branch:refs/heads/master

Что мне действительно нравится, так это способ настроить это в файле конфигурации так, чтобы «git push heroku» всегда делал вышеуказанное, заменяя local-topic-branch именем любого моего текущая ветка бывает Если кто-нибудь знает, как этого добиться, пожалуйста, дайте мне знать!

Предостережение для этого, конечно, заключается в том, что это разумно, только если я единственный, кто может перейти к этому приложению / хранилищу Heroku. Команда тестирования или QA может управлять таким репозиторием, чтобы опробовать разные ветви-кандидаты, но им придется координировать свои действия, чтобы они все согласились с тем, какую ветвь они используют в любой конкретный день.

Излишне говорить, что было бы очень неплохо иметь отдельный удаленный репозиторий (например, GitHub) без этого ограничения для резервного копирования всего. Я бы назвал это «происхождение» и использовал бы «heroku» для Heroku, чтобы «git push» всегда делал резервную копию всего, что нужно, а «git push heroku» помещает любую ветвь, в которой я сейчас нахожусь, в главную ветку Heroku, перезаписывая ее если необходимо.

Будет ли это работать?

[remote "heroku"]
    url = git@heroku.com:my-app.git
    push = +refs/heads/*:refs/heads/master

Я хотел бы услышать от кого-то более опытного, прежде чем я начну экспериментировать, хотя я предполагаю, что мог бы создать фиктивное приложение на Heroku и поэкспериментировать с этим.

Что касается выборки, мне все равно, если репозиторий Heroku предназначен только для записи. У меня все еще есть отдельный репозиторий, такой как GitHub, для резервного копирования и клонирования всей моей работы.

Сноска. Этот вопрос похож на Хорошее развертывание Git с использованием стратегии ветвления с Heroku?

Ответы [ 9 ]

1464 голосов
/ 21 июня 2012

См. https://devcenter.heroku.com/articles/git#deploying-code

$ git push heroku yourbranch:master
120 голосов
/ 05 июня 2010

При использовании подстановочного знака он должен присутствовать с обеих сторон refspec, поэтому +refs/heads/*:refs/heads/master не будет работать. Но вы можете использовать +HEAD:refs/heads/master:

git config remote.heroku.push +HEAD:refs/heads/master

Кроме того, вы можете сделать это напрямую с помощью git push :

git push heroku +HEAD:master
git push -f heroku HEAD:master
45 голосов
/ 14 ноября 2011
git push -f heroku local_branch_name:master
6 голосов
/ 24 ноября 2016

Самая безопасная команда для передачи различных локальных веток Git в Heroku / master.

git push -f heroku branch_name:master

Примечание: Несмотря на то, что вы можете использовать push без использования -f, рекомендуется использовать флаг -f (force), чтобы избежать конфликтов с другими разработчиками.

5 голосов
/ 22 января 2014

Также обратите внимание, что если вы используете систему git flow и вашу ветвь функций, можно назвать

feature/mobile_additions

и с помощью git remote, называемого stagingtwo, тогда команда нажать на heroku будет

git push stagingtwo feature/mobile_additions:master
4 голосов
/ 21 декабря 2010

Вы должны проверить heroku_san , это решает эту проблему довольно хорошо.

Например, вы могли бы:

git checkout BRANCH
rake qa deploy

Это также упрощает запуск новых экземпляров Heroku для развертывания ветки тем на новых серверах:

git checkout BRANCH
# edit config/heroku.yml with new app instance and shortname
rake shortname heroku:create deploy # auto creates deploys and migrates

И, конечно, вы можете делать более простые рейк-задания, если часто что-то делаете.

2 голосов
/ 04 июня 2010
1 голос
/ 02 декабря 2014

Heroku labs теперь предлагает дополнение к github, которое позволяет вам указать, какую ветвь нажать.

См. Статью Heroku об этой бета-функции.

На данный момент вам необходимо зарегистрироваться в качестве бета-тестера.

0 голосов
/ 05 июня 2010

Я думаю, что это должно быть

push = refs/heads/*:refs/heads/*

вместо ...

...