Как направить разные локальные ветки Git на Heroku/master

Heroku имеет политику игнорирования всех ветвей, но "мастер".

Хотя я уверен, что дизайнеры 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" всегда выполнял вышеуказанное, заменяя ветвь локального раздела именем того, что происходит с моей текущей ветвью быть. Если кто-то знает, как это сделать, пожалуйста, дайте мне знать!

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

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

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

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

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

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

Сноска: этот вопрос похож на, но не совсем такой же, как Хорошее развертывание Git с использованием стратегии веток с Heroku?

Ответ 1

При использовании подстановочного знака он должен присутствовать на обеих сторонах 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

Ответ 3

git push -f local_branch_name:master

Ответ 4

Вы должны проверить 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

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

Ответ 5

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

feature/mobile_additions

и с git удаленным вызовом stagingtwo, тогда команда push to heroku будет

git push stagingtwo feature/mobile_additions:master

Ответ 6

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

git push -f heroku branch_name:master

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

Ответ 9

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

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

вместо...