Trabalhar com código Android requer o uso do Git (um sistema de controle de versão de código aberto) e do repo (uma ferramenta de gestão de repositório criada pelo Google e executada sobre o Git). Consulte Ferramentas de controle de origem para saber mais sobre a relação entre o Repo e o Git e encontrar links para a documentação de suporte de cada ferramenta.
Fluxo
O desenvolvimento do Android envolve o seguinte fluxo de trabalho básico:
- Iniciar um novo branch de tópico usando
repo start
. - Editar os arquivos.
- Preparar as mudanças usando
git add
. - Confirmar as mudanças usando
git commit
. - Fazer upload das mudanças para o servidor de revisão usando
repo upload
.
Tarefas
Trabalhar com o Git e o repo nos repositórios de código do Android envolve a execução das seguintes tarefas comuns:
Comando | Descrição |
---|---|
repo init |
Inicializa um novo cliente. |
repo sync |
Sincroniza o cliente com os repositórios. |
repo start |
Inicia um novo branch. |
repo status |
Mostra o status do branch atual. |
repo upload |
Faz upload das alterações para o servidor de revisão. |
git add |
Prepara os arquivos. |
git commit |
Confirma os arquivos preparados. |
git branch |
Mostra os branches atuais. |
git branch [branch] |
Cria um novo branch de tópico. |
git checkout [branch] |
Muda o HEAD para o branch especificado. |
git merge [branch] |
Mescla [branch] com o branch atual. |
git diff |
Mostra a diferença entre mudanças não preparadas. |
git diff --cached |
Mostra a diferença entre alterações preparadas. |
git log |
Mostra o histórico do branch atual. |
git log m/[codeline].. |
Mostra as confirmações que não são enviadas. |
Para ver informações sobre como usar o Repo para fazer o download da origem, consulte Como fazer o download da origem e Referência do comando do Repo.
Como sincronizar clientes
Para sincronizar os arquivos para todos os projetos disponíveis:
repo sync
Para sincronizar os arquivos para os projetos selecionados:
repo sync PROJECT0 PROJECT1 ... PROJECTN
Como criar branches de tópicos
Inicie uma ramificação de tópico no seu ambiente de trabalho local sempre que começar a fazer uma mudança, como quando você começa a trabalhar em um bug ou em um novo recurso. Uma ramificação de tópico não é uma cópia dos arquivos originais, mas sim um ponteiro para uma confirmação específica, o que torna a criação de ramificações locais e a alternância entre elas uma operação leve. Usando ramificações, é possível isolar um único aspecto do seu trabalho dos outros. Para ver um artigo interessante sobre o uso de ramificações de tópicos, consulte Como separar ramificações de tópicos (link em inglês).
Para iniciar uma ramificação de tópico usando o Repo, navegue até o projeto e execute o seguinte:
repo start BRANCH_NAME .
O ponto final ( .
) representa o projeto no diretório de trabalho
atual.
Para verificar se a nova ramificação foi criada, use o seguinte:
repo status .
Como usar branches de tópicos
Para atribuir o branch a um projeto específico:
repo start BRANCH_NAME PROJECT_NAME
Para ver uma lista de todos os projetos, consulte android.googlesource.com. Caso você já tenha navegado para o diretório do projeto, use apenas um ponto para representar o projeto atual.
Para mudar para outra ramificação no seu ambiente de trabalho local:
git checkout BRANCH_NAME
Para ver uma lista das ramificações existentes:
git branch
ou
repo branches
Os dois comandos retornam a lista das ramificações existentes com o nome da atual precedido por um asterisco (*).
Como preparar arquivos
Por padrão, o Git percebe, mas não monitora, as alterações feitas em um projeto. Para dizer ao Git para preservar suas alterações, você precisa marcar ou preparar essas mudanças para inclusão em uma confirmação.
Para preparar alterações:
git add
Esse comando aceita argumentos para arquivos ou diretórios dentro do diretório do projeto. Apesar do nome, git add
não tem como única função adicionar arquivos ao repositório Git. Ele também pode ser usado para preparar modificações e exclusões de arquivos.
Como ver o status do cliente
Para listar o estado dos arquivos:
repo status
Para ver as edições não confirmadas (edições locais que não estão marcadas para confirmação):
repo diff
Para ver as edições confirmadas (edições locais marcadas para confirmação), verifique se você está no diretório do projeto e, em seguida, execute git
diff
com o argumento cached
:
cd ~/WORKING_DIRECTORY/PROJECT
git diff --cached
Como confirmar mudanças
Uma confirmação é a unidade básica do controle de revisão no Git e consiste em um snapshot da estrutura do diretório e no conteúdo do arquivo para todo o projeto. Use este comando para criar uma confirmação no Git:
git commit
Quando for solicitada uma mensagem de confirmação, forneça uma mensagem breve e útil para as mudanças enviadas ao AOSP. Se você não adicionar uma mensagem, haverá uma falha na confirmação.
Como fazer upload das mudanças para o Gerrit
Atualize para a revisão mais recente e, em seguida, faça upload da mudança:
repo sync
repo upload
Esses comandos retornam uma lista das mudanças que você confirmou e solicitam que você selecione as ramificações que serão enviadas para o servidor de revisão. Se houver apenas uma ramificação, você verá uma solicitação y/n
simples.
Como resolver conflitos de sincronização
Se o comando repo sync
retornar conflitos de sincronização:
- Veja os arquivos cuja mesclagem foi cancelada (código de status = U).
- Edite as regiões de conflito conforme necessário.
- Mude para o diretório do projeto relevante. Adicione e confirme os arquivos afetados e realoque as alterações:
git add .
git commit
git rebase --continue
- Após a conclusão da realocação, inicie toda a sincronização novamente:
repo sync PROJECT0 PROJECT1 ... PROJECTN
Como fazer a limpeza de clientes
Depois de mesclar as mudanças no Gerrit, atualize seu diretório de trabalho local e use repo prune
para remover com segurança as ramificações de tópico desatualizadas:
repo sync
repo prune
Como excluir clientes
Como todas as informações de estado são armazenadas no seu cliente, você só precisa excluir o diretório do seu sistema de arquivos:
rm -rf WORKING_DIRECTORY
A exclusão de um cliente exclui permanentemente as mudanças que você não enviou para análise.