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

Ответ 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, пожалуйста, не стесняйтесь изменять с помощью редактирования, точки кармы обязательно последуют.