Heroku ma politykę ignorowania wszystkich gałęzi oprócz „master”.
Chociaż jestem pewien, że projektanci Heroku mają doskonałe powody dla tych zasad (zgaduję pod kątem optymalizacji pamięci i wydajności), konsekwencją dla mnie jako programisty jest to, że niezależnie od gałęzi lokalnego tematu, nad którą mogę pracować, chciałbym w łatwy sposób aby przełączyć wzorzec Heroku na lokalną gałąź tematyczną i wykonać polecenie „git push heroku -f”, aby nadpisać wzorzec Heroku.
To, co uzyskałem po przeczytaniu sekcji „Pushing Refspecs” http://progit.org/book/ch9-5.html, to
git push -f heroku local-topic-branch: refs / heads / master
To, co naprawdę chciałbym, to sposób na skonfigurowanie tego w pliku konfiguracyjnym, tak aby „git push heroku” zawsze robi powyższe, zastępując gałąź lokalnego tematu nazwą jakiejkolwiek mojej obecnej gałęzi. Jeśli ktoś wie, jak to osiągnąć, daj mi znać!
Zastrzeżeniem tego jest oczywiście to, że jest to rozsądne tylko wtedy, gdy jestem jedynym, który może naciskać na tę aplikację / repozytorium Heroku. Zespół testowy lub zespół kontroli jakości może zarządzać takim repozytorium, aby wypróbować różne gałęzie kandydatów, ale będą musieli koordynować, aby wszyscy uzgodnili, do której gałęzi pchają go w danym dniu.
Nie trzeba dodawać, że bardzo dobrym pomysłem byłoby posiadanie oddzielnego zdalnego repozytorium (takiego jak GitHub) bez tego ograniczenia tworzenia kopii zapasowej wszystkiego. Nazwałbym to jedno „początkiem” i użyłem „heroku” dla Heroku, aby „git push” zawsze tworzyło kopię zapasową wszystkiego do pochodzenia, a „git push heroku” wypycha dowolną gałąź, w której aktualnie się znajduję, do gałęzi głównej Heroku, zastępując ją Jeśli to konieczne.
Czy to zadziała?
[zdalne „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ć na Heroku aplikację-atrapę 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 całej mojej pracy.
Przypis: To pytanie jest podobne, ale nie do końca takie samo jak wdrożenie Good Git przy użyciu strategii oddziałów w Heroku?
Odpowiedzi:
Gdy używasz symbolu wieloznacznego, musi on 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
:Możesz to również zrobić bezpośrednio za pomocą git push :
źródło
git push
wykonują polecenia, robią to samo. Zobaczgit push --help
znaczenie-f
opcji i+
refspec.-f
oznacza siłę . To zadziałało dla mnie z odpowiedzią Jassy .Zobacz https://devcenter.heroku.com/articles/git#deploying-code
źródło
git push :master
co usuwa gałąź master, nadpisując ją niczym. To różni się od zastąpienia go innym oddziałem. Prawdopodobnie Heroku ma zabezpieczenia zapobiegające usunięciu gałęzi master.źródło
-f
lub--force
, i zawsze najlepiej jest upewnić się, że wiesz, co robisz, gdy naciskasz.Najbezpieczniejsze polecenie wypychania różnych lokalnych gałęzi Git do Heroku / master.
Uwaga: Chociaż możesz przepychać bez użycia opcji -f, zalecane jest użycie opcji -f (flaga wymuszenia), aby uniknąć konfliktów z działaniami innych programistów.
źródło
Dla mnie to działa,
źródło: - oficjalne dokumenty
źródło
Zauważ też, że jeśli używasz systemu git flow i gałęzi funkcji, możesz się nazywać
i przy pomocy git-zdalnego zwanego stagingtwo, wtedy poleceniem push to heroku byłoby
źródło
Powinieneś sprawdzić heroku_san , to całkiem ładnie rozwiązuje ten problem.
Na przykład możesz:
Ułatwia także tworzenie nowych instancji Heroku w celu wdrożenia gałęzi tematycznej na nowych serwerach:
I oczywiście możesz wykonywać prostsze zadania prowizji, jeśli robisz coś często.
źródło
Uważam to za pomocne. http://jqr.github.com/2009/04/25/deploying-multiple-environments-on-heroku.html
źródło
Heroku labs oferuje teraz dodatek github, który pozwala ci określić, którą gałąź chcesz przesłać.
Zobacz, jak Heroku napisał o tej funkcji beta.
Na razie musisz zarejestrować się jako tester wersji beta.
źródło
Myślę, że tak powinno być
push = refs/heads/*:refs/heads/*
zamiast...
źródło