Per lavorare con il codice Android sono necessari Git, un sistema di controllo della versione open source, e Repo, uno strumento di gestione dei repository creato da Google che viene eseguito su Git. Per una spiegazione della relazione tra Repo e Git e per i link alla documentazione di supporto per ogni strumento, vedi Strumenti di controllo del codice sorgente.
Flow
Lo sviluppo di Android prevede il seguente flusso di lavoro di base:
- Avvia un nuovo ramo di argomento utilizzando
repo start. - Modifica i file.
- Prepara le modifiche utilizzando
git add. - Esegui il commit delle modifiche utilizzando
git commit. - Carica le modifiche sul server di revisione utilizzando
repo upload.
Tasks
L'utilizzo di Git e Repo nei repository di codice Android prevede l'esecuzione delle seguenti attività comuni.
| Comando | Descrizione |
|---|---|
repo init |
Inizializza un nuovo client. |
repo sync |
Sincronizza il client con i repository. |
repo start |
Avvia un nuovo ramo. |
repo status |
Mostra lo stato del ramo corrente. |
repo upload |
Carica le modifiche sul server di revisione. |
git add |
Prepara i file. |
git commit |
Esegue il commit dei file preparati. |
git branch |
Mostra i rami correnti. |
git branch [branch] |
Crea un nuovo ramo di argomento. |
git checkout [branch] |
Imposta HEAD sul ramo specificato. |
git merge [branch] |
Unisce [branch] al ramo corrente. |
git diff |
Mostra le modifiche non preparate. |
git diff --cached |
Mostra le modifiche preparate. |
git log |
Mostra la cronologia del ramo corrente. |
git log m/[codeline].. |
Mostra i commit di cui non è stato eseguito il push. |
Per informazioni sull'utilizzo di Repo per scaricare il codice sorgente, vedi Scaricare il codice sorgente e la documentazione di riferimento dei comandi Repo.
Sincronizzare i client
Per sincronizzare i file per tutti i progetti disponibili:
repo sync
Per sincronizzare i file per i progetti selezionati:
repo sync PROJECT0 PROJECT1 ... PROJECTN
Creare rami di argomento
Avvia un ramo di argomento nel tuo ambiente di lavoro locale ogni volta che inizi una modifica, ad esempio quando inizi a lavorare su un bug o una nuova funzionalità. Un ramo di argomento non è una copia dei file originali, ma un puntatore a un commit specifico, il che rende la creazione di rami locali e il passaggio da uno all'altro un'operazione leggera. Utilizzando i rami, puoi isolare un aspetto del tuo lavoro dagli altri. Per un articolo interessante sull'utilizzo dei rami di argomento, consulta Separare i rami di argomento.
Per avviare un ramo di argomento utilizzando Repo, vai al progetto ed esegui:
repo start BRANCH_NAME .
Il punto finale ( .) rappresenta il progetto nella directory di lavoro corrente.
Per verificare che il nuovo ramo sia stato creato:
repo status .
Utilizzare i rami di argomento
Per assegnare il ramo a un progetto specifico:
repo start BRANCH_NAME PROJECT_NAME
Per un elenco di tutti i progetti, consulta android.googlesource.com. Se hai già navigato nella directory del progetto, utilizza un punto per rappresentare il progetto corrente.
Per passare a un altro ramo nel tuo ambiente di lavoro locale:
git checkout BRANCH_NAME
Per visualizzare un elenco dei rami esistenti:
git branch
o
repo branches
Entrambi i comandi restituiscono l'elenco dei rami esistenti con il nome del ramo corrente preceduto da un asterisco (*).
Preparare i file
Per impostazione predefinita, Git rileva le modifiche apportate a un progetto, ma non le monitora. Per indicare a Git di conservare le modifiche, devi contrassegnarle o prepararle quelle modifiche per l'inclusione in un commit.
Per preparare le modifiche:
git add
Questo comando accetta argomenti per file o directory all'interno della directory del progetto. Nonostante il nome, git add non si limita ad aggiungere file al
repository Git, ma può essere utilizzato anche per preparare le modifiche e le
eliminazioni dei file.
Visualizzare lo stato del client
Per elencare lo stato dei file:
repo status
Per visualizzare le modifiche di cui non è stato eseguito il commit (modifiche locali non contrassegnate per il commit):
repo diff
Per visualizzare le modifiche di cui è stato eseguito il commit (modifiche locali che sono contrassegnate per
il commit), assicurati di trovarti nella directory del progetto, quindi esegui git
diff con l'argomento cached:
cd ~/WORKING_DIRECTORY/PROJECTgit diff --cached
Eseguire il commit delle modifiche
Un commit è l'unità di base del controllo della revisione in Git e consiste in uno snapshot della struttura delle directory e dei contenuti dei file per l'intero progetto. Utilizza questo comando per creare un commit in Git:
git commit
Quando ti viene richiesto un messaggio di commit, fornisci un messaggio breve (ma utile) per modifiche inviate ad AOSP. Se non aggiungi un messaggio di commit, il commit non va a buon fine.
Caricare le modifiche su Gerrit
Aggiorna all'ultima revisione, quindi carica la modifica:
repo syncrepo upload
Questi comandi restituiscono un elenco delle modifiche di cui hai eseguito il commit e ti chiedono di
selezionare i rami da caricare sul server di revisione. Se è presente un solo
ramo, viene visualizzato un semplice y/n prompt.
Risolvere i conflitti di sincronizzazione
Se il comando repo sync restituisce conflitti di sincronizzazione:
- Visualizza i file di cui non è stata eseguita l'unione (codice di stato = U).
- Modifica le regioni di conflitto in base alle necessità.
- Passa alla directory del progetto pertinente. Aggiungi ed esegui il commit dei file interessati, quindi esegui il rebase delle modifiche:
git add .git commitgit rebase --continue - Al termine del rebase, avvia di nuovo l'intera sincronizzazione:
repo sync PROJECT0 PROJECT1 ... PROJECTN
Pulire i client
Dopo aver unito le modifiche a Gerrit, aggiorna la directory di lavoro locale, quindi utilizza
repo prune per rimuovere in sicurezza i rami di argomento obsoleti:
repo syncrepo prune
Eliminare i client
Poiché tutte le informazioni sullo stato vengono archiviate nel client, devi solo eliminare la directory dal file system:
rm -rf WORKING_DIRECTORY
L'eliminazione di un client comporta l'eliminazione definitiva di tutte le modifiche che non hai caricato per la revisione.