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 Erklärung der Beziehung zwischen Repo und Git sowie Links zu unterstützender Dokumentation für die einzelnen Tools finden Sie unter Tools zur Quellcodeverwaltung.
Flow
Die Android-Entwicklung umfasst den folgenden grundlegenden Workflow:
- Starten Sie mit
repo starteinen neuen Themenzweig. - Bearbeiten Sie die Dateien.
- Stellen Sie Änderungen mit
git addbereit. - Führen Sie mit
git commiteinen Commit für Änderungen durch. - Laden Sie Änderungen mit
repo uploadauf den Überprüfungsserver hoch.
Tasks
Bei der Arbeit mit Git und Repo in den Android-Code-Repositories müssen die folgenden häufigen Aufgaben ausgeführt werden.
| Befehl | Beschreibung |
|---|---|
repo init |
Initialisiert einen neuen Client. |
repo sync |
Synchronisiert den Client mit den Repositories. |
repo start |
Startet einen neuen Zweig. |
repo status |
Zeigt den Status des aktuellen Zweigs an. |
repo upload |
Lädt Änderungen auf den Überprüfungsserver hoch. |
git add |
Stellt die Dateien bereit. |
git commit |
Führt einen Commit für die bereitgestellten Dateien durch. |
git branch |
Zeigt die aktuellen Zweige an. |
git branch [branch] |
Erstellt einen neuen Themenzweig. |
git checkout [branch] |
Wechselt HEAD zum angegebenen Zweig. |
git merge [branch] |
Führt [branch] in den aktuellen Zweig ein. |
git diff |
Zeigt den Unterschied zwischen den nicht bereitgestellten Änderungen. |
git diff --cached |
Zeigt den Unterschied zwischen den bereitgestellten Änderungen. |
git log |
Zeigt den Verlauf des aktuellen Zweigs an. |
git log m/[codeline].. |
Zeigt die Commits an, die nicht per Push übertragen wurden. |
Informationen zum Herunterladen von Quellcode mit Repo finden Sie unter Quellcode herunterladen und der 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 in Ihrer lokalen Arbeitsumgebung einen Themenzweig, 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 Originaldateien, sondern ein Zeiger auf einen bestimmten Commit. Dadurch ist das Erstellen lokaler Zweige und das Wechseln zwischen ihnen ein unaufwendiger Vorgang. Mit Zweigen 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 mit Repo einen Themenzweig starten möchten, rufen Sie das Projekt auf und führen Sie Folgendes aus:
repo start BRANCH_NAME .
Der nachgestellte Punkt ( .) steht für das Projekt im aktuellen Arbeits
verzeichnis.
So prüfen Sie, ob der neue Zweig erstellt wurde:
repo status .
Themenzweige verwenden
So weisen Sie den Zweig einem bestimmten Projekt zu:
repo start BRANCH_NAME PROJECT_NAME
Eine Liste aller Projekte finden Sie unter android.googlesource.com. Wenn Sie bereits zum Projektverzeichnis gewechselt haben, verwenden Sie einfach einen Punkt, um das aktuelle Projekt darzustellen.
So wechseln Sie in Ihrer lokalen Arbeitsumgebung zu einem anderen Zweig:
git checkout BRANCH_NAME
So rufen Sie eine Liste der vorhandenen Zweige auf:
git branch
oder
repo branches
Beide Befehle geben die Liste der vorhandenen Zweige zurück, wobei der Name des aktuellen Zweigs mit einem Sternchen (*) gekennzeichnet ist.
Dateien bereitstellen
Standardmäßig erkennt Git die Änderungen, die Sie an einem Projekt vornehmen, verfolgt sie aber nicht. Wenn Git Ihre Änderungen beibehalten soll, müssen Sie diese Änderungen markieren oder bereitstellen , damit sie in einen Commit aufgenommen werden.
So stellen Sie Änderungen bereit:
git add
Dieser Befehl akzeptiert Argumente für Dateien oder Verzeichnisse im Projekt
Verzeichnis. Trotz des Namens fügt git add nicht nur Dateien zum
Git-Repository hinzu, sondern kann auch verwendet werden, um Änderungen und
Löschungen von Dateien bereitzustellen.
Clientstatus ansehen
So listen Sie den Status von Dateien auf:
repo status
So sehen Sie nicht übertragene Änderungen (lokale Änderungen, die nicht für einen Commit markiert sind):
repo diff
Wenn Sie übertragene Änderungen ansehen möchten (lokale Änderungen, die für einen Commit markiert sind), wechseln Sie zum Projektverzeichnis und führen Sie git
diff mit dem cached Argument aus:
cd ~/WORKING_DIRECTORY/PROJECTgit diff --cached
Änderungen übernehmen
Ein Commit ist die Grundeinheit der Revisionskontrolle in Git und besteht aus einer Momentaufnahme der Verzeichnisstruktur und der Dateiinhalte für das gesamte Projekt. Verwenden Sie diesen Befehl, um einen Commit in Git zu erstellen:
git commit
Wenn Sie zur Eingabe einer Commit-Nachricht aufgefordert werden, geben Sie eine kurze (aber hilfreiche) 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 Revision und laden Sie dann die Änderung hoch:
repo syncrepo upload
Diese Befehle geben eine Liste der von Ihnen übertragenen Änderungen zurück und fordern Sie auf,
die Zweige 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 Konfliktbereiche nach Bedarf.
- Wechseln Sie zum entsprechenden Projektverzeichnis. Fügen Sie die betroffenen
Dateien hinzu und führen Sie einen Commit durch. Führen Sie dann ein Rebase der Änderungen durch:
git add .git commitgit rebase --continue - Nach Abschluss des Rebase starten Sie 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 entfernen Sie dann mit
repo prune veraltete Themenzweige:
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 Client löschen, werden alle Änderungen, die Sie nicht zur Überprüfung hochgeladen haben, endgültig gelöscht.