Per lavorare con il codice Android è necessario utilizzare Git (un sistema di controllo della versione open source) e Repo (uno strumento di gestione dei repository creato da Google che funziona su Git). Consulta la sezione Strumenti di controllo del codice sorgente per una spiegazione della relazione tra Repo e Git e i link alla documentazione di supporto per ogni strumento.
Flusso
Lo sviluppo di Android prevede il seguente flusso di lavoro di base:
- Avvia un nuovo ramo dell'argomento utilizzando
repo start
. - Modifica i file.
- Modifica le fasi 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 |
Esegue la gestione delle fasi dei file. |
git commit |
Esegue il commit dei file sottoposti a staging. |
git branch |
Mostra i rami attuali. |
git branch [branch] |
Crea un nuovo ramo di argomento. |
git checkout [branch] |
Passa HEAD al ramo specificato. |
git merge [branch] |
Unisce [branch] al ramo corrente. |
git diff |
Mostra la differenza delle modifiche non inserite in fase. |
git diff --cached |
Mostra la differenza delle modifiche pianificate. |
git log |
Mostra la cronologia del ramo corrente. |
git log m/[codeline].. |
Mostra i commit che non sono stati inviati. |
Per informazioni sull'utilizzo di Repo per scaricare il codice sorgente, consulta Download del codice sorgente e Riferimento ai comandi Repo.
Sincronizzazione dei client
Per sincronizzare i file di tutti i progetti disponibili:
repo sync
Per sincronizzare i file per i progetti selezionati:
repo syncPROJECT0 PROJECT1 ... PROJECTN
Creazione di rami di argomenti
Avvia un ramo dell'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 determinato commit, 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 argomenti, consulta Separare i rami di argomenti.
Per avviare un ramo dell'argomento utilizzando Repo, vai al progetto ed esegui:
repo startBRANCH_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 argomenti
Per assegnare il ramo a un progetto specifico:
repo startBRANCH_NAME PROJECT_NAME
Per un elenco di tutti i progetti, consulta android.googlesource.com. Se hai già eseguito la navigazione fino alla directory del progetto, utilizza un punto per rappresentare il progetto corrente.
Per passare a un altro ramo nel tuo ambiente di lavoro locale:
git checkoutBRANCH_NAME
Per visualizzare un elenco dei reparti esistenti:
git branch
oppure
repo branches
Entrambi i comandi restituiscono l'elenco dei rami esistenti con il nome del ramo corrente preceduto da un asterisco (*).
File in versione temporanea
Per impostazione predefinita, Git rileva, ma non monitora le modifiche apportate a un progetto. Per indicare a Git di conservare le modifiche, devi contrassegnarle o inserirle in una fase per l'inclusione in un commit.
Per eseguire il commit delle modifiche:
git add
Questo comando accetta argomenti per file o directory all'interno della directory del progetto. Nonostante il nome, git add
non aggiunge solo file al repository Git, ma può essere utilizzato anche per eseguire il commit delle modifiche e delle eliminazioni dei file.
Visualizzazione dello stato del client
Per elencare lo stato dei file:
repo status
Per visualizzare le modifiche non committate (modifiche locali non contrassegnate per il commit):
repo diff
Per visualizzare le modifiche committate (modifiche localizzate contrassegnate per il commit), assicurati di trovarti nella directory del progetto, quindi esegui git
diff
con l'argomento cached
:
cd
~/WORKING_DIRECTORY/PROJECT git diff --cached
Eseguire il commit delle modifiche
Un commit è l'unità di base del controllo delle revisioni in Git e consiste in un'istantanea della struttura della 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 le modifiche inviate ad AOSP. Se non aggiungi un messaggio di commit, il commit non va a buon fine.
Caricamento delle modifiche su Gerrit
Esegui l'aggiornamento all'ultima revisione, quindi carica la modifica:
repo sync
repo upload
Questi comandi restituiscono un elenco delle modifiche che hai eseguito e ti chiedono di selezionare i branch da caricare sul server di revisione. Se esiste un solo ramo, viene visualizzato un semplice prompt y/n
.
Risolvere i conflitti di sincronizzazione
Se il comando repo sync
restituisce conflitti di sincronizzazione:
- Visualizza i file non uniti (codice di stato = U).
- Modifica le regioni in conflitto in base alle esigenze.
- Passa alla directory del progetto pertinente. Aggiungi ed esegui il commit dei file interessati, quindi esegui il rebase delle modifiche:
git add .
git commit
git rebase --continue
- Al termine del rebase, avvia di nuovo l'intera sincronizzazione:
repo sync
PROJECT0 PROJECT1 ... PROJECTN
Pulizia dei client
Dopo aver unito le modifiche a Gerrit, aggiorna la directory di lavoro locale, quindi utilizza
repo prune
per rimuovere in sicurezza i rami degli argomenti inutilizzati:
repo sync
repo prune
Eliminazione dei client
Poiché tutte le informazioni sullo stato vengono archiviate nel client, devi solo eliminare la directory dal file system:
rm -rfWORKING_DIRECTORY
L'eliminazione di un cliente elimina definitivamente le modifiche che non hai caricato per la revisione.