Github: Spiegeln von Gh-Seiten zum Meistern

68

Ich entwickle ein jQuery-Plugin, das auf GitHub gehostet wird. Es ist eine Demo enthalten, von der ich manuell kopiere und in den Zweig gh-pagesschiebe. Ich möchte sie haben, damit beim Ändern eine Änderung masterautomatisch verschoben gh-pageswird oder zumindest ein Setup, in dem sie gespiegelt werden .

Ich habe diese Frage bereits gesehen, bin mir aber nicht sicher, ob sie meine Frage in Bezug auf diese Anforderungen wirklich beantwortet:

  1. Ich benutze Tower , es macht mir nichts aus, das Terminal (Mac) zu verwenden, um Änderungen an der Konfiguration vorzunehmen, solange die Lösung mit dieser GUI funktioniert.
  2. Ich möchte diese "Spiegelung" nur für bestimmte Repos, nicht für alle auf meinem Computer.

Prost

Ben Everard
quelle
1
Mit Github können Seiten jetzt vom Hauptzweig oder /docsinnerhalb des Hauptzweigs gesteuert werden . github.com/blog/2228-simpler-github-pages-publishing
Ben Everard

Antworten:

67
git checkout gh-pages
git merge master
git push origin gh-pages
Steve
quelle
Prost Steve, ich werde es später versuchen und dir sagen, wie es mir geht.
Ben Everard
Netter Steve, die ursprüngliche Lösung hat nicht funktioniert, aber das ist ein Vergnügen.
Ben Everard
@ Visgean Skeloru, also muss ich dies jedes Mal, wenn ich zum Master drücke, für Gh-Seiten tun, damit Master und Gh-Seiten durcheinander geraten.
HattrickNZ
1
@ HattrickNZ: Ja, aber schauen Sie sich die Lösung von christianvuerings an, diese ist permanent und automatisch ...
Visgean Skeloru
107

Fügen Sie dem [remote "origin"]Abschnitt von die folgenden 2 Zeilen hinzu .git/config:

push = +refs/heads/master:refs/heads/gh-pages
push = +refs/heads/master:refs/heads/master

Jedes Mal, wenn pushSie es tun, wird der Master automatisch auch auf Gh-Seiten verschoben. Ich verwende dies für das jQuery Lifestream-Projekt .

christianvuerings
quelle
@ James Gern geschehen, es hat eine Weile gedauert, bis ich auch diesen gefunden habe.
Christianvuerings
Muss jeder dies für jedes lokale Repo tun? Oder freut sich das automatisch, wenn Sie es klonen? (nachdem Sie diese Änderung vorgenommen haben) Können Sie Änderungen an .git/configfestlegen?
Thomas Reggi
4
Das ist cool, außer dass diese Änderung nicht in das Projekt eingecheckt wird, sodass jeder die Änderung von Hand auf seinen lokalen Feldern vornehmen kann. Es wäre leicht, sich zu verlaufen.
Ccleve
1
Gibt es eine typische Möglichkeit, Dinge wie .git/configÄnderungen zu teilen ?
Blong
1
@ b.long Heutzutage verwenden immer mehr Leute Dotfiles. dotfiles.github.com Diese enthalten nützliche Shell-Skripte und gute Standardeinstellungen
christianvuerings
27

Tu nicht, was denbuzze oben vorschlägt !! Durch das Pluszeichen (+) im Push werden Aktualisierungen ohne schnellen Vorlauf stillschweigend akzeptiert. Ich habe auf die harte Tour herausgefunden, dass dies unwiderruflich dazu führen kann, dass Arbeit verloren geht, was zu baumelnden Verpflichtungen führt. Durch einfaches Entfernen der Pluszeichen wird dies sicherer.

push = refs/heads/master:refs/heads/gh-pages
push = refs/heads/master:refs/heads/master

Anstatt ein Force-Update zu veranlassen, wird jetzt ein Warn- und Pull-Vorschlag ausgelöst

To https://github.com/someuser/repo.git
 ! [rejected]        master -> gh-pages (fetch first)
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://github.com/someuser/repo.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
MCSDWVL
quelle
@denbuzze, ist das wahr! Hast du uns angelogen? :)
KyleMit
Ich bin mir nicht sicher, ob das, was denbuzze vorschlägt, irgendetwas kaputt macht, weil ich es nicht getestet habe, aber ich weiß, dass das, was Sie vorgeschlagen haben, funktioniert.
Sevin7
3
@MCSDWVL: Warum hast du keinen Kommentar zu den Antworten von denbuzze hinterlassen?
Dan Dascalescu
Mein Konfigurationsursprungsabschnitt hat: fetch = + refs / Heads / *: refs / remotes / origin / * url = git @ etwas: user / repo.git wie es verwendet *, muss ich noch beide Zeilen hinzufügen. Ich brauche meinen einen Zweig, um mit dem Master synchronisiert zu werden.
Prashant
9

Ich füge weitere Erklärungen zu den Antworten von @denbuzze und @MCSDWVL hinzu .

Wenn Sie bei jedem Start sowohl auf masterals auch gh-pagesautomatisch pushen möchtengit push origin Sie wahrscheinlich der Git-Konfiguration Ihres Repos eine Refspec hinzufügen.

Laut dem git-scm-Buch können Sie also zwei RefSpecs hinzufügen , indem Sie pushder Repo-Konfigurationsdatei zwei Werte hinzufügen .git/config:

[remote "origin"]
url = https://github.com/<github_user>/<repo_name>
      fetch = +refs/heads/*:refs/remotes/origin/*
      push = refs/heads/master:refs/heads/master
      push = refs/heads/master:refs/heads/gh-pages

Das wird dazu führen git push origin, dass:

  1. Schieben Sie den lokalen masterZweig zum entfernten masterZweig
  2. Schieben Sie den lokalen masterZweig zum entfernten gh-pagesZweig

standardmäßig.

Hinweis : Wenn Sie ein +vor der Spezifikation verwenden, wird ein Druck auf das Repo erzwungen. Verwenden Sie es mit Vorsicht:

Das Format des Refspec ist eine optionale +, gefolgt von <src>:<dst>, wo <src>das Muster für Referenzen auf der Remote - Seite und <dst>ist , wo werden diese Referenzen lokal geschrieben werden. Das +weist Git an, die Referenz zu aktualisieren, auch wenn es sich nicht um einen schnellen Vorlauf handelt.

Raviolicode
quelle
Wird das alle Dateien vom Master in verschieben gh-pages, auch diejenigen, die nichts damit zu tun haben gh-pages? Warum macht GitHub das so kompliziert? Wäre es nicht viel einfacher, wenn nur ein Ordner gerendert würde gh-pages? Hier ist ein Versuch, diese Art von Gh-Pages-Ordner-Setup zu erstellen .
Dan Dascalescu
Ich habe zusätzlich in der Konfiguration: [Zweig "Master"] Remote = Origin Merge = Refs / Heads / Master Muss ich noch die erste Zeile hinzufügen, um zum Master im Origin-Abschnitt zu pushen?
Prashant
2

Ich persönlich möchte dies in einen Alias ​​einwickeln:

alias gpogh="git checkout gh-pages && git merge master && git push origin gh-pages && git checkout -"

Dies spiegelt Ihren Master gh-pageswider, drückt auf Github und schaltet dann den vorherigen Zweig zurück, an dem Sie gearbeitet haben.

Dhulihan
quelle
2

Commit und Push to Master ..

dann :

git checkout gh-pages  // -> go to gh-pages branch
git rebase master // bring gh-pages up to date with master
git push origin gh-pages // commit the changes
git checkout master // return to the master branch
azl
quelle
2

ODER Sie können einfach das unten stehende cmd verwenden, um Ihren lokalen Hauptzweig zum gh-pages-Hauptzweig zu verschieben. git push -f origin master:gh-pages

DJ Jaiswal
quelle
1

UPDATE : Mit GitHub können jetzt Seiten aus jedem gewünschten Zweig und Verzeichnis veröffentlicht werden.


Es war viel einfacher für mich, den gh-pagesZweig als Master zu verwenden. Es gibt nichts Magisches an "Meister"; Es ist nur ein anderer Filialname. Es ist etwas Magisches gh-Seiten, weil das ist , wo GitHub für index.html sucht Ihre Seite zu dienen.

Lesen Sie mehr in meiner anderen Antwort zu diesem Thema .

Die Verwendung gh-pagesals Master ist auch einfacher als Teilbäume, die einfacher als das Spiegeln sind. Sie können git subtreewie hier oder hier beschrieben verwenden : Wenn Sie ein Verzeichnis haben, das Ihre Demo enthält, können Sie dieses Verzeichnis gh-branchmit einem Befehl in das Verzeichnis verschieben . Angenommen, Sie benennen das Verzeichnis gh-pages, um die Dinge klarer zu machen. Nachdem Sie Ihre Änderungen festgeschrieben und übertragen haben master, führen Sie diese aus, um gh-pages zu aktualisieren:

git subtree push --prefix gh-pages origin gh-pages

Das Problem ist, wenn sich Ihre Dateien gh-pagesauf Dateien in anderen Verzeichnissen außerhalb beziehen. Symlinks funktionieren nicht, daher müssen Sie Dateien in das Verzeichnis kopieren , das als Gh-Seiten dient.

Wenn Sie verwenden gh-pagesals Master , wird dieses Problem nicht auftreten.

Dan Dascalescu
quelle