Repo integra Git semplificando il lavoro su più repository. Per una spiegazione della relazione tra Repo e Git, vedi Strumenti di controllo dell'origine. Per maggiori dettagli su Repo, consulta il file README di Repo.
L'utilizzo di Repo assume il seguente formato:
repo command options
Gli elementi facoltativi sono indicati tra parentesi quadre []. Ad esempio, molti comandi accettano project-list come argomento. Puoi specificare project-list come elenco di nomi o elenco di percorsi alle directory di origine locali per i progetti:
repo sync [project0 project1 ... projectn]repo sync [/path/to/project0 ... /path/to/projectn]
guida
repo help
Fornisce assistenza per il comando repo. Puoi visualizzare informazioni dettagliate su un comando Repo specifico specificando un comando come opzione:
repo help command
Ad esempio, il seguente comando genera una descrizione e un elenco di opzioni per il comando init:
repo help init
In alternativa, per visualizzare solo l'elenco delle opzioni disponibili per un comando, esegui:
repo command --help
Ad esempio:
repo init --help
init
repo init -u url [options]
Installa Repo nella directory corrente. Questo comando crea una directory .repo/ con repository Git per il codice sorgente di Repo e i file manifest Android standard.
Opzioni:
-u: specifica un URL da cui recuperare un repository manifest. Il manifest comune si trova all'indirizzohttps://android.googlesource.com/platform/manifest.-m: seleziona un file manifest all'interno del repository. Se non viene selezionato alcun nome manifest, il valore predefinito èdefault.xml.-b: specifica una revisione, ovvero un manifest-branch specifico.
Per tutti gli altri comandi Repo, la directory di lavoro corrente deve essere la directory principale di .repo/ o una sottodirectory della directory principale.
sincronizzazione
repo sync [project-list]
Scarica le nuove modifiche e aggiorna i file di lavoro nell'ambiente locale, eseguendo essenzialmente git fetch in tutti i repository Git. Se esegui repo sync senza argomenti, i file vengono sincronizzati per tutti i progetti.
Quando esegui repo sync, accade quanto segue:
Se il progetto non è mai stato sincronizzato,
repo syncequivale agit clone; tutti i branch nel repository remoto vengono copiati nella directory del progetto locale.Se il progetto è stato sincronizzato in precedenza,
repo syncequivale a:git remote updategit rebase origin/branchDove branch è il branch estratto corrente nella directory del progetto locale. Se il branch locale non tiene traccia di un branch nel repository remoto, non viene eseguita alcuna sincronizzazione per il progetto.
Dopo l'esecuzione di repo sync, il codice nei progetti specificati è aggiornato e sincronizzato con il codice nel repository remoto.
Opzioni chiave:
-c: recupera solo il branch manifest corrente dal server.-d: riporta i progetti specificati alla revisione del manifest. Questa opzione è utile se il progetto si trova in un branch di argomento, ma è necessaria temporaneamente la revisione del manifest.-f: continua a sincronizzare gli altri progetti anche se la sincronizzazione di un progetto non riesce.-j threadcount: suddivide la sincronizzazione tra i thread per completarla più rapidamente. Assicurati di non sovraccaricare la macchina: lascia un po' di CPU riservata per altre attività. Per visualizzare il numero di CPU disponibili, esegui primanproc --all.-q: esegui in modalità silenziosa sopprimendo i messaggi di stato.-s: sincronizza con una build valida nota come specificato dall'manifest-serverelemento nel manifest corrente.
Per altre opzioni, esegui repo help sync.
upload
repo upload [project-list]
Carica le modifiche nel server di revisione. Per i progetti specificati, Repo confronta i branch locali con i branch remoti aggiornati durante l'ultima sincronizzazione di Repo. Repo ti chiede di selezionare uno o più branch che non sono stati caricati per la revisione.
Tutti i commit sui branch selezionati vengono quindi trasmessi a Gerrit tramite una connessione HTTPS. Devi configurare una password HTTPS per attivare l'autorizzazione al caricamento. Per generare una nuova coppia di nome utente e password da utilizzare tramite HTTPS, visita il generatore di password.
Quando Gerrit riceve i dati degli oggetti sul server, trasforma ogni commit in una modifica in modo che i revisori possano commentare un commit specifico. Per combinare più commit di checkpoint in un unico commit, utilizza git rebase -i prima di eseguire il caricamento.
Se esegui repo upload senza argomenti, vengono cercate le modifiche da caricare in tutti i progetti.
Per modificare le modifiche dopo il caricamento, utilizza git rebase -i o git commit --amend per aggiornare i commit locali. Al termine delle modifiche:
- Verifica che il branch aggiornato sia il branch estratto corrente.
- Utilizza
repo upload --replace PROJECTper aprire l'editor di corrispondenza delle modifiche. Per ogni commit della serie, inserisci l'ID modifica di Gerrit tra parentesi quadre:
# Replacing from branch foo [ 3021 ] 35f2596c Refactor part of GetUploadableBranches to look up one specific... [ 2829 ] ec18b4ba Update proto client to support patch set replacements # Insert change numbers in the brackets to add a new patch set. # To create a new change record, leave the brackets empty.
Al termine del caricamento, le modifiche hanno un patch set aggiuntivo.
Per caricare solo il branch Git estratto corrente, utilizza il flag --current-branch (o --cbr).
Per le modifiche correlate, mantieni tutti i CL nello stesso argomento. Aggiungi un nome dell'argomento durante il
caricamento con --topic=TOPIC o passa -t per impostare il nome dell'argomento sul nome del branch
locale.
diff
repo diff [project-list]
Mostra le modifiche in sospeso tra il commit e l'albero di lavoro utilizzando git diff.
scarica
repo download target change
Scarica la modifica specificata dal sistema di revisione e la rende disponibile nella directory di lavoro locale del progetto.
Ad esempio, per scaricare la modifica 23823 nella platform/build
directory:
repo download platform/build 23823
L'esecuzione di repo sync rimuove tutti i commit recuperati con repo download. In alternativa, puoi estrarre il branch remoto utilizzando git checkout m/main.
forall
repo forall [project-list] -c command
Esegue il comando shell specificato in ogni progetto. Le seguenti variabili di ambiente aggiuntive sono rese disponibili da repo forall:
REPO_PROJECTè impostato sul nome univoco del progetto.REPO_PATHè il percorso relativo alla radice del client.REPO_REMOTEè il nome del sistema remoto dal manifest.REPO_LREVè il nome della revisione dal manifest, tradotto in un branch di monitoraggio locale. Utilizza questa variabile se devi passare la revisione del manifest a un comando Git eseguito localmente.REPO_RREVè il nome della revisione dal manifest, esattamente come scritto nel manifest.
Opzioni:
-c: comando e argomenti da eseguire. Il comando viene valutato tramite/bin/she tutti gli argomenti successivi vengono passati come parametri posizionali della shell.-p: mostra le intestazioni del progetto prima dell'output del comando specificato. Questa operazione viene eseguita associando i pipe ai flussi stdin, stdout e stderr del comando e inviando tutto l'output a un flusso continuo visualizzato in una singola sessione di pager.-v: mostra i messaggi che il comando scrive in stderr.
prugna
repo prune [project-list]
Elimina gli argomenti già uniti.
start
repo start branch-name [project-list]
Inizia un nuovo branch per lo sviluppo, a partire dalla revisione specificata nel manifest.
L'argomento BRANCH_NAME fornisce una breve descrizione della modifica che stai tentando di apportare ai progetti. Se non lo sai, valuta la possibilità di utilizzare il nome default.
L'argomento project-list specifica i progetti che partecipano a questo branch di argomento.
stato
repo status [project-list]
Confronta l'albero di lavoro con l'area di staging (indice) e il commit più recente su questo branch (HEAD) in ogni progetto specificato. Visualizza una riga di riepilogo per ogni file in cui è presente una differenza tra questi tre stati.
Per visualizzare lo stato solo del branch corrente, esegui repo status .. Le informazioni sullo stato sono elencate per progetto. Per ogni file del progetto viene utilizzato un codice di due lettere.
Nella prima colonna, una lettera maiuscola indica la differenza tra l'area di staging e l'ultimo stato di commit.
| Lettera | Significato | Descrizione |
|---|---|---|
| - | Nessuna variazione | Uguale in HEAD e indice |
| A | Aggiunta | Non in HEAD, in indice |
| M | Modificata | In HEAD, modificata nell'indice |
| D | Eliminata | In HEAD, non in indice |
| R | Nuovo nome | Non in HEAD, percorso modificato nell'indice |
| C | Copiata | Non in HEAD, copiata da un'altra nell'indice |
| T | Modalità modificata | Stesso contenuto in HEAD e indice, modalità modificata |
| U | Non unita | Conflitto tra HEAD e indice; è necessaria la risoluzione |
Nella seconda colonna, una lettera minuscola indica la differenza tra la directory di lavoro e l'indice.
| Lettera | Significato | Descrizione |
|---|---|---|
| - | Nuova/sconosciuta | Non in indice, nell'albero di lavoro |
| m | Modificata | In indice, nell'albero di lavoro, modificata |
| d | Eliminata | In indice, non nell'albero di lavoro |
Gestire gli errori di Repo
git commit -a # Commit local changes first so they aren't lostrepo start branch-name # Start the branchgit reset --hard HEAD@{1} # Reset the branch so that it matches the commit before repo startrepo upload .
L'errore repo: error: no branches ready for upload viene visualizzato quando il comando repo start non è stato eseguito all'inizio della sessione. Per eseguire il ripristino, controlla l'ID commit, avvia un nuovo branch e poi uniscilo.
Struttura del repository Git
Per Android, i repository Git (progetti) non sono nidificati. Ogni progetto è associato a una directory specifica nell'albero di origine e tutte le sottodirectory e i file in questa directory fanno parte dello stesso progetto.
Evita di utilizzare la funzionalità git submodule di Repo per lo sviluppo di Android.