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
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 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 é, 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 aogit 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.