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

War es hilfreich?

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   Namespace refs/heads/ im Remote-Repository.   Der erste refs/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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top