Skip to main content

Ausführliche Informationen zu GitHub Codespaces

Grundlegendes zur Funktionsweise von GitHub Codespaces

GitHub Codespaces ist eine sofort einsetzbare, cloudbasierte Entwicklungsumgebung, die einen Container nutzt, um dir gängige Sprachen, Tools und Dienstprogramme für die Entwicklung zur Verfügung zu stellen. GitHub Codespaces ist außerdem konfigurierbar, sodass du eine angepasste Entwicklungsumgebung für dein Projekt erstellen kannst. Durch die Konfiguration einer benutzerdefinierten Entwicklungsumgebung für dein Projekt kannst du über eine wiederholbare Codespacekonfiguration für alle Benutzer deines Projekts verfügen.

Erstellen des Codespace

Es gibt eine Reihe von Einstiegspunkten zum Erstellen eines Codespace.

  • Eine GitHub-Vorlage oder ein beliebiges Vorlagenrepository auf GitHub, um ein neues Projekt zu starten
  • Ein Branch in deinem Repository für die Arbeit an neuen Features
  • Ein offener Pull Request zum Erkunden laufender Arbeiten
  • Ein Commit im Verlauf eines Repositorys, um einen Fehler zu einem bestimmten Zeitpunkt zu untersuchen

Sie können einen Codespace auf GitHub, in Visual Studio Code oder mit der GitHub CLI erstellen.

Dein Codespace kann kurzlebig sein, wenn du etwas testen musst, oder du kannst zum selben Codespace zurückkehren, um an zeitintensiven Featureaufgaben zu arbeiten.

Weitere Informationen findest du unter Erstellen eines Codespaces für ein Repository, Erstellen eines Codespaces aus einer Vorlage und Öffnen eines vorhandenen Codespaces.

Hinweis: Du kannst mehr als einen Codespace pro Repository oder sogar pro Branch erstellen. Es gibt jedoch Grenzwerte für die Anzahl der Codespaces, die du erstellen kannst, sowie für die Anzahl der Codespaces, die du gleichzeitig ausführen kannst. Wenn du die maximale Anzahl von Codespaces erreichst und versuchst, andere zu erstellen, wird eine Meldung angezeigt, dass du einen vorhandenen Codespace entfernen musst, bevor du einen neuen erstellen kannst.

Der Codespace-Erstellungsprozess

Wenn du einen Codespace erstellst, werden verschiedene Schritte im Hintergrund ausgeführt, bevor der Codespace zur Verfügung steht.

Schritt 1: VM und Speicher werden deinem Codespace zugewiesen

Wenn Sie einen Codespace erstellen, wird ein virtueller Computer (VM) mithilfe der stabilen Version oder beta des VM-Hostimages erstellt. Weitere Informationen findest du unter Auswählen des stabilen Hostimages oder Betahostimages. Das Hostimage definiert die Version von Linux, die für die VM verwendet wird. Der virtuelle Computer ist dediziert als auch privat für Sie. Wenn du eine dedizierte VM hast, wird sichergestellt, dass du über die gesamten Ressourcen dieses Computers verfügst, der dir zur Verfügung steht. Bei Bedarf hast du auch vollständigen Root-Zugriff auf deinen Container.

Ein flacher Klon Ihres Repositorys wird anschließend erstellt oder ein flacher Klon des Vorlagenrepositorys, wenn Sie einen Codespace mithilfe einer Vorlage erstellen. Dies wird in das /workspaces-Verzeichnis der VM geklont und später in den Entwicklungscontainer eingebunden. Weitere Informationen findest du weiter unten unter Informationen zur Verzeichnisstruktur von Codespaces.

Schritt 2: Entwicklungscontainer wird erstellt

GitHub Codespaces verwendet einen Docker-Container als Entwicklungsumgebung. Dieser Container wird basierend auf Konfigurationen erstellt, die du in einer Datei vom Typ devcontainer.json und optional in einem Dockerfile definieren kannst. Wenn du einen Codespace mithilfe der leeren Vorlage von GitHub oder auf der Grundlage eines Repositorys ohne Datei vom Typ devcontainer.json erstellst, verwendet GitHub Codespaces ein Standardimage, das über zahlreiche Sprachen und Runtimes verfügt. Weitere Informationen findest du unter Einführung in Entwicklungscontainer. Ausführliche Informationen zum Inhalt des Standardimage für Entwicklungscontainer findest du im Repository devcontainers/images.

Hinweis: Wenn du Git-Hooks in deinem Codespace verwenden und alles im Git-Vorlagenverzeichnis auf deinen Codespace anwenden möchtest, musst du im Schritt 4 nach der Erstellung des Containers Hooks einrichten.

Da dein Repository vor der Erstellung des Containers auf der Host-VM geklont wird, gelten alle Elemente im Git-Vorlagenverzeichnis nicht in deinem Codespace, es sei denn, du richtest die devcontainer.json-Konfigurationsdatei mit dem postCreateCommand in Schritt 4 ein. Weitere Informationen findest du unter Schritt 4: Einrichtung nach der Erstellung.

Schritt 3: Herstellen einer Verbindung mit dem Codespace

Wenn dein Container erstellt wurde und alle anderen Initialisierungen ausgeführt wurden, wirst du mit deinem Codespace verbunden. Für die Verbindungsherstellung kann Folgendes verwendet werden:

Schritt 4: Einrichtung nach der Erstellung

Sobald du mit deinem Codespace verbunden bist, setzt das automatisierte Setup möglicherweise die Erstellung basierend auf der Konfiguration fort, die in der Datei devcontainer.json angegeben ist. Möglicherweise wird die Ausführung von postCreateCommand und postAttachCommand angezeigt.

Wenn du Git-Hooks in deinem Codespace verwenden möchtest, richte Hooks mithilfe der devcontainer.json-Lebenszyklusskripts ein (z. B. postCreateCommand). Informationen zu Lebenszyklusskripts findest du in der Spezifikation von Entwicklungscontainern auf der Website zu Entwicklungscontainern.

Wenn du über ein öffentliches Dotfiles-Repository für GitHub Codespaces verfügst, kannst du es für die Verwendung mit neuen Codespaces aktivieren. Wenn es aktiviert ist, werden deine Dotfiles in den Container geklont, und das Installationsskript wird aufgerufen. Weitere Informationen findest du unter Personalisieren von GitHub Codespaces für dein Konto.

Wenn du den Codespace auf der Grundlage eines Repositorys erstellt hast, wird letztlich der gesamte Verlauf des Repositorys mit einem vollständigen Klon kopiert. Wenn du den Codespace mithilfe einer Vorlage erstellt hast, bleibt nicht der gesamte Verlauf des Vorlagenrepositorys erhalten. Stattdessen beginnst du mit einem anfänglichen Commit für die Inhalte des Vorlagenrepositorys (es sei denn, du verwendest die leere Vorlage).

Während der Einrichtung nach der Erstellung kannst du weiterhin das integrierte Terminal verwenden und deine Dateien bearbeiten, aber achte darauf, Racebedingungen zwischen deiner Arbeit und den ausgeführten Befehlen zu vermeiden.

Codespaces-Lebenszyklus

Speichern von Dateien im Codespace

Speichere Änderungen an Dateien auf normale Weise – je nachdem, welchen Editor du verwendest.

Wenn du an Codespaces in Visual Studio Code arbeitest, kannst du automatisches Speichern aktivieren, um sicherzustellen, dass deine Änderungen immer gespeichert werden.

Schließen oder Beenden des Codespace

Dein Codespace wird weiter ausgeführt, während du ihn verwendest. Nach einem gewissen Inaktivitätszeitraum tritt jedoch ein Timeout auf. Dateiänderungen über den Editor und Terminalausgaben zählen als Aktivität, sodass für den Codespace kein Timeout auftritt, wenn die Terminalausgabe fortgesetzt wird. Der Timeoutzeitraum bei Inaktivität beträgt standardmäßig 30 Minuten. Du kannst deine eigene Timeouteinstellung für von dir erstellte Codespaces definieren. Diese kann jedoch durch eine Timeoutrichtlinie der Organisation außer Kraft gesetzt werden. Weitere Informationen findest du unter Festlegen des Timeoutzeitraums für GitHub Codespaces.

Wenn für einen Codespace ein Timeout auftritt, wird er beendet. Du kannst ihn allerdings über den Browsertab (bei Verwendung des Codespace im Browser), innerhalb von VS Code oder über die Liste der Codespaces unter https://github.com/codespaces neu starten.

Zum Beenden deines Codespace stehen folgende Möglichkeiten zur Verfügung:

  • Im Browser: Klicke unter https://github.com/codespaces in der Liste mit den Codespaces rechts neben dem Codespace, den du beenden möchtest, auf die Auslassungspunkte ( ... ), und klicke anschließend auf Codespace beenden.
  • In VS Code: Öffnen Sie die Visual Studio Code Command Palette – beispielsweise durch Drücken von Strg+Umschalt-+P (Windows/Linux) oder Umschalt-+Befehlstaste+P (Mac) –, geben Sie Codespaces: stop ein, und drücken Sie anschließend die Eingabetaste. Weitere Informationen findest du unter Verwenden der Visual Studio Code-Befehlspalette in GitHub Codespaces.
  • Im JetBrains-Client: Klicke im oberen Bereich des GitHub Codespaces-Toolfensters auf die Schaltfläche zum Beenden. Weitere Informationen findest du auf der Registerkarte „JetBrains-IDEs“ unter Beenden und Starten eines Codespaces.
  • In einem Terminalfenster: Verwende den GitHub CLI-Befehl gh codespace stop. Weitere Informationen findest du unter GitHub Codespaces mit GitHub CLI verwenden.

Wenn du den Codespace schließt, ohne den Beendigungsbefehl auszuführen (beispielsweise durch Schließen des Browsertabs), oder den Codespace ohne Interaktion verlässt, werden der Codespace und seine laufenden Prozesse für die Dauer des Timeoutzeitraums bei Inaktivität fortgesetzt.

Wenn du den Codespace schließt oder beendest, werden alle ausgecheckten Änderungen beibehalten, bis du noch mal eine Verbindung mit dem Codespace herstellst.

Ausführen deiner Anwendung

Portweiterleitung bietet Zugriff auf TCP-Ports, die innerhalb deines Codespace ausgeführt werden. Wenn du beispielsweise eine Webanwendung auf Port 4000 in deinem Codespace ausführst, kannst du diesen Port automatisch weiterleiten, um die Anwendung über deinen Browser zugänglich zu machen.

Die Portweiterleitung bestimmt, auf welche Ports du über den Remotecomputer zugreifen kannst. Auch wenn du keinen Port weiterleitest, ist dieser Port weiterhin für andere Prozesse zugänglich, die innerhalb des Codespace selbst ausgeführt werden.

Abbildung, die die Verbindungen über das Internet zwischen einem Code-Editor oder Browser auf deinem Gerät und einem Codespace in der Cloud zeigt.

Wenn eine Anwendung, die innerhalb von GitHub Codespaces ausgeführt wird, einen Port an die Konsole ausgibt, erkennt GitHub Codespaces das Localhost-URL-Muster und leitet den Port automatisch weiter. Du kannst auf die URL im Terminal oder auf den Link in der Popupbenachrichtigung klicken, die rechts unten in VS Code eingeblendet wird, um den Port in einem Browser zu öffnen. Standardmäßig leitet GitHub Codespaces den Port mit HTTP weiter. Weitere Informationen zur Portweiterleitung findest du unter Weiterleiten von Ports in deinem Codespace.

Während Ports automatisch weitergeleitet werden können, sind sie für das Internet nicht öffentlich zugänglich. Standardmäßig sind alle Ports privat, aber du kannst einen Port manuell für deine Organisation oder die Öffentlichkeit verfügbar machen und dann den Zugriff über eine URL freigeben. Weitere Informationen findest du unter Weiterleiten von Ports in deinem Codespace.

Die Ausführung deiner Anwendung, wenn du zum ersten Mal in deinen Codespace gelangst, kann zu einer schnellen inneren Entwicklungsschleife führen. Während der Bearbeitung werden deine Änderungen automatisch gespeichert und sind auf deinem weitergeleiteten Port verfügbar. Zum Anzeigen von Änderungen wechselst du zurück zur ausgeführten Anwendungsregisterkarte in deinem Browser und aktualisierst sie.

Commit und Push deiner Änderungen

Git ist standardmäßig in deinem Codespace installiert, sodass du dich auf deinen vorhandenen Git-Workflow verlassen kannst. Du kannst mit Git in deinem Codespace entweder über das Terminal oder über die Quellcodeverwaltungsfeatures von VS Code oder JetBrains arbeiten.

Bei Verwendung eines bereits vorhandenen Repositorys kannst du einen Codespace auf der Grundlage eines beliebigen Branchs, Commits oder Pull Requests in dem Repository erstellen. Alternativ kannst du innerhalb deines aktiven Codespace zu einem neuen oder bereits vorhandenen Branch wechseln. Da GitHub Codespaces als kurzlebig konzipiert ist, kannst du es als isolierte Umgebung verwenden, um zu experimentieren, die Pull Requests von Teamkolleg*innen zu überprüfen oder Mergekonflikte zu beheben.

Wenn du nur Lesezugriff auf ein Repository hast, kannst du einen Codespace für das Repository erstellen, solange du es forken kannst. Wenn du einen Commit im Codespace durchführst oder einen neuen Branch pushst, erstellt GitHub Codespaces entweder automatisch einen Fork des Repositorys für dich oder verknüpft den Codespace mit einem vorhandenen Fork, wenn du bereits einen für das Upstreamrepository hast.

Wenn du in einem Codespace arbeitest, der mithilfe einer Vorlage erstellt wurde, ist Git standardmäßig installiert. Du musst deinen Codespace jedoch in einem Remoterepository veröffentlichen, um deine Arbeit zu speichern und mit anderen teilen zu können. Wenn du die leere Vorlage von GitHub als Ausgangspunkt verwendest, musst du zunächst deinen Arbeitsbereich als Git-Repository initialisieren (beispielsweise durch Eingeben von git init), um die Quellcodeverwaltung innerhalb des Codespace verwenden zu können.

Weitere Informationen findest du unter Verwenden der Quellcodeverwaltung in deinem Codespace.

Hinweis: Commits aus deinem Codespace werden dem Namen und der öffentlichen E-Mail zugewiesen, die unter https://github.com/settings/profile konfiguriert sind. Ein Token für das Repository, das in der Umgebung als GITHUB_TOKEN enthalten ist, und deine GitHub-Anmeldeinformationen werden zur Authentifizierung verwendet.

Personalisieren deines Codespace mit Erweiterungen oder Plug-Ins

Du kannst Plug-Ins und Erweiterungen innerhalb eines Codespace hinzufügen, um die Verwendung von JetBrains bzw. VS Code zu personalisieren.

VS Code-Erweiterungen

Wenn du deine Codespaces in der VS Code-Desktopanwendung oder im Webclient bearbeitest, kannst du jede benötigte Erweiterung aus dem Visual Studio Code Marketplace hinzufügen. Informationen zur Ausführung von Erweiterungen in GitHub Codespaces, findest du in der Dokumentation zu VS Code unter Unterstützen von Remoteentwicklung und GitHub Codespaces.

Wenn du bereits VS Code nutzt, kannst du die Einstellungssynchronisierung verwenden, um Erweiterungen, Einstellungen, Designs und Tastenkombinationen zwischen deiner lokalen Instanz und von dir erstellten Codespaces automatisch zu synchronisieren.

JetBrains-Plug-Ins

Wenn du deine Codespaces in einer JetBrains-IDE bearbeitest, kannst du Plug-Ins aus dem JetBrains Marketplace hinzufügen.

  1. Klicke auf JetBrains-Client und anschließend auf Einstellungen.

  2. Klicke im Dialogfeld „Einstellungen“ entweder auf Plug-Ins auf dem Host, um ein Plug-In in der umfassenden, remote ausgeführten JetBrains-IDE zu installieren, oder auf Plug-Ins, um ein Plug-In auf dem lokalen Client zu installieren (beispielsweise zum Ändern des Designs der Benutzeroberfläche).

  3. Klicke auf die Registerkarte Marketplace.

    Screenshot des Dialogfelds „Einstellungen“ mit angezeigter Registerkarte „Marketplace“. Die Option „Plug-Ins auf dem Host“ ist dunkelorange umrandet.

  4. Klicke neben dem benötigten Plug-In auf Installieren.

Informationen zur Verzeichnisstruktur von Codespaces

Wenn du einen Codespace erstellst, wird dein Repository in das /workspaces-Verzeichnis deines Codespace geklont. Es handelt sich um ein persistentes Verzeichnis, das in den Container eingebunden wird. Alle Änderungen, die du in diesem Verzeichnis vornimmst, einschließlich dem Bearbeiten, Hinzufügen oder Löschen von Dateien, werden beibehalten, wenn du den Codespace beendest und startest oder wenn du den Container im Codespace neu erstellst.

Außerhalb des /workspaces-Verzeichnisses hat Ihr Codespace eine Linux-Verzeichnisstruktur, die abhängig vom Dev-Containerimage variiert, das zum Erstellen Ihres Codespace verwendet wird. Du kannst Dateien hinzufügen oder Änderungen an Dateien außerhalb des /workspaces-Verzeichnisses vornehmen. Beispielsweise kannst du neue Programme installieren oder deine Shellkonfiguration in einer Datei wie ~/.bashrc einrichten. Als Nicht-Root-Benutzer*in hast du möglicherweise nicht automatisch Schreibzugriff auf bestimmte Verzeichnisse, aber die meisten Images lassen den Root-Zugriff auf diese Verzeichnisse mit dem sudo-Befehl zu.

Außerhalb von /workspaces sind die Verzeichnisse in einem Codespace mit Ausnahme des /tmp-Verzeichnisses an den Lebenszyklus des Containers gebunden. Das bedeutet, dass alle Änderungen, die Sie vornehmen, beibehalten werden, wenn Sie den Codespace beenden und starten, aber nicht, wenn Sie den Container neu erstellen. Weitere Informationen zum Verzeichnis /tmp findest du unter Beibehalten von Umgebungsvariablen und temporären Dateien.

Durch das Löschen der Verzeichnisse außerhalb von /workspaces stellst du sicher, dass der neu erstellte Container denselben Zustand wie in einem neu erstellten Codespace aufweist. Wenn du einen Container neu erstellst, um Konfigurationsänderungen auf den Codespace anzuwenden, in dem du arbeitest, kannst du sicher sein, dass alle Konfigurationsänderungen, die du vorgenommen hast, für Benutzer*innen, die neue Codespaces mit derselben Konfiguration erstellen, gleich funktionieren. Weitere Informationen findest du unter Einführung in Entwicklungscontainer.

Wenn du Änderungen an deinem Codespace vornehmen möchtest, die bei Neuerstellungen und in verschiedenen Codespaces robuster sind, hast du dazu mehrere Möglichkeiten.

  • Zum Installieren von Programmen und Tools in allen Codespaces, die aus einem Repository erstellt werden, kannst du in der Konfiguration deines Entwicklungscontainers Lebenszyklusbefehle verwenden (z. B. postCreateCommand), um benutzerdefinierte Installationsbefehle auszuführen, oder du kannst aus vordefinierten Installationsbefehlen auswählen, die als „Features“ bezeichnet werden. Weitere Informationen findest du in der Entwicklungscontainerspezifikation auf der Website für Entwicklungscontainer und unter Hinzufügen von Features zu einer Datei vom Typ „devcontainer.json“.
  • Du kannst GitHub Codespaces mit einem Dotfiles-Repository verknüpfen, um Tools zu installieren oder dein Setup in jedem von dir erstellten Codespace anzupassen, z. B. das Konfigurieren deines bash-Profils. Das Dotfiles-Repository wird auch in das persistente Verzeichnis /workspaces geklont. Weitere Informationen findest du unter Personalisieren von GitHub Codespaces für dein Konto.
  • Wenn du bestimmte Dateien bei einer Neuerstellung beibehalten möchtest, kannst du die Datei devcontainer.json verwenden, um einen Symlink zwischen den Dateien und einem persistenten Verzeichnis in /workspaces zu erstellen. Weitere Informationen findest du unter Neuerstellen des Containers in einem Codespace.

Weiterführende Themen