Jak wypchnąć różne lokalne gałęzie Git do Heroku / master

Heroku ma politykę ignorowania wszystkich gałęzi poza "mistrzem".

Chociaż jestem pewien, że projektanci Heroku mają doskonałe powody do tej polityki( zgaduję, że dla optymalizacji pamięci i wydajności), konsekwencją dla mnie jako programisty jest to, że niezależnie od lokalnej gałęzi tematycznej, nad którą pracuję, chciałbym w łatwy sposób przełączyć master Heroku na tę lokalną gałąź tematyczną i zrobić "git push heroku-f", aby nadpisać master Na Heroku.

Co mam z czytania " pchania Refspecs " Sekcja http://progit.org/book/ch9-5.html jest

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

To, co naprawdę chciałbym, to sposób, aby ustawić to w pliku konfiguracyjnym tak, aby "git push heroku" zawsze robił powyższe, zastępując local-topic-branch nazwą dowolnej mojej bieżącej gałęzi. Jeśli ktoś wie, jak to osiągnąć, proszę dać mi znać!

Zastrzeżenie do tego, oczywiście, jest to tylko rozsądne, jeśli jestem jedynym, który może pchnąć do tego Heroku aplikacja / repozytorium. Zespół testowy lub QA może zarządzać takim repozytorium, aby wypróbować różne gałęzie kandydatów, ale musiałby koordynować tak, aby wszyscy zgadzali się, do której gałęzi naciskają w danym dniu.

Nie trzeba dodawać, że bardzo dobrym pomysłem byłoby posiadanie oddzielnego zdalnego repozytorium (takiego jak GitHub) bez tego ograniczenia do tworzenia kopii zapasowych. Nazwałbym to "origin" i użyłbym "heroku" dla Heroku, aby "git push" zawsze cofał wszystko do origin, a "git push heroku" popycha gałąź, na której aktualnie jestem, do gałęzi głównej Heroku, nadpisując ją w razie potrzeby.

Czy to zadziała?
[remote "heroku"]
    url = [email protected]:my-app.git
    push = +refs/heads/*:refs/heads/master

Chciałbym usłyszeć od kogoś bardziej doświadczonego, zanim zacznę eksperymentować, chociaż przypuszczam, że mógłbym stworzyć fałszywą aplikację na Heroku i eksperymentować z tym.

Jeśli chodzi o pobieranie, nie obchodzi mnie, czy repozytorium Heroku jest tylko do zapisu. Nadal mam osobne repozytorium, takie jak GitHub, do tworzenia kopii zapasowych i klonowania wszystkich moich praca.

Przypis: to pytanie jest podobne, ale nie do końca to samo co dobre wdrożenie Gita przy użyciu strategii branches z Heroku?

Author: techdreams, 2010-06-04

9 answers

Podczas używania wieloznaczności, musiała ona znajdować się po obu stronach refspec, więc +refs/heads/*:refs/heads/master nie będzie działać. Ale możesz użyć +HEAD:refs/heads/master:

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

Możesz to zrobić bezpośrednio za pomocą git push :

git push heroku +HEAD:master
git push -f heroku HEAD:master
 111
Author: Chris Johnsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-30 02:10:07

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

$ git push heroku yourbranch:master
 1325
Author: jassa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-24 12:43:59
git push -f heroku local_branch_name:master
 33
Author: Tomasz Mazur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-11 12:03:32

Powinieneś sprawdzić heroku_san , to rozwiązuje ten problem całkiem ładnie.

Na przykład możesz:

git checkout BRANCH
rake qa deploy

Ułatwia również uruchamianie nowych instancji Heroku, aby wdrożyć gałąź tematyczną na nowych serwerach:

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

I oczywiście możesz zrobić prostsze zadania rake, jeśli robisz coś często.

 4
Author: jqr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-21 04:24:35

Zauważ również, że jeśli używasz systemu git flow i gałęzi feature można nazwać

feature/mobile_additions

I z git remote ' em o nazwie stagingtwo, wtedy komenda do wypchnięcia do heroku będzie

git push stagingtwo feature/mobile_additions:master
 4
Author: Jonathon Batson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-22 04:57:06

Najbezpieczniejsze polecenie do wypychania różnych lokalnych gałęzi Git do Heroku / master.

git push -f heroku branch_name:master

Notatka: chociaż można naciskać bez użycia-f, zaleca się użycie-f (znacznika force), aby uniknąć konfliktów z naciśnięciami innych programistów.

 4
Author: techdreams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-24 06:50:06
 2
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-04 17:27:34

Heroku labs oferuje teraz dodatek github, który pozwoli Ci określić, którą gałąź chcesz wypchnąć.

Zobacz, jak Heroku pisze o tej funkcji beta.

Na razie musisz zarejestrować się jako beta tester.

 1
Author: irth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-02 02:01:07

Myślę, że powinno być

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

Zamiast tego...
 0
Author: ken,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-05 11:16:47