Fluxo de trabalho para controle de origem

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:

  1. Iniciar um novo branch de tópico usando repo start.
  2. Editar os arquivos.
  3. Preparar as mudanças usando git add.
  4. Confirmar as mudanças usando git commit.
  5. 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:

  1. Veja os arquivos cuja mesclagem foi cancelada (código de status = U).
  2. Edite as regiões de conflito conforme necessário.
  3. 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
    
  4. 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.