Workflow für die Versionsverwaltung

Für die Arbeit mit Android-Code sind sowohl Git (ein Open-Source-Versionsverwaltungssystem) als auch Repo (ein von Google entwickeltes Repository-Verwaltungstool, das auf Git basiert) erforderlich. Eine Erläuterung des Verhältnisses zwischen Repo und Git sowie Links zur entsprechenden Dokumentation für jedes Tool finden Sie unter Quellcodeverwaltungstools.

Flow

Die Android-Entwicklung umfasst den folgenden grundlegenden Workflow:

  1. Mit repo start können Sie einen neuen Themenzweig starten.
  2. Bearbeiten Sie die Dateien.
  3. Stellen Sie die Änderungen mit git add bereit.
  4. Übernehmen Sie die Änderungen mit git commit.
  5. Laden Sie Änderungen mit repo upload auf den Überprüfungsserver hoch.

Tasks

Für die Arbeit mit Git und Repo in den Android-Code-Repositories sind die folgenden gängigen Aufgaben erforderlich.

Befehl Beschreibung
repo init Initialisiert einen neuen Client.
repo sync Synchronisiert den Client mit den Repositories.
repo start Startet einen neuen Branch.
repo status Zeigt den Status des aktuellen Zweigs an.
repo upload Lädt Änderungen auf den Überprüfungsserver hoch.
git add Die Dateien werden bereitgestellt.
git commit Führt einen Commit für die bereitgestellten Dateien aus.
git branch Zeigt die aktuellen Branches an.
git branch [branch] Erstellt einen neuen Themenzweig.
git checkout [branch] Wechselt HEAD zum angegebenen Branch.
git merge [branch] Führt [branch] in den aktuellen Zweig ein.
git diff Zeigt den Unterschied der nicht bereitgestellten Änderungen an.
git diff --cached Zeigt den Unterschied der bereitgestellten Änderungen an.
git log Zeigt den Verlauf des aktuellen Zweigs an.
git log m/[codeline].. Zeigt die Commits an, die nicht gepusht wurden.

Informationen zum Herunterladen von Quellcode mit Repo finden Sie unter Quellcode herunterladen und Repo-Befehlsreferenz.

Clients synchronisieren

So synchronisieren Sie die Dateien für alle verfügbaren Projekte:

repo sync

So synchronisieren Sie die Dateien für ausgewählte Projekte:

repo sync PROJECT0 PROJECT1 ... PROJECTN

Themenzweige erstellen

Starten Sie einen Themenzweig in Ihrer lokalen Arbeitsumgebung, wenn Sie mit einer Änderung beginnen, z. B. wenn Sie mit der Arbeit an einem Fehler oder einer neuen Funktion beginnen. Ein Themenbranch ist keine Kopie der Originaldateien, sondern ein Zeiger auf einen bestimmten Commit. Daher ist das Erstellen lokaler Branches und das Wechseln zwischen ihnen ein unkomplizierter Vorgang. Mit Branches können Sie einen Aspekt Ihrer Arbeit von den anderen isolieren. Weitere Informationen zur Verwendung von Themenzweigen finden Sie unter Themenzweige trennen.

Wenn Sie mit Repo einen Themenzweig starten möchten, rufen Sie das Projekt auf und führen Sie folgenden Befehl aus:

repo start BRANCH_NAME .

Der abschließende Punkt ( .) steht für das Projekt im aktuellen Arbeitsverzeichnis.

So prüfen Sie, ob der neue Branch erstellt wurde:

repo status .

Themenzweige verwenden

So weisen Sie den Branch einem bestimmten Projekt zu:

repo start BRANCH_NAME PROJECT_NAME

Eine Liste aller Projekte finden Sie unter Google Git-Repositories. Wenn Sie bereits zum Projektverzeichnis navigiert sind, können Sie das aktuelle Projekt mit einem Punkt darstellen.

So wechseln Sie in Ihrer lokalen Arbeitsumgebung zu einem anderen Zweig:

git checkout BRANCH_NAME

So rufen Sie eine Liste der vorhandenen Branches auf:

git branch

oder

repo branches

Beide Befehle geben die Liste der vorhandenen Branches zurück. Der Name des aktuellen Branch wird mit einem Sternchen (*) gekennzeichnet.

Dateien bereitstellen

Standardmäßig werden Änderungen, die Sie an einem Projekt vornehmen, von Git erkannt, aber nicht nachverfolgt. Damit Git Ihre Änderungen beibehält, müssen Sie sie markieren oder stagen, damit sie in einen Commit aufgenommen werden.

So führen Sie Änderungen in die Staging-Umgebung ein:

git add

Dieser Befehl akzeptiert Argumente für Dateien oder Verzeichnisse im Projektverzeichnis. Trotz des Namens werden mit git add nicht nur Dateien zum Git-Repository hinzugefügt. Damit lassen sich auch Änderungen und Löschungen von Dateien stagen.

Clientstatus ansehen

So listen Sie den Status von Dateien auf:

repo status

So rufen Sie Änderungen ohne durchgeführten Commit auf (lokale Änderungen, die nicht für den Commit markiert sind):

repo diff

Wenn Sie die übernommenen Änderungen (lokale Änderungen, die für die Übernahme markiert sind) ansehen möchten, müssen Sie sich im Projektverzeichnis befinden und git diff mit dem Argument cached ausführen:

cd ~/WORKING_DIRECTORY/PROJECT
git diff --cached

Commit für Änderungen durchführen

Ein Commit ist die Grundeinheit der Versionskontrolle in Git und besteht aus einem Snapshot der Verzeichnisstruktur und des Dateiinhalts für das gesamte Projekt. Verwenden Sie diesen Befehl, um ein Commit in Git zu erstellen:

git commit

Geben Sie bei Aufforderung eine kurze (aber hilfreiche) Commit-Nachricht für Änderungen ein, die an AOSP gesendet werden. Wenn Sie keine Commit-Nachricht hinzufügen, schlägt der Commit fehl.

Änderungen in Gerrit hochladen

Aktualisieren Sie auf die neueste Version und laden Sie dann die Änderung hoch:

repo sync
repo upload

Mit diesen Befehlen wird eine Liste der Änderungen zurückgegeben, die Sie committet haben, und Sie werden aufgefordert, die Branches auszuwählen, die auf den Überprüfungsserver hochgeladen werden sollen. Wenn es nur einen Zweig gibt, wird eine einfache y/n-Aufforderung angezeigt.

Synchronisierungskonflikte beheben

Wenn der Befehl repo sync Synchronisierungskonflikte zurückgibt:

  1. Sehen Sie sich die Dateien an, die nicht zusammengeführt wurden (Statuscode = U).
  2. Bearbeiten Sie die Konfliktregionen nach Bedarf.
  3. Wechseln Sie in das entsprechende Projektverzeichnis. Fügen Sie die betroffenen Dateien hinzu und führen Sie den Commit durch. Rebasen Sie dann die Änderungen:
    git add .
    git commit
    git rebase --continue
    
  4. Starten Sie nach Abschluss des Rebase die gesamte Synchronisierung noch einmal:
    repo sync PROJECT0 PROJECT1 ... PROJECTN
    

Clients bereinigen

Nachdem Sie Änderungen in Gerrit zusammengeführt haben, aktualisieren Sie Ihr lokales Arbeitsverzeichnis und verwenden Sie dann repo prune, um alte Themenzweige sicher zu entfernen:

repo sync
repo prune

Clients löschen

Da alle Statusinformationen in Ihrem Client gespeichert sind, müssen Sie nur das Verzeichnis aus Ihrem Dateisystem löschen:

rm -rf WORKING_DIRECTORY

Wenn Sie einen Mandanten löschen, werden alle Änderungen, die Sie noch nicht zur Überprüfung hochgeladen haben, endgültig gelöscht.