Nahaufnahme einer Person, die mit einem Tablet auf einer Decke sitzt.

TechWiese Blog

Visual Studio Code (7): Git als Quellcodeverwaltung einsetzen

29. Januar 2016

Portrait Bild von Tobias Kahlert

Tobias Kahlert

Dieser Blogbeitrag ist ein Repost und stammt im Original aus dem Know-how-Bereich von TechWiese, dessen Artikel in diesem Blog aufgegangen sind.

Git ist ein großartiges Tool, um Quellcode zu verwalten. Nach jeder Änderung kann der momentane Zustand des Projektes gespeichert werden. Selbst nach Wochen lassen sich auf diese Weise Änderungen nachverfolgen. V.a. eignet sich Git für Projekte mit mehreren Autoren. Jeder Entwickler kann seine Ideen unabhängig in das Projekt einbauen. Sind diese soweit implementiert, kann alles wieder in das Projekt einfügt werden. Visual Studio Code (VS Code) integriert Git standardmäßig und bietet einige seiner Funktionen direkt aus dem Editor heraus an. Das Motto von VS Code bezüglich Git ist aber immer noch: „Die Konsole ist dein Freund“. Den Anspruch eine komplette Oberfläche zu sein, will VS Code gar nicht vertreten, sondern stellt nur die am gebräuchlichsten Funktionen zur Verfügung.

Git als Ganzes zu erklären, würde den Rahmen dieses Artikels sprengen. Ich möchte hier nur auf das Anlegen eines Projektes und die Funktionen von Visual Studio Code bezüglich Git eingehen. Für mehr Informationen zu Git empfiehlt sich das Buch Pro Git, das online unter https://git-scm.com/book/en/v2 kostenlos verfügbar ist.

Visual Studio Code greift übrigens auf eine lokale Git-Installation zurück und liefert diese nicht selbst mit. Git kann von http://git-scm.com/download heruntergeladen und installiert werden.

Git initialisieren

Um einen Ordner mit Git zu verwalten, muss nur der Befehl git init im entsprechenden Ordner in der Konsole ausgeführt werden. Der Ordner befindet sich jetzt unter Versions-Verwaltung und wird als Repository bezeichnet. Im Wurzelverzeichnis des Repositorys wird ein neuer versteckter Ordner namens „.git“ erstellt. Git verwendet diesen, um Repositorys zu identifizieren und dort Daten abzulegen.

Änderungen committen

Nach dem Öffnen eines solchen Repository-Ordners, werden Informationen zum Zustand des Repositorys angezeigt. Git verwaltet alle Dateien im Repository, die nicht in die „gitignore“-Datei eingetragen sind (siehe mehr Informationen zur „.gitignore“-Datei). Dateien können sich in einem von drei Zuständen befinden: modified, staged und committed. In der Git-Ansicht werden diese Zustände wie folgt widergespiegelt:

  • , Neue Dateien im Arbeitsverzeichnis werden von Git als untracked gesehen, denn es existiert kein gespeichertes Gegenstück. Solche Dateien können hinzugefügt oder per „gitignore“ ignoriert werden.
  • , ,Dateien im Arbeitsverzeichnis, die bereits von Git verfolgt werden, werden im Laufe der Entwicklung entweder verändert oder gelöscht. VS Code zeigt geänderte und gelöschte (modified) Dateien unter CHANGES an.
  • , , ,Bevor neue oder geänderte Dateien in einem neuen Commit gespeichert werden, müssen sie zunächst in die Staging Area aufgenommen werden. In VS Code passiert das mit einem Klick auf das Plus-Icon, das auf der rechten Seite in der Git-Ansicht eingeblendet wird, wenn mit der Maus über einen Dateieintrag gefahren wird.
  • Nach Eingabe einer Nachricht, die alle Änderungen des neuen Commits beschreibt, kann dieser mit einem Klick auf den oberen rechten Hacken () erstellt werden. Dabei werden alle Dateien, die sich in der Staging Area befinden, zusammengefasst und von Git archiviert. Dateien die sich nicht verändert haben (committed), werden von Visual Studio Code nicht in der Git-Ansicht angezeigt.

Für das folgende Beispiel habe ich drei neue Dateien erzeugt. Im ersten Commit möchte ich die Dateien „test 1.md“ und „test 2.md“ committen. „test 3.md“ soll zunächst unberührt bleiben. Ich stage die beiden Dateien und Visual Studio Code zeigt sie mit einem grünen Symbol unter STAGED CHANGES an. Nach der Eingabe einer kleinen Nachricht kann ich nun den Commit erzeugen. „test 3.md“ verändert sich nicht und wird auch nicht zur Git-Verwaltung hinzugefügt.

Im nächsten Schritt lösche ich „test 1.md“ und verändere „test 2.md“: Im ersten Commit enthielt sie den Text „git test“. Nun füge ich noch ein „mit mehr text“ dahinter ein. In der Git-Ansicht zeigt mir VS Code nun einen Vergleich der momentanen „test 2.md“ mit der vorher committeten Version an. Löschungen werden rot und Neuerungen grün markiert.

Arbeiten mit Branches

Die Geschichte des Repositorys (also die Reihe der Commits) ist beim Arbeiten mit Git nicht nur linear, sondern kann sich auch verzweigen. Auf diese Weise können neue Features in einem Softwareprojekt beispielsweise zunächst unabhängig von den Hauptaufgaben entwickelt und erst zu einem späteren Zeitpunkt wieder in den Hauptentwicklungszweig zurückgeführt werden. Das passiert in so genannten Branches. Der Haupt-Branch heißt fast immer „master“ und sollte den aktuellen Entwicklungsstand des Projektes enthalten. Neue Commits können nun in neuen Branches abgelegt und unabhängig von „master“ entwickelt werden. Zu einem späteren Zeitpunkt kann der neue Branch wieder in „master“ zurückgeführt werden. Das heißt, dass alle Änderungen aus dem neuen Branch übernommen werden, auch Merging genannt. Mehr Informationen über Branching und Merging sind unter https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell zu finden.

Branches lassen sich über die Kommandos „Git: Branch“ bzw. „Git: Checkout“ anlegen und wechseln.

Arbeiten mit Remotes

Die eigentliche Stärke von Git entfaltet sich erst beim Arbeiten im Team. Branches sind nämlich in der Lage, sich über mehrere Rechner zu synchronisieren. Dabei kommt meist ein zentrales Repository zum Einsatz, das online gehostet wird, damit der Zugriff jederzeit von überall aus möglich ist. Ein solches Repository wird dann Remote genannt.

Remotes können mit dem Befehl „git remote add <remote-name> <remote-url>“ über die Konsole hinzugefügt werden. Danach stehen weitere Funktionen im Git-Menü zur Verfügung (siehe unten).

Oft haben lokale Branches ein Gegenstück auf Remote-Seite. Commits in den Branches werden bei Eingabe entsprechender Befehlen synchronisiert.

Unter https://git-scm.com/book/en/v2/Appendix-C:-Git-Commands-External-Systems stehen detailliertere Informationen bereit, wie man am besten mit Remotes arbeitet.

Funktionen im Git-Menü

Einige Git-Funktionen können über die drei Punkte in der Git-Ansicht aufgerufen werden.

Folgende Funktionen stehen zur Verfügung:

  • Sync - einen Pull und einen Push hintereinander aus
  • Pull - sich die neuesten Änderungen des Remote Repositorys und integriert sie in die momentane Arbeit
  • Pull Rebase - wie Pull, nur mit einem Rebase anstatt mit einem Merge.
  • Push - Schiebt lokal erstellte Commits in das Remote-Repository
  • Publish - Verbindet den momentanen Branch mit dem passenden Remote-Branch
  • Commit Staged - Committet alle Dateien aus der Staging Area
  • Commit All - Committet alle Dateien; nicht nur aus der Staging Area
  • Undo Last Commit - Kehrt zum vorletzten Commit zurück und fügt alle Änderungen des letzten Commits wieder in das Arbeitsverzeichnis ein
  • Unstage All - Leert die Staging Area
  • Clean All - Setzt alle Dateien auf den Zustand des letzten Commit zurück
  • Show Git Output - Zeigt die Kommandos an, die VS Code mit Git zuletzt ausgeführt hat

Git Status Informationen

Visual Studio zeigt unten links in der Startleiste eine Reihe von Informationen zu Git an. Ganz links wird der momentane Branch-Name und dessen Status angezeigt. Ein * steht für Änderungen im Arbeitsverzeichnis und ein + für das Vorhandensein von Dateien in der Staging Area (*+ ist auch möglich). Daneben wird der Unterschied zwischen dem momentanen lokalen Branch und dem Gegenstück auf Remote-Seite angezeigt.

Wichtige Ressourcen

Visual Studio Code Artikelserie

Grundlagen

Extensions

Weitere Beiträge