Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).
gh-pages
Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).
gh-pages ist ein kleines npm-Werkzeug, das einen fertig gebauten Ordner (z. B. dist) mit einem einzigen Befehl in den Branch gh-pages eines Git-Repositorys schiebt. GitHub Pages veröffentlicht diesen Branch dann als Webseite.
Vorbemerkungen
- Kein apt-Paket: gh-pages gibt es nicht in den Ubuntu-Paketquellen. Es wird pro Projekt mit
npminstalliert. Aus den Ubuntu-Paketquellen kommen nur Git, Node.js und npm. - Version: Diese Anleitung verwendet gh-pages 6 (derzeit 6.3). Es läuft mit jeder Node.js-Version ab 10, das Node.js 22 aus Ubuntu 26.04 passt also.
- Voraussetzung: Du hast ein Repository auf GitHub, und
git pushfunktioniert von deinem Rechner aus (per SSH-Schlüssel oder Zugangstoken). gh-pages nutzt genau diesen Zugang. - Was gh-pages nicht tut: Es baut die Webseite nicht. Den Ordner mit den fertigen Dateien erzeugt vorher dein Werkzeug, z. B. VitePress, Docusaurus oder mdBook.
Installation
1. Paketlisten aktualisieren
Damit apt die aktuellen Versionen von Git, Node.js und npm kennt.
sudo apt update
2. Git, Node.js und npm installieren
Git überträgt die Dateien zu GitHub, Node.js führt gh-pages aus und npm lädt es herunter. Ist schon alles vorhanden, meldet apt das nur.
sudo apt install git nodejs npm
Prüfen: Beide Befehle geben eine Versionsnummer aus.
node --version
git --version
Beispielprojekt
Die folgenden Schritte zeigen gh-pages an einem kleinen Projekt. Hast du schon ein Projekt, beginne in dessen Ordner bei Schritt 6.
3. Repository von GitHub holen
Lädt ein bestehendes GitHub-Repository auf deinen Rechner. Ersetze BENUTZER und meine-seite durch deinen GitHub-Namen und den Namen des Repositorys. Das Repository sollte schon mindestens einen Commit haben (z. B. eine README.md, die GitHub beim Anlegen erzeugt).
git clone git@github.com:BENUTZER/meine-seite.git ~/meine-seite
4. In den Projektordner wechseln
Alle weiteren Befehle beziehen sich auf diesen Ordner.
cd ~/meine-seite
Prüfen: Unter origin steht die Adresse deines GitHub-Repositorys. An diese Adresse schickt gh-pages später die Dateien.
git remote -v
5. package.json anlegen
npm braucht die Datei package.json, um festzuhalten, welche Pakete das Projekt verwendet. -y übernimmt alle Vorschläge, ohne nachzufragen.
npm init -y
6. gh-pages installieren
Lädt gh-pages in den Ordner node_modules und trägt es in package.json ein. -D kennzeichnet es als Entwicklungswerkzeug, das nicht zur Webseite selbst gehört.
npm add -D gh-pages
Prüfen: Die Ausgabe zeigt die installierte Version, z. B. gh-pages@6.3.0.
npm ls gh-pages
7. node_modules von Git ausschließen
Der Ordner node_modules lässt sich jederzeit mit npm install wiederherstellen und gehört nicht ins Repository. gh-pages legt dort außerdem seinen Zwischenspeicher ab.
nano .gitignore
Füge diese Zeile ein (im Terminal mit Strg+Umschalt+V), speichere mit Strg+O und Enter und beende nano mit Strg+X:
node_modules
8. Ordner für die fertige Webseite anlegen
In einem echten Projekt erzeugt dein Werkzeug diesen Ordner beim Bauen. Für das Beispiel legst du ihn selbst an.
mkdir dist
9. Eine Testseite anlegen
Eine einfache HTML-Seite, an der du erkennst, ob die Veröffentlichung geklappt hat.
nano dist/index.html
Füge diesen Inhalt ein (im Terminal mit Strg+Umschalt+V), speichere mit Strg+O und Enter und beende nano mit Strg+X:
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>Meine Seite</title>
</head>
<body>
<h1>Hallo von GitHub Pages</h1>
</body>
</html>
10. Kurzbefehl in package.json eintragen
Ein Eintrag unter scripts erspart dir, die Optionen jedes Mal abzutippen. Danach genügt npm run deploy.
nano package.json
Suche mit Strg+W nach "test" und bestätige mit Enter. Lösche diese Zeile mit Strg+K und füge an ihrer Stelle diese Zeile ein. Speichere mit Strg+O und Enter und beende nano mit Strg+X:
"deploy": "gh-pages -d dist --nojekyll"
Die Optionen bedeuten:
-d dist– dieser Ordner wird veröffentlicht--nojekyll– legt eine leere Datei.nojekyllan. Sonst bereitet GitHub die Seite mit Jekyll auf und lässt dabei Ordner weg, die mit_beginnen (das betrifft z. B. VitePress und Sphinx).
Der Abschnitt scripts sieht danach so aus:
"scripts": {
"deploy": "gh-pages -d dist --nojekyll"
},
11. Projektdateien committen
Sichert package.json, package-lock.json und .gitignore im Branch main. Der Ordner dist wird hier mit übernommen, das ist für das Beispiel in Ordnung.
git add .
git commit -m "gh-pages einrichten"
git push
12. Webseite veröffentlichen
gh-pages kopiert den Inhalt von dist in den Branch gh-pages, erstellt dort einen Commit und schiebt ihn zu GitHub. Den Branch legt es beim ersten Mal selbst an.
npm run deploy
Prüfen: Die Ausgabe endet mit Published. Auf GitHub gibt es jetzt den Branch gh-pages mit den Dateien index.html und .nojekyll.
git ls-remote origin gh-pages
13. GitHub Pages einschalten
Einmalig im Browser: GitHub muss wissen, aus welchem Branch es die Webseite liefern soll.
- Öffne dein Repository auf GitHub.
- Klicke auf Settings und links auf Pages.
- Wähle unter Source den Eintrag Deploy from a branch.
- Wähle unter Branch den Eintrag
gh-pagesund den Ordner/ (root)und klicke auf Save.
Prüfen: Nach ein bis zwei Minuten zeigt https://BENUTZER.github.io/meine-seite/ die Überschrift „Hallo von GitHub Pages“.
Mit anderen Werkzeugen verwenden
Bei einem echten Projekt ersetzt du in Schritt 10 nur dist durch den Ordner, in den dein Werkzeug baut, und baust vor npm run deploy die Seite neu:
| Werkzeug | Ordner für -d |
|---|---|
| mdBook | book |
| VitePress | .vitepress/dist |
| Docusaurus | build |
| Astro Starlight | dist |
Weil die Seite unter /meine-seite/ liegt und nicht direkt unter der Domain, muss dein Werkzeug das wissen. In VitePress trägst du dazu z. B. base: '/meine-seite/' in .vitepress/config.mts ein, in Docusaurus baseUrl. Ohne diese Angabe fehlen auf der veröffentlichten Seite Stile und Bilder.
Beispiel: mdBook unter eigener Domain veröffentlichen
So wird dieses Buch veröffentlicht: mdBook baut die Seiten in den Ordner book, gh-pages schiebt sie in den Branch gh-pages, und GitHub liefert sie unter der Subdomain installieren.wissen-ahrensburg.de aus. Die Schritte setzen voraus, dass gh-pages wie oben im Projekt installiert ist und origin auf das GitHub-Repository zeigt.
1. Kurzbefehl in package.json eintragen
Der Kurzbefehl heißt hier ver (für „veröffentlichen“) und bündelt alle Optionen.
nano package.json
Suche mit Strg+W nach "scripts" und bestätige mit Enter. Füge in der Zeile darunter diese Zeile ein (im Terminal mit Strg+Umschalt+V). Steht danach noch ein weiterer Eintrag wie "test", muss die Zeile mit einem Komma enden. Speichere mit Strg+O und Enter und beende nano mit Strg+X:
"ver": "gh-pages -d book --nojekyll --cname installieren.wissen-ahrensburg.de --no-history"
Die Optionen bedeuten:
-d book– veröffentlicht den Ordnerbook, in denmdbook buildschreibt--nojekyll– verhindert, dass GitHub die Seite mit Jekyll aufbereitet (siehe Schritt 10 oben)--cname installieren.wissen-ahrensburg.de– legt die DateiCNAMEmit dieser Domain in den Branch. Daran erkennt GitHub, unter welcher Domain es die Seite ausliefern soll. Ersetze sie durch deine eigene (Sub-)Domain.--no-history– ersetzt den Branchgh-pagesbei jeder Veröffentlichung durch einen einzigen neuen Commit, statt einen weiteren anzuhängen. Das Repository wächst dadurch nicht mit jeder Veröffentlichung. Ältere Stände der Webseite sind danach nicht mehr im Branchgh-pagesgespeichert; die Quelltexte inmainbleiben unberührt.
Der Abschnitt scripts sieht danach z. B. so aus:
"scripts": {
"ver": "gh-pages -d book --nojekyll --cname installieren.wissen-ahrensburg.de --no-history"
},
Prüfen: npm listet den Kurzbefehl ver auf.
npm run
2. Ordner book von Git ausschließen
book wird bei jedem Bauen neu erzeugt und gehört nicht in den Branch main. Öffne dazu .gitignore:
nano .gitignore
Füge diese Zeile ein, falls sie noch fehlt, speichere mit Strg+O und Enter und beende nano mit Strg+X:
book
3. DNS-Eintrag für die Subdomain setzen
Einmalig beim Anbieter deiner Domain: Die Subdomain muss auf GitHub Pages zeigen. Lege dazu einen CNAME-Eintrag an:
| Name | Typ | Ziel |
|---|---|---|
installieren | CNAME | thorstenkloehn.github.io |
Ersetze thorstenkloehn durch deinen GitHub-Namen. Der Eintrag verweist nur auf deine GitHub-Adresse, nicht auf das Repository. Welches Repository gemeint ist, erkennt GitHub an der Datei CNAME aus Schritt 1.
Prüfen: Nach einiger Zeit (je nach Anbieter Minuten bis Stunden) nennt dieser Befehl zuerst thorstenkloehn.github.io. und danach die Adressen von GitHub, die mit 185.199. beginnen.
dig +short installieren.wissen-ahrensburg.de
Fehlt dig, installierst du es mit sudo apt install bind9-dnsutils.
Hauptdomain statt Subdomain: Soll die Seite direkt unter
wissen-ahrensburg.deerscheinen, ist ein CNAME-Eintrag bei vielen Anbietern nicht erlaubt. Dann legst du stattdessen vier A-Einträge mit den Adressen185.199.108.153,185.199.109.153,185.199.110.153und185.199.111.153an und gibst bei--cnamedie Hauptdomain an.
4. Buch bauen
Erzeugt den Ordner book mit der aktuellen Fassung aller Anleitungen. Ohne diesen Schritt würde gh-pages einen veralteten oder gar keinen Stand veröffentlichen.
mdbook build
Prüfen: Im Ordner book liegt eine index.html.
ls book/index.html
5. Buch veröffentlichen
Führt den Kurzbefehl aus Schritt 1 aus.
npm run ver
Prüfen: Die Ausgabe endet mit Published. Der Branch gh-pages enthält jetzt genau einen Commit:
git fetch origin gh-pages
git log --oneline origin/gh-pages
6. Eigene Domain in GitHub bestätigen
Einmalig im Browser: Öffne im Repository Settings → Pages. Stelle wie in Schritt 13 oben den Branch gh-pages ein. Unter Custom domain steht nun installieren.wissen-ahrensburg.de (aus der Datei CNAME). Setze, sobald GitHub es anbietet, den Haken bei Enforce HTTPS, damit die Seite verschlüsselt ausgeliefert wird.
Prüfen: https://installieren.wissen-ahrensburg.de/ zeigt das Buch.
Bei jeder späteren Änderung genügen die Schritte 4 und 5. Weil die Seite direkt unter der Subdomain liegt und nicht unter /meine-seite/, ist in mdBook keine zusätzliche Pfadangabe nötig.
Aktualisieren
gh-pages wird pro Projekt aktualisiert. Im Projektordner holt dieser Befehl die neueste Version innerhalb von gh-pages 6:
npm update gh-pages
Prüfen:
npm ls gh-pages
Fehlerbehebung
Meldet gh-pages Remote url mismatch, hat sich die Adresse von origin geändert, seit der Zwischenspeicher angelegt wurde. Dieser Befehl leert den Zwischenspeicher, danach funktioniert npm run deploy wieder:
npx gh-pages-clean
Deinstallieren
1. gh-pages aus dem Projekt entfernen
Löscht gh-pages aus node_modules und aus package.json.
npm uninstall gh-pages
Prüfen: Die Ausgabe zeigt (empty).
npm ls gh-pages
2. Kurzbefehl entfernen
Die Einträge deploy bzw. ver funktionieren ohne gh-pages nicht mehr.
nano package.json
Suche mit Strg+W nach "deploy" (bzw. "ver"), lösche die Zeile mit Strg+K, speichere mit Strg+O und Enter und beende nano mit Strg+X.
3. Optional: Veröffentlichte Webseite löschen
Entfernt den Branch gh-pages auf GitHub. Achtung: Die Webseite ist danach nicht mehr erreichbar.
git push origin --delete gh-pages
4. Optional: Node.js und npm entfernen
Nur ausführen, wenn kein anderes Programm Node.js braucht (z. B. VitePress oder Docusaurus).
sudo apt purge nodejs npm
sudo apt autoremove
Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).
Open Knowledge (Freies Wissen): Alle Texte stehen unter der freien Lizenz Creative Commons Namensnennung – Weitergabe unter gleichen Bedingungen 4.0 International (CC BY-SA 4.0) und können frei gelesen, geteilt und weiterverarbeitet werden.