Bei der Arbeit in Git oder anderen Versionskontrollsystemen ist das Konzept des "Speicherns" deutlich nuancierter als das Speichern in einem Textverarbeitungsprogramm oder anderen herkömmlichen Anwendungen zur Dateibearbeitung. Der traditionelle Softwareausdruck "Speichern" ist ein Synonym für den Git-Begriff "Committen". Ein Commit ist das Git-Äquivalent einer "Speicherung". Das herkömmliche Speichern kann als ein Dateisystemvorgang betrachtet werden, der eine vorhandene Datei überschreibt oder eine neue Datei schreibt. Der Vorgang eines Git-Commits umfasst eine Sammlung von Dateien und Verzeichnissen.

Das Speichern von Änderungen in Git verläuft ebenfalls anders als in SVN. SVN-Commits oder "Check-ins" sind Vorgänge, bei denen ein Remote-Push an einen zentralisierten Server durchgeführt wird. Dies bedeutet, dass bei SVN-Commits für das ordnungsgemäße "Speichern" von Änderungen am Projekt eine Internetverbindung erforderlich ist. Git-Commits können dagegen lokal erfasst und aufgebaut und anschließend bei Bedarf mit dem Befehl git push -u origin master an den Remote-Server gepusht werden. Diese beiden Methoden unterscheiden sich grundsätzlich in ihrer Architektur. Git ist ein verteiltes Anwendungsmodell, während es sich bei SVN um ein zentralisiertes Modell handelt. Verteilte Anwendungen sind im Allgemeinen zuverlässiger, da sie nicht über einen Single Point of Failure verfügen, wie dies bei einem zentralisierten Server der Fall ist.

git add

Wie es funktioniert

Git-Tutorial: git add und Snapshots

Der Befehl git add darf nicht mit dem Befehl svn add verwechselt werden, über den du deinem Repository Dateien hinzufügen kannst. git add arbeitet auf der abstrakteren Ebene der Änderungen. Das bedeutet konkret: git add muss bei jeder Dateiänderung aufgerufen werden, svn add hingegen pro Datei nur ein einziges Mal. Auch wenn dieser Workflow redundant erscheinen mag, macht er die Projektorganisation doch um ein Vielfaches einfacher.

Staging-Umgebung

Statt alle Änderungen zu bestätigen, die du seit dem letzten Commit gemacht hast, ermöglicht es dir der Staging-Bereich, zusammengehörige Änderungen in stark fokussierten Snapshots zu gruppieren, bevor du sie für den Projektverlauf bestätigst. Das heißt, dass du alle möglichen Änderungen an nicht zusammengehörigen Dateien vornehmen, dann zurückgehen und sie in logische Commits unterteilen kannst, indem du zusammengehörige Änderungen dem Staging-Bereich hinzufügst und diese nacheinander bestätigst. Wie in jedem Revisionskontrollsystem ist es wichtig, auch kleinste Commits zu erstellen, damit bei minimalen Auswirkungen auf andere Teile des Projekts Bugs nachvollzogen und Änderungen rückgängig gemacht werden können.

Allgemeine Optionen

git add <file>

Mit diesem Befehl überführst du alle Änderungen in <file> in den Staging-Bereich, damit sie in den nächsten Commit aufgenommen werden können.

git add <directory>

Mit diesem Befehl überführst du alle Änderungen in <directory> in den Staging-Bereich, damit sie in den nächsten Commit aufgenommen werden können.

git add -p

Mit diesem Befehl startest du eine interaktive Staging-Sitzung, in der du auswählen kannst, welche Abschnitte einer Datei in den nächsten Commit aufgenommen werden sollen. Dir wird ein Block von Änderungen angezeigt und du wirst zur Eingabe eines Befehls aufgefordert. Mit y verschiebst du den Block in die Staging-Umgebung, mit n ignorierst du den Block. Mit der Option s teilst du den Block in kleinere Blöcke auf, mit e kannst du ihn manuell bearbeiten und mit q brichst du den Vorgang ab.

Beispiele

Wenn du ein neues Projekt beginnst, hat git add dieselbe Funktion wie svn import. Mithilfe der folgenden beiden Befehle kannst du einen ersten Commit des aktuellen Verzeichnisses erstellen:

git add .
git commit

Sobald du dein Projekt eingerichtet hast, kannst du neue Dateien hinzufügen, indem du den entsprechenden Pfad an git add übergibst:

git add hello.py
git commit

Die obigen Befehle können auch zum Erfassen von Änderungen an bestehenden Dateien genutzt werden. Beachte, dass Git nicht zwischen Staging-Änderungen in neuen Dateien und Änderungen in Dateien, die dem Repository bereits hinzugefügt wurden, unterscheidet.

Zusammenfassung

Du möchtest mit Git arbeiten?

Sieh dir dieses interaktive Tutorial an.

Jetzt loslegen