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:
- Starten Sie mit
repo start
einen neuen Themenzweig. - Bearbeiten Sie die Dateien.
- Übernehmen Sie die Änderungen mit
git add
. - Übernehmen Sie die Änderungen mit
git commit
. - 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:
- Dateien aufrufen, 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, übernehmen Sie sie und führen Sie dann einen neuen Rebase durch:
git add .
git commit
git rebase --continue
- 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.