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 emhttps://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 aogit 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 executenproc --all
.-q
: executa silenciosamente suprimindo mensagens de status.-s
: sincroniza para um build válido conhecido, conforme especificado pelo elementomanifest-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 o upload apenas da ramificação do Git recebida no momento, use a flag
--current-branch
(ou a abreviação --cbr
).
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.