Git нажмите текущую ветвь на пульте дистанционного управления с помощью Heroku
Я пытаюсь создать промежуточную ветку на Heroku, но там что-то не получается.
Предполагая, что я уже создал приложение heroku и настроил пульт, чтобы указать на промежуточную дистанционную, если я:
git checkout -b staging staging-remote/master
Я получаю локальную ветвь, называемую "постановка", которая отслеживает промежуточную/удаленную/ведущую, или то, что я думал....
Но:
git remote show staging-remote
Дает мне это:
remote staging
Fetch URL: [email protected]:myappname.git
Push URL: [email protected]:myappname.git
HEAD branch: master
Remote branch:
master tracked
Local branch configured for 'git pull':
staging-remote merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)
Как вы можете видеть, тяга выглядит разумно, но по умолчанию нет. Это означает, что если я:
git push-пульт дистанционного управления
Я собираюсь подтолкнуть свою локальную ветвь мастера к промежуточной ветке. Но это не то, что я хочу.... В принципе, я хочу объединить обновления в свою промежуточную ветку, а затем легко подтолкнуть ее к герою, не указывая таким образом ветку:
git push staging-remote mybranch:master
Это не сложно сделать, но я хочу избежать случайного выполнения предыдущего нажатия и нажатия неправильной ветки... Это вдвойне важно для производственной ветки, которую я хотел бы создать!
Я пробовал общаться с git config, но не понял, как это сделать еще...
Ответы
Ответ 1
Я протестировал его, и версии @juba и @MatthewFord работают отлично!
git config remote.staging.push staging:master
Это подталкивает мою ветку локального раздела с именем промежуточной в удаленную ветвь мастер в удаленном репозитории с именем .
@nickgrim помещает его в общий вид следующим образом:
git config remote.[remoteRepositoryName].push [localBranchName]:[remoteBranchName]
Update:
Кроме того, современный git будет удобно запускать указанную выше конфигурационную команду для вас, когда вы git push
с опцией -u
:
git push -u staging staging:master
Ответ 2
У меня есть ветвь с именем heroku, и это сработало для меня:
git config remote.heroku.push heroku:master
проблема, с которой вы сталкиваетесь, - это героя игнорирует все ветки, кроме мастера.
Ответ 3
Из книги "OReilly - Управление версиями с Git" страница 184 | Глава 11: Удаленные репозитории
Во время операции git push вы обычно хотите предоставить и опубликовать изменения вы сделали в своих локальных ветках темы. Чтобы другие могли найти ваши изменения в удаленный репозиторий после их загрузки, ваши изменения должны появиться в этом репозитории как ветки темы. Таким образом, во время типичной команды git push источник отделяется от ваш репозиторий отправляется в удаленный репозиторий с помощью refspec, например:
+refs/heads/*:refs/heads/*
Этот refspec можно перефразировать как: Из локального репозитория возьмите каждое имя ветки, найденное в пространстве имен источников refs/heads/
и поместите его в аналогичную именованную ветку соответствия под пунктом назначения namespace refs/heads/
в удаленном репозитории. Первый refs/heads/
относится к вашему локальному репозиторию (потому что вы выполняете push), а второй относится к удаленному репозиторию. Звездочки гарантируют, что все ветки реплицируются....
Вот почему пример из Джубы должен потерпеть неудачу. исправленный refspec должен быть:
git config remote.staging-remote.push +refs/heads/local_branch_name:refs/heads/master
Ответ 4
Со страницы Everiday Git с 20 командами или около того:
http://www.kernel.org/pub/software/scm/git/docs/everyday.html
Кажется, что вы можете добиться того, что хотите сделать, добавив директиву config в локальный репозиторий Git, например:
git config remote.staging-remote.push mybranch:refs/remotes/staging-remote/master
Затем, если вы делаете git push
из своей локальной ветки mybranch, ее следует нажать на главную ветвь вашего промежуточного удаленного пульта.
Тем не менее, пожалуйста, подтвердите с помощью git remote show staging-remote
и тщательно протестируйте его перед его использованием, поскольку я далек от эксперта Git...
Ответ 5
Я не мог понять, как это сделать, но в итоге я нашел удобную задачу рейка, чтобы упростить ее:
http://www.jbarnette.com/2009/11/10/deploying-to-heroku.html
Ответ 6
У меня такая же проблема, пытаясь понять, как бороться с политикой Героку, игнорируя все ветки, но "мастер". Это вроде бы поражает весь смысл сохранения отдельных ветвей, если вы можете только проверить мастерскую ветку на Хереку.
Следствием этого ограничения является то, что независимо от того, в какой ветке разделов я могу работать, я бы хотел, чтобы простой способ переключить мастер Heroku в эту локальную ветвь темы и сделать "git push -f" писать мастера на Хереку. Излишне говорить, что было бы очень неплохо иметь отдельный удаленный репозиторий (например, Github), чтобы поддержать все без этого ограничения. Я бы назвал это "происхождение" и использовал "героку" для Heroku, чтобы "git push" всегда поддерживал все.
Что я получил от чтения раздела "Pushing Refspecs" http://progit.org/book/ch9-5.html
git push heroku local-topic-branch: refs/heads/master
Мне бы очень понравился способ установить это в файле конфигурации, чтобы "git push heroku" всегда выполнял вышеуказанное, заменяя "ветвь локального раздела" именем любой моей текущей ветки бывает.
Я могу спросить об этом как о новом вопросе, чтобы узнать, выяснил ли кто-нибудь еще, как это сделать.
Ответ 7
Это работает. Я использовал его более чем несколько раз для настройки клиентов с помощью git -flow, heroku и резервной службы git.
.git/config для репо:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
[heroku]
account = youraccount
[remote "origin"]
url = [email protected]:youruser/yoursite.heroku.com.git # or github, etc.
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[branch "staging"]
remote = origin
merge = refs/heads/staging
[branch "develop"]
remote = origin
merge = refs/heads/develop
[remote "production"]
pushurl = [email protected]:your-prod-app.git
push = master:master
[remote "staging"]
pushurl = [email protected]:your-staging-app.git
push = staging:master
Все работает правильно:
git push origin
git pull origin
git push staging
git push production
Подумайте о том, как извлечь и нажать как stdout и stdin, где оба могут быть перенаправлены или закрыты, чтобы быть одним способом. Также, если кто-то знает, как получить эти настройки без взлома .git/config, пожалуйста, не стесняйтесь изменять с помощью редактирования, точки кармы обязательно последуют.