Workflow für die Versionsverwaltung

Für die Arbeit mit Android-Code sind Git (ein Open-Source-Versionskontrollsystem) und Repo (ein von Google entwickeltes Repository-Verwaltungstool, das auf Git basiert) erforderlich. Unter Tools zur Versionskontrolle finden Sie eine Erklärung der Beziehung zwischen Repo und Git sowie Links zu unterstützenden Dokumenten für jedes Tool.

Fließen

Die Android-Entwicklung umfasst den folgenden grundlegenden Workflow:

  1. Starten Sie mit repo start einen neuen Themenzweig.
  2. Bearbeiten Sie die Dateien.
  3. Übernehmen Sie die Änderungen mit git add.
  4. Übernehmen Sie die Änderungen mit git commit.
  5. Laden Sie die Änderungen mit repo upload auf den Überprüfungsserver hoch.

Tasks

Die Arbeit mit Git und Repo in den Android-Code-Repositories umfasst die folgenden gängigen Aufgaben.

Befehl Beschreibung
repo init Initialisiert einen neuen Client.
repo sync Synchronisiert den Client mit den Repositories.
repo start Startet einen neuen Branch.
repo status Der Status des aktuellen Branches.
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 Die aktuellen Branches.
git branch [branch] Erstellt einen neuen Themenzweig.
git checkout [branch] Schaltet HEAD zum angegebenen Branch.
git merge [branch] Führt einen Zusammenschluss von [branch] mit dem aktuellen Branch aus.
git diff Zeigt den Vergleich der nicht veröffentlichten Änderungen an.
git diff --cached Zeigt den Unterschied zwischen den geplanten Änderungen an.
git log Hier sehen Sie den Verlauf des aktuellen Branches.
git log m/[codeline].. Zeigt die Commits an, die nicht gepusht wurden.

Informationen zum Herunterladen der Quelle mit Repo finden Sie unter Quellcode herunterladen und in der Referenz zu Repo-Befehlen.

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 eine Änderung vornehmen, z. B. wenn Sie mit der Arbeit an einem Fehler oder einer neuen Funktion beginnen. Ein Themenzweig ist keine Kopie der ursprünglichen Dateien, sondern ein Verweis auf einen bestimmten Commit. Das Erstellen lokaler Zweige und das Wechseln zwischen ihnen ist dadurch sehr einfach. Mithilfe von Branches können Sie einen Aspekt Ihrer Arbeit von den anderen isolieren. Einen interessanten Artikel zur Verwendung von Themenzweigen finden Sie unter Themenzweige trennen.

Wenn Sie einen Themenzweig mit Repo starten möchten, rufen Sie das Projekt auf und führen Sie Folgendes 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 android.googlesource.com. Wenn Sie sich bereits im Projektverzeichnis befinden, verwenden Sie einfach einen Punkt für das aktuelle Projekt.

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

git checkout BRANCH_NAME

So rufen Sie eine Liste der vorhandenen Branches auf:

git branch

oder

repo branches

Beide Befehle geben eine Liste der vorhandenen Branches zurück, wobei der Name des aktuellen Branches von einem Sternchen (*) vorangestellt ist.

Staging-Dateien

Standardmäßig erkennt Git die Änderungen, die Sie in einem Projekt vornehmen, zeichnet sie aber nicht auf. Wenn Sie Git anweisen möchten, Ihre Änderungen zu speichern, müssen Sie diese Änderungen für die Aufnahme in einen Commit kennzeichnen oder vorbereiten.

So planen Sie Änderungen:

git add

Dieser Befehl akzeptiert Argumente für Dateien oder Verzeichnisse im Projektverzeichnis. Trotz des Namens fügt git add dem Git-Repository nicht nur Dateien hinzu, sondern kann auch zum Staging von Dateiänderungen und ‑löschungen verwendet werden.

Clientstatus ansehen

So listen Sie den Status von Dateien auf:

repo status

So rufen Sie nicht committete Änderungen auf (lokale Änderungen, die nicht für einen Commit markiert sind):

repo diff

Wenn Sie die Commit-Änderungen (Änderungen, die für das Commit gekennzeichnet sind) aufrufen 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

Änderungen übernehmen

Ein Commit ist die grundlegende Einheit 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

Wenn Sie aufgefordert werden, eine Commit-Nachricht anzugeben, geben Sie eine kurze, aber hilfreiche Nachricht für die an das AOSP gesendeten Änderungen an. Wenn Sie keine Commit-Nachricht hinzufügen, schlägt der Commit fehl.

.

Änderungen in Gerrit hochladen

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

repo sync
repo upload

Diese Befehle geben eine Liste der von Ihnen gecommitteten Änderungen zurück und Sie werden aufgefordert, die Branches auszuwählen, die auf den Überprüfungsserver hochgeladen werden sollen. Wenn es nur eine Verzweigung gibt, wird eine einfache Aufforderung mit y/n angezeigt.

Synchronisierungskonflikte lösen

Wenn der Befehl repo sync Synchronisierungskonflikte zurückgibt:

  1. Dateien aufrufen, 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, übernehmen Sie sie und führen Sie dann einen neuen Rebase durch:
    git add .
    git commit
    git rebase --continue
    
  4. Starten Sie nach Abschluss der Neubasierung die gesamte Synchronisierung noch einmal:
    repo sync PROJECT0 PROJECT1 ... PROJECTN
    

Kunden bereinigen

Nachdem Sie die Änderungen in Gerrit zusammengeführt haben, aktualisieren Sie Ihr lokales Arbeitsverzeichnis und entfernen Sie dann mit repo prune veraltete Themenzweige:

repo sync
repo prune

Clients löschen

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

rm -rf WORKING_DIRECTORY

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