Git Push Stromzweig zu einem entfernten mit Heroku
-
18-09-2019 - |
Frage
Ich versuche, einen Staging-Zweig auf Heroku zu schaffen, aber es ist etwas, was ich nicht ganz.
Angenommen, ich habe bereits eine Heroku App und das Setup der Fernbedienung, um Staging-Remote-zu-Punkt erstellt, wenn ich tun:
git checkout -b staging staging-remote/master
Ich erhalte eine lokale Niederlassung namens ‚Inszenierung‘, die Inszenierung-Fern / Master-Tracks - oder das ist, was ich dachte ....
Aber:
git remote show staging-remote
Gibt mir dies:
remote staging
Fetch URL: git@heroku.com:myappname.git
Push URL: git@heroku.com: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)
Wie Sie sehen können, sieht der Zug vernünftig, aber der Standard-Push nicht. Es impliziert, dass, wenn ich tun:
git push Staging-remote
Ich werde meinen lokalen Master-Zweig bis in den Staging-Zweig schieben. Aber das ist nicht das, was ich will .... Im Grunde möchte ich Updates in meiner Inszenierung Zweig verschmelzen, dann leicht schieben Sie es auf Heroku ohne den Zweig zu spezifizieren, die in etwa so:
git push staging-remote mybranch:master
Die oben ist nicht schwer zu tun, aber ich mag versehentlich zu vermeiden, dass die vorherigen Push tun und den falschen Zweig drängt ... Das ist doppelt wichtig für die Produktion Zweig Ich mag würde schaffen!
Ich habe versucht, mit git Config durcheinander, aber noch nicht herausgefunden, wie dieses Recht bekommen noch ...
Lösung
Ich habe es und @juba getestet und @ MatthewFord die Versionen funktionieren einwandfrei!
git config remote.staging.push staging:master
Dies drückt mein lokales Thema Zweig namens Staging in dem Fern Zweig Master auf der Remote-Repository namens Staging .
@nickgrim es in der allgemeinen Form gebracht wie folgt:
git config remote.[remoteRepositoryName].push [localBranchName]:[remoteBranchName]
Update:
Darüber hinaus werden moderne git bequem den obigen Konfigurationsbefehl für Sie ausführen, wenn Sie mit der Option git push
-u
:
git push -u staging staging:master
Andere Tipps
Ich habe einen Zweig namens Heroku, und das war für mich:
git config remote.heroku.push heroku:master
Sie das Problem konfrontiert sind, ist Heroku ignoriert alle Zweige außer Master.
Aus dem Buch "O'Reilly - Versionskontrolle mit Git" Seite 184 | Kapitel 11: Remote-Repositorys
Während eine git Push-Operation, mögen Sie in der Regel zur Verfügung zu stellen und die Änderungen zu veröffentlichen Sie machte auf dem lokalen Thema Zweige. Damit andere, um Ihre Änderungen in der finden Remote-Repository, nachdem Sie laden Sie Ihre Änderungen müssen in diesem Repository als Thema Zweige erscheinen. Somit kann während eines typischen git Push-Befehl, die Quellen Zweige von Ihr Repository an die Remote-Repository mit einem Refspec wie gesendet:
+refs/heads/*:refs/heads/*
Dieses Refspec kann als umschrieben werden: Aus dem lokalen Repository, nehmen Sie jeden Zweignamen unter der Source-Namespace
refs/heads/
und legen Sie sie in einem ähnlichen Namen, passenden Zweig unter dem Ziel Namespacerefs/heads/
im Remote-Repository. Der ersterefs/heads/
bezieht sich auf Ihrem lokalen Repository (weil Sie einen Push sind ausgeführt wird), und der zweite bezieht sich auf die Remote-Repository. Die Sternchen sicherzustellen, dass alle Zweige werden repliziert. ...
Das ist, warum das Beispiel von Juba ausfallen sollte. die korrigierte Refspec sollte sein:
git config remote.staging-remote.push +refs/heads/local_branch_name:refs/heads/master
Auf der Seite Everiday Git mit 20 Befehlen oder so :
http://www.kernel.org/pub /software/scm/git/docs/everyday.html
Es scheint, dass Sie erreichen, was Sie durch das Hinzufügen eines Config-Direktive zu Ihrem lokalen Git Repository tun wollen, so etwas wie:
git config remote.staging-remote.push mybranch:refs/remotes/staging-remote/master
Dann, wenn Sie tun, um eine git push
von Ihrem mybranch lokale Niederlassung, sollte es zu geschoben werden, die Master Zweig der Staging-remote Fernbedienung.
Dennoch überprüfen Sie bitte mit git remote show staging-remote
und sorgfältig testen, bevor Sie es, wie ich weit von einem git Experten bin ...
Ich kann nicht einen Weg finden, dies zu tun, aber am Ende fand ich eine handliche Rake Aufgabe es einfach zu machen: http://www.jbarnette.com/2009/11/ 10 / entfalte-to-heroku.html
Ich habe das gleiche Problem, um herauszufinden, wie man mit Heroku Politik zu ignorieren alle Zweige zu behandeln, sondern ‚Master‘. Es besiegt irgendwie den ganzen Punkt zu halten getrennte Zweige, wenn Sie immer nur den Master-Zweig auf Heroku testen können.
Die Folge dieser Einschränkung ist, dass alles, was lokales Thema Zweig ich arbeiten kann ich eine einfache Art und Weise möchte Heroku Master zu diesem lokalen Thema Zweig wechseln und ein „git push -f“ auf Überschreib-Master zu tun auf Heroku. Unnötig zu sagen, es wäre eine sehr gute Idee, eine separate Remote-Repository haben (wie Github), um alles zu sichern, ohne diese Einschränkung. Ich würde, dass man „Ursprung“ nennen und „Heroku“ für Heroku verwenden, so dass „git push“ immer alles gesichert.
Was ich bekam den "Pushing Refspecs" Abschnitt http://progit.org /book/ch9-5.html ist
git push Heroku local-Thema-Zweig: refs / heads / master
Was ich wirklich möchte, ist eine Möglichkeit, dies in der Konfigurationsdatei einzurichten, so dass „git push Heroku“ immer funktioniert die oben ersetzen „local-Thema-Zweig“ mit dem Namen, was auch immer mein aktueller Zweig passiert sein.
Ich kann dies als eine neue Frage stellen, um zu sehen, ob jemand herausgefunden hat, wie dies zu tun.
Das funktioniert. Ich habe es mehr als ein paar Mal benutzt für Kunden mit git-Flow-Einrichtung, Heroku und einem Backup-git-Service.
.git / config für den Repo:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
[heroku]
account = youraccount
[remote "origin"]
url = git@bitbucket.org: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 = git@heroku.com:your-prod-app.git
push = master:master
[remote "staging"]
pushurl = git@heroku.com:your-staging-app.git
push = staging:master
Alle richtig funktioniert:
git push origin
git pull origin
git push staging
git push production
Denken Sie holen und schieben so wie stdout und stdin, wo beide umgeleitet oder geschlossen werden kann ein Weg zu sein. Auch wenn jemand weiß, wie diese Einstellungen zu erhalten, ohne .git / config Hacking, können Sie sich mit einem bearbeiten zu ändern, Karma Punkte sind sicher zu folgen.