Riferimento comandi Repo

Repo integra Git semplificando il lavoro su più repository. Per una spiegazione della relazione tra Repo e Git, vedi Strumenti di controllo del codice sorgente. Per ulteriori dettagli su Repo, consulta il README di Repo

L'utilizzo del repo assume la seguente forma:

repo command options

Gli elementi facoltativi sono mostrati 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]

assistenza

repo help

Fornisce assistenza sul 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 i 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'indirizzo https://android.googlesource.com/platform/manifest.

  • -m: seleziona un file manifest all'interno del repository. Se non viene selezionato alcun nome del manifest, il valore predefinito è default.xml.

  • -b: specifica una revisione, ovvero un particolare manifest-branch.

sincronizzazione

repo sync [project-list]

Scarica le nuove modifiche e aggiorna i file di lavoro nel tuo ambiente locale, eseguendo di fatto git fetch in tutti i repository Git. Se esegui repo sync senza argomenti, sincronizza i file per tutti i progetti.

Quando esegui repo sync, si verifica quanto segue:

  • Se il progetto non è mai stato sincronizzato, repo sync equivale a git clone: tutti i rami nel repository remoto vengono copiati nella directory del progetto locale.

  • Se il progetto è già stato sincronizzato, repo sync equivale a:

    git remote update
    git rebase origin/branch
    

    Dove branch è il ramo estratto corrente nella directory del progetto locale. Se il ramo locale non monitora un ramo nel repository remoto, non viene eseguita alcuna sincronizzazione per il progetto.

Dopo l'esecuzione riuscita di repo sync, il codice nei progetti specificati è aggiornato e sincronizzato con il codice nel repository remoto.

Opzioni chiave:

  • -c: recupera dal server solo il ramo manifest corrente.
  • -d: riporta i progetti specificati alla revisione del manifest. Questa opzione è utile se il progetto si trova in un ramo di argomenti, ma è necessaria temporaneamente la revisione del manifest.
  • -f: Continua a sincronizzare gli altri progetti anche se la sincronizzazione di un progetto non va a buon fine.
  • -j threadcount: dividi 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 prima nproc --all.
  • -q: esegui in modalità silenziosa eliminando i messaggi di stato.
  • -s: sincronizza con una build funzionante come specificato dall'elemento manifest-server nel manifest corrente.

Per ulteriori opzioni, esegui repo help sync.

caricare

repo upload [project-list]

Carica le modifiche sul server di revisione. Per i progetti specificati, Repo confronta i rami locali con i rami remoti aggiornati durante l'ultima sincronizzazione di Repo. Repo ti chiede di selezionare uno o più rami che non sono stati caricati per la revisione.

Tutti i commit sui rami selezionati vengono quindi trasmessi a Gerrit tramite una connessione HTTPS. Devi configurare una password HTTPS per attivare l'autorizzazione di caricamento. Per generare una nuova coppia nome utente/password da utilizzare tramite HTTPS, visita il generatore di password.

Quando Gerrit riceve i dati dell'oggetto sul suo server, trasforma ogni commit in una modifica in modo che i revisori possano commentare un commit specifico. Per combinare diversi commit del checkpoint in un unico commit, utilizza git rebase -i prima di eseguire il caricamento.

Se esegui repo upload senza argomenti, la ricerca viene eseguita in tutti i progetti per individuare le modifiche da caricare.

Per modificare le modifiche dopo il caricamento, utilizza uno strumento come git rebase -i o git commit --amend per aggiornare i commit locali. Una volta completate le modifiche:

  • Verifica che il ramo aggiornato sia il ramo estratto corrente.
  • Utilizza repo upload --replace PROJECT per aprire l'editor di corrispondenza delle modifiche.
  • Per ogni commit della serie, inserisci l'ID modifica Gerrit tra parentesi:

    # Replacing from branch foo
    [ 3021 ] 35f2596c Refactor part of GetUploadableBranches to lookup 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 set di patch aggiuntivo.

Se vuoi caricare solo il ramo Git attualmente estratto, utilizza il flag --current-branch (o --cbr in breve).

Per le modifiche correlate, è utile mantenere tutte le CL nello stesso argomento. Puoi aggiungere un nome dell'argomento durante il caricamento con --topic=TOPIC. In alternativa, passa -t per impostare il nome dell'argomento uguale al nome della filiale locale.

diff

repo diff [project-list]

Mostra le modifiche in sospeso tra il commit e l'albero di lavoro utilizzando git diff.

download

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 modifica 23823 nella tua directory platform/build:

repo download platform/build 23823

L'esecuzione di repo sync rimuove tutti i commit recuperati con repo download. In alternativa, puoi estrarre il ramo 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 del manifest, tradotto in un ramo 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 del manifest, esattamente come scritto nel manifest.

Opzioni:

  • -c: comando e argomenti da eseguire. Il comando viene valutato tramite /bin/sh e tutti gli argomenti successivi vengono passati come parametri posizionali della shell.
  • -p: Mostra le intestazioni del progetto prima dell'output del comando specificato. Ciò si ottiene associando le pipe ai flussi stdin, stdout e sterr del comando e convogliando tutto l'output in 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.

partenza

repo start branch-name [project-list]

Inizia un nuovo ramo 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 conosci, valuta la possibilità di utilizzare il nome default.

L'argomento project-list specifica i progetti che partecipano a questo ramo dell'argomento.

status

repo status [project-list]

Confronta l'albero di lavoro con l'area di gestione temporanea (indice) e il commit più recente su questo ramo (HEAD) in ogni progetto specificato. Mostra una riga di riepilogo per ogni file in cui è presente una differenza tra questi tre stati.

Per visualizzare lo stato solo del ramo 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 in che modo l'area di staging differisce dall'ultimo stato di commit.

Lettera Significato Descrizione
- Nessuna influenza Uguale in HEAD e nell'indice
A Aggiunta Non presente nell'elemento HEAD, presente nell'indice
M Data di modifica In HEAD, modificato nell'indice
D Eliminati Nell'elemento HEAD, non nell'indice
R Rinominato Non presente nell'elemento HEAD, percorso modificato nell'indice
C Contenuti copiati Non presente in HEAD, copiato da un altro elemento nell'indice
T Modalità modificata Stessi contenuti in HEAD e indice, modalità modificata
U Annullata unione Conflitto tra HEAD e indice; è necessaria la risoluzione

Nella seconda colonna, una lettera minuscola indica in che modo la directory di lavoro differisce dall'indice.

Lettera Significato Descrizione
- Nuovo/sconosciuto Non presente nell'indice, nell'albero di lavoro
m Data di modifica Nell'indice, nell'albero di lavoro, modificato
g Eliminati Nell'indice, non nell'albero di lavoro

Gestire gli errori del repository

git commit -a # Commit local changes first so they aren't lost.
repo start branch-name # Start the branch
git reset --hard HEAD@{1} # And reset the branch so that it matches the commit before repo start
repo 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 il recupero, puoi controllare l'ID commit, avviare un nuovo ramo e poi unirlo.

Struttura del repository Git

Per Android, i repository Git (progetti) non sono nidificati. Ogni progetto è associato a una directory specifica nella struttura di origine e tutte le sottodirectory e i file in quella directory fanno parte dello stesso progetto. Evita di utilizzare la funzionalità git submodule di Repo per lo sviluppo Android.