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:
- Mit
repo startkönnen Sie einen neuen Themenzweig starten. - Bearbeiten Sie die Dateien.
- Stellen Sie die Änderungen mit
git addbereit. - Übernehmen Sie die Änderungen mit
git commit. - Laden Sie Änderungen mit
repo uploadauf 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/PROJECTgit 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 syncrepo 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:
- Sehen Sie sich die Dateien an, die nicht zusammengeführt wurden (Statuscode = U).
- Bearbeiten Sie die Konfliktregionen nach Bedarf.
- 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 commitgit rebase --continue - 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 syncrepo 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.