Referência do comando do Repo

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

O uso do Repo assume o seguinte 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

Esta página apenas destaca as opções principais. Consulte a ajuda da linha de comando para ver detalhes completos. Quando o repo estiver instalado, você poderá encontrar a documentação mais recente, começando com um resumo de todos os comandos, executando:

repo help

Veja informações detalhadas sobre qualquer comando executando isto em uma árvore do Repo:

repo help command

O comando a seguir, por exemplo, produz uma descrição e uma lista de opções para o argumento init do Repo, que inicializa o Repo no diretório atual. Consulte init para ver mais detalhes.

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. Isso cria um diretório .repo/ com repositórios 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 recuperar 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 é, um manifest-branch específico.

Observação: para todos os comandos Repo restantes, o diretório de trabalho atual precisa ser o diretório pai de .repo/ ou um subdiretório do diretório pai.

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 Git. Se você executa repo sync sem nenhum argumento, ele sincroniza 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 são copiadas para o 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 ocorrerá no projeto.

  • Se a operação de realocação do Git resultar em conflitos de mesclagem, use os comandos normais do Git (por exemplo, git rebase --continue) para resolver os conflitos.

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.

Estas são as principais opções. Consulte repo help sync para ver mais:

  • -c: busca apenas o branch atual do manifesto no servidor.

  • -d: alterna os projetos especificados de volta para a revisão de manifesto. É útil se o projeto está em uma ramificação de tópicos no momento, mas a revisão de manifesto é temporariamente necessária.

  • -f: prossegue com a sincronização de outros projetos mesmo que a sincronização de um projeto falhe.

  • -jthreadcount: 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 ver 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.

upload

repo upload [project-list]

Para os projetos especificados, o repo compara os branches locais com os branches remotos atualizados durante a última sincronização do repo. O repo solicita que você selecione um ou mais branches que não foram enviados para análise.

Depois disso, todas as confirmações dos branches selecionados são transmitidas para o Gerrit por uma conexão HTTPS. É preciso configurar uma senha HTTPS para ativar a autorização de upload. Visite o Gerador de senhas para gerar um novo par de nome de usuário/senha para usar em HTTPS.

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

Se você executar repo upload sem nenhum argumento, ele 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 suas confirmações locais. Depois que suas edições forem concluídas:

  • verifique se o branch atualizado é o atual que foi recebido;
  • use repo upload --replace PROJECT para abrir o editor de correspondência de mudanças;
  • para cada confirmação na série, insira o ID de mudança 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 replacments
    # 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 alterações terão um conjunto de patches adicional.

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

diff

repo diff [project-list]

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

download

repo download target change

Faz o download da alteração 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 de plataforma/build:

repo download platform/build 23823

A execução do repo sync remove quaisquer confirmações recuperadas com o repo download. Ou você pode receber a ramificação remota com git checkout m/master.

Observação: como há atrasos de replicação para todos os servidores do mundo, há uma pequena demora no espelhamento entre o instante em que uma mudança fica visível na Web no Gerrit e aquele em que o repo download consegue encontrar essa mudança para todos os usuários.

forall

repo forall [project-list] -c command

Executa o comando shell fornecido em cada projeto. As seguintes variáveis de ambiente adicionais 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, traduzido para uma ramificação de rastreamento local. Use-o se você precisar transmitir a revisão de manifesto para um comando 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 meio de /bin/sh e qualquer argumento depois dele é passado 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 é exibido 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.

Observação: um ponto ( . ) é um atalho para o projeto no diretório de trabalho atual.

status

repo status [project-list]

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

Para ver o status apenas para a 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 confirmado.

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

Como lidar com erros de repositório

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 da confirmação, inicie uma nova ramificação e a mescle.