Referência do comando do repo

O Repo complementa o Git simplificando o trabalho em vários repositórios. Para uma explicação da relação entre o Repo e o Git, consulte Ferramentas de controle de origem. Para saber mais sobre o Repo, consulte o README do Repo (em inglês).

O uso do Repo segue este formato:

repo command options

Os elementos opcionais são mostrados entre colchetes [ ]. Por exemplo, muitos comandos usam project-list como um argumento. Você pode especificar project-list como uma lista de nomes ou uma lista de caminhos para os diretórios de origem locais dos projetos:

repo sync [project0 project1 ... projectn]
repo sync [/path/to/project0 ... /path/to/projectn]

help

repo help

Fornece ajuda sobre o comando repo. Mostra informações detalhadas sobre um comando do Repo especificando um comando como opção:

repo help command

Por exemplo, o comando abaixo produz uma descrição e uma lista de opções para o comando init:

repo help init

Ou, para ver apenas a lista de opções disponíveis, execute:

repo command --help

Exemplo:

repo init --help

init

repo init -u url [options]

Instala o Repo no diretório atual. Esse comando cria um diretório .repo/ com repositórios do Git para o código-fonte do Repo e os arquivos padrão de manifesto do Android.

Opções:

  • -u: especifica um URL a partir do qual é possível extrair um repositório de manifesto. O manifesto comum é encontrado em https://android.googlesource.com/platform/manifest.

  • -m: seleciona um arquivo de manifesto no repositório. Se nenhum nome de manifesto for selecionado, o padrão será default.xml.

  • -b: especifica uma revisão, isto é, uma manifest-branch específica.

sync

repo sync [project-list]

Faz o download de novas mudanças e atualiza os arquivos de trabalho no ambiente local, essencialmente realizando git fetch em todos os repositórios do Git. Se você executar repo sync sem nenhum argumento, ele sincronizará os arquivos para todos os projetos.

Quando você executa repo sync, acontece o seguinte:

  • Se o projeto nunca tiver sido sincronizado, repo sync será equivalente ao git clone. Todas as ramificações do repositório remoto serão copiadas no diretório do projeto local.

  • Se o projeto tiver sido sincronizado antes, repo sync será equivalente a:

    git remote update
    git rebase origin/branch
    

    Em que branch é a ramificação recebida no momento no diretório do projeto local. Se a ramificação local não estiver rastreando uma ramificação no repositório remoto, nenhuma sincronização vai ocorrer no projeto.

Após uma execução bem-sucedida de repo sync, o código será atualizado nos projetos especificados e sincronizado com o código no repositório remoto.

Opções importantes:

  • -c: busca apenas a ramificação atual do manifesto no servidor.
  • -d: alterna os projetos especificados de volta para a revisão de manifesto. Essa opção é útil se o projeto está em uma ramificação de tópicos, mas a revisão do manifesto é temporariamente necessária.
  • -f: prossegue com a sincronização de outros projetos mesmo que a sincronização de um projeto falhe.
  • threadcount: divide a sincronização entre as linhas de execução para que ela seja concluída mais rapidamente. A máquina não pode ser sobrecarregada, então deixe alguma CPU livre para outras tarefas. Para conferir o número de CPUs disponíveis, primeiro execute nproc --all.
  • -q: executa silenciosamente suprimindo mensagens de status.
  • -s: sincroniza para um build válido conhecido, conforme especificado pelo elemento manifest-server no manifesto atual.

Para mais opções, execute repo help sync.

upload

repo upload [project-list]

Faz upload das alterações para o servidor de revisão. Para os projetos especificados, o Repo compara as ramificações locais com as remotas atualizadas durante a última sincronização do Repo. O Repo solicita que você selecione uma ou mais ramificações que não foram enviadas para análise.

Depois disso, todos os commits das ramificações selecionadas são transmitidos para o Gerrit por uma conexão HTTPS. É preciso configurar uma senha HTTPS para ativar a autorização de upload. Para gerar um novo par de nome de usuário/senha para usar em HTTPS, visite o Gerador de senhas.

Quando o Gerrit recebe os dados do objeto no servidor, ele transforma cada commit em uma alteração para que os revisores possam comentar em cada uma delas. Para combinar vários commits de checkpoint em um único, use git rebase -i antes do upload.

Se você executar repo upload sem nenhum argumento, ele vai pesquisar todos os projetos em busca de mudanças no upload.

Para editar as mudanças após o upload, use uma ferramenta como git rebase -i ou git commit --amend para atualizar seus commits locais. Depois que suas edições forem concluídas:

  • Verifique se a ramificação atualizada é a atual que foi recebida.
  • Use repo upload --replace PROJECT para abrir o editor de correspondência de mudanças.
  • Para cada commit na série, insira o ID de alteração do Gerrit entre colchetes.

    # 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.
    

Depois que o upload for concluído, as mudanças terão um conjunto extra de patches.

Se você quiser fazer upload apenas da ramificação do Git recebida no momento, use a flag --current-branch (ou a abreviação --cbr).

Para mudanças relacionadas, é útil manter todos os CLs no mesmo tópico. Você pode adicionar um nome ao tópico durante o upload com --topic=TOPIC. Também pode transmitir -t para que o nome do tópico seja o mesmo nome da ramificação local.

diff

repo diff [project-list]

Mostra mudanças pendentes entre o commit e a árvore de trabalho usando o git diff.

download

repo download target change

Faz o download da mudança especificada no sistema de revisão e a disponibiliza no diretório de trabalho local do seu projeto.

Por exemplo, para fazer o download da mudança 23823 para seu diretório platform/build:

repo download platform/build 23823

A execução do repo sync remove todos os commits extraídos com repo download. Ou você pode receber a ramificação remota com git checkout m/main.

forall

repo forall [project-list] -c command

Executa o comando shell fornecido em cada projeto. As variáveis de ambiente extras abaixo são disponibilizadas pelo repo forall:

  • REPO_PROJECT é definido como o nome exclusivo do projeto.
  • REPO_PATH é o caminho relativo para a raiz do cliente.
  • REPO_REMOTE é o nome do sistema remoto do manifesto.
  • REPO_LREV é o nome da revisão do manifesto, convertido em uma ramificação de rastreamento local. Use essa variável se você precisar transmitir a revisão de manifesto para um comando do Git executado localmente.
  • REPO_RREV é o nome da revisão do manifesto, exatamente como está escrito nele.

Opções:

  • -c: comando e argumentos a serem executados. O comando é avaliado por /bin/sh e qualquer argumento depois dele é transmitido como parâmetro de posicionamento do shell.
  • -p: mostra os cabeçalhos do projeto antes da saída do comando especificado. Isso é possível com a vinculação de pipes aos streams stdin, stdout e sterr do comando e com o encadeamento de toda a saída para um stream contínuo, que é mostrado em uma sessão de uma única página.
  • -v: mostra as mensagens que o comando escreve para stderr.

prune

repo prune [project-list]

Descarta (exclui) tópicos que já estão mesclados.

start

repo start branch-name [project-list]

Inicia um nova ramificação para desenvolvimento, começando pela revisão especificada no manifesto.

O argumento BRANCH_NAME fornece uma breve descrição da mudança que você está tentando fazer nos projetos. Se você não sabe, considere usar o nome default.

O argumento project-list especifica quais projetos participam dessa ramificação de tópico.

status

repo status [project-list]

Compara a árvore de trabalho à área de preparo (índice) e ao commit mais recente nessa ramificação (HEAD) em cada projeto especificado. Mostra uma linha de resumo para cada arquivo em que há uma diferença entre esses três estados.

Para verificar o status apenas da ramificação atual, execute repo status .. As informações de status são listadas por projeto. Para cada arquivo no projeto, é usado um código de duas letras.

Na primeira coluna, uma letra maiúscula indica como a área de organização difere do último estado com commit.

Letra Significado Descrição
- Sem alterações O mesmo no HEAD e no índice
A Adicionado Ausente no HEAD, mas presente no índice
M Modificado Presente no HEAD, modificado no índice
D Excluído Presente no HEAD, mas não no índice
R Renomeado Ausente no HEAD, caminho alterado no índice
C Copiado Ausente no HEAD, copiado de outro no índice
T Modo alterado Mesmo conteúdo no HEAD e no índice, modo alterado
U Não mesclado Conflito entre o HEAD e o índice, resolução necessária

Na segunda coluna, uma letra minúscula indica como o diretório de trabalho é diferente do índice.

Letra Significado Descrição
- Novo/desconhecido Ausente no índice, presente na árvore de trabalho
m Modificado Presente no índice e na árvore de trabalho, modificado
d Excluído Presente no índice, mas não na árvore de trabalho

Processar erros de repo

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 .

O erro repo: error: no branches ready for upload ocorre quando o comando repo start não é executado no início da sessão. Para recuperar, confira o ID do commit, inicie uma nova ramificação e faça a fusão.