2013-03-05 14 views
19

Ich habe eine Site lokal mit Jekyll erstellt und habe sie zu einem neuen Master-Repo (benutzername.github.com) gepusht und die Site funktioniert großartig. Meine Frage ist, wie ziehe ich nur der deployable Teil, die _ Website Verzeichnis, in eine gh-Seiten Zweig? Oder besser gesagt, den Inhalt dieses Verzeichnisses, wenn dies der beste Weg für die Bereitstellung ist?Jekyll auf Github-Seiten implementieren

Ich plane die Verwendung einer benutzerdefinierten Domäne. Mein Workflow wird darin bestehen, im Master-Zweig zu arbeiten, vielleicht in einigen Feature-Zweigen, und dann das kompilierte Ergebnis in den Zweig gh-pages zu schieben (zusammenführen). Klingt das richtig?

Ich habe eine harte Zeit herauszufinden, es über Dokumentation, würde mich über jede Hilfe freuen, danke!

Antwort

17

Ihr Workflow klingt aufgrund der Details in Ihrer Frage nicht korrekt. Wenn Sie Ihre Jekyll-basierte Site in ein username.github.io Repository verschoben haben, brauchen Sie keine gh-pages Verzweigung. Ein Zweig gh-pages ist nur für Repositories erforderlich, in denen Code und eine Website im selben Repository gespeichert werden sollen. GitHub Pages wird sich darum kümmern, Jekyll für Sie auszuführen und die kompilierte Site in beiden Fällen zu bedienen.

GitHub Pages führt Jekyll auf eine sehr spezifische Weise aus, um es sicher zu halten. Wenn Sie benutzerdefinierte Plugins mit Ihrer Jekyll-Site verwenden, müssen Sie Ihre kompilierte Site (das Verzeichnis _site, das Sie erwähnten) auf dem Master-Zweig und die Quelle in einem anderen Zweig speichern.

Zusammengefasst sollte Ihr Workflow in Ihrem lokalen Repository funktionieren - entweder in der Zweigstelle oder Feature-Zweig master (die Feature-Zweige zu Ihrem lokalen Zweig master zusammenführen) - und wenn Sie bereit sind zu veröffentlichen, drücken Sie Ihre lokales Repository zum master Zweig auf GitHub.

3

Was Sie tun möchten, ist sehr ähnlich wie Octopress funktioniert. Lassen Sie mich Ihnen erklären, wie Sie so etwas tun können.

Sie möchten die in _site vorhandenen Daten in den Zweig gh-pages implementieren. Also, Ihr erster Schritt wird sein, den Standard-Zweig für Ihr Repository username.github.com zu gh-pages zu machen und nicht master oder source (grundsätzlich was auch immer Sie wollen). Was Sie jetzt tun müssen, ist Aufgaben in Ihrem Rakefile schreiben, die den Inhalt von _site in den Zweig gh-pages kopieren. Sobald dies erledigt ist, können Sie die push Prozedur automatisieren oder manuell durchführen. Auf diese Weise wird GitHub Ihre Website nicht erstellen, wenn Sie Ihre Standardverzweigung push, sondern nur die statischen Seiten, die in _site vorhanden sind, Server.

Wenn Sie wissen möchten, wie die Skripte funktionieren, sollten Sie sich die in Octopress vorhandene Rakefile ansehen. Es hat diese beiden Aufgaben, die als generate und deploy bezeichnet werden. Wenn Sie rake generate ausführen, wird jekyll --no-auto mit Parametern ausgeführt, um den Code in ein Verzeichnis mit dem Namen _deploy zu versetzen. Wenn Sie rake deploy ausführen, wird der Inhalt von _deploy in den Zweig gh-pages kopiert und Commit ausgeführt. Persönlich mag ich diese Prozedur sehr, aber ich habe sie nicht in meiner Jekyll-Seite implementiert.

3

Versuchen Sie meine jgd gem.Alles, was Sie tun müssen, ist es zu installieren und zu starten:

gem install jgd 
jgd 

Fertig! Ihre Site wird unter gh-pages erstellt und bereitgestellt. Auch jgd ist perfekt in travis-ci oder jeden anderen CI-Server integriert.

Dieser Beitrag erklärt den Mechanismus im Detail: http://www.yegor256.com/2014/06/24/jekyll-github-deploy.html

+0

Jede Idee, über [diese] (http://stackoverflow.com/q/34532476/2404470) – xameeramir

1

Sie wollen nicht _site Änderungen an den Dateien im Ordner machen. _site is Were Jekyll speichert die statischen HTML-Seiten, die es generiert. Sie werden beim nächsten Generieren der Site durch den Jekyll-Server automatisch überschrieben. Wenn Sie beispielsweise einen neuen Blogpost erstellen, sieht der Server die neue Datei (oder die aktualisierte Datei). Anschließend erstellt der Server die statischen Seiten mit dem neuen Inhalt neu. So befindet sich Ihr neuer Blogeintrag oben auf der Seite.

Es wird als bewährte Methode betrachtet, _site zu Ihrer .gitignore Datei hinzuzufügen. Sie müssen dieses Verzeichnis nicht in Ihr Repository verschieben, da es überschrieben wird, sobald es auf die Server von github trifft.

Ich denke, was Sie tun möchten, ist checkout ein neuer Zweig, Änderungen vornehmen, und dann das in den Zweig gh-pages zusammenführen.

1

Ihr Workflow sollte in einem Entwicklungs- oder Feature-Zweig arbeiten und dann NUR die erstellten Dateien in Ihren Master-Zweig schieben, damit sie von Github Pages bedient werden können.

dies zu tun:

  1. startet in Ihrem development Zweig mit allen Änderungen bereit Live gebaut und gemacht werden.
  2. Run in Ihrem Entwicklungszweig: rm -rf _site (diese alte gebaute Dateien in den _site Ordner entfernen wird)
  3. Run git clone -b master 'git config remote.origin.url' _site
  4. Run jekyll build (bauen Sie Ihre Website) (dies wird einen Master-Zweig für Ihre gebauten Dateien erstellen)
  5. cd _site
  6. Wenn Sie eine benutzerdefinierte Domain haben, haben 7-8, sonst überspringen 9
  7. touch CNAME
  8. Ihre Fügen Sie benutzerdefinierte Schritt Domain zu dieser CNAME-Datei
  9. Git hinzufügen. (Sie sollen in dem jetzt Master/_site Zweig sein)
  10. git commit
  11. git push

nun nur Ihre gebauten Dateien auf master sein sollen, die Arbeitsdateien auf Ihrem development oder Feature-Zweig sein !

ich mit diesem für eine Weile gekämpft, gebaut so ein Skript, wenn Sie es verwenden möchten: https://github.com/andimiya/deploy-jekyll-gh-pages