Fluxo de trabalho de 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 para 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 um branch de tópico no seu ambiente de trabalho local sempre que começar uma mudança, como quando você começar a trabalhar em um bug ou em um novo recurso. Um branch 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 branches locais e a alternância entre eles uma operação leve. Usando branches, é possível isolar um aspecto do seu trabalho dos outros. Para ver um artigo interessante sobre o uso de branches de tópicos, consulte Como separar branches de tópicos (link em inglês).

Para iniciar um branch de tópico usando o Repo, navegue até o projeto e execute:

    repo start BRANCH_NAME .
    

O ponto final (.) representa o projeto no diretório de trabalho atual.

Para verificar se o novo branch foi criado:

    repo status .
    

Como usar branches de tópicos

Para atribuir o branch a um projeto específico:

    repo start BRANCH_NAME PROJECT_NAME
    

Para uma lista de todos os projetos, consulte android.googlesource.com. Se você já tiver navegado para o diretório do projeto, use apenas um ponto para representar o projeto atual.

Para mudar para outro branch no seu ambiente de trabalho local:

    git checkout BRANCH_NAME
    

Para ver uma lista de branches existentes:

    git branch
    

ou

    repo branches
    

Os dois comandos retornam a lista de branches existentes com o nome do branch atual precedido por um asterisco (*).

Como preparar arquivos

Por padrão, o Git percebe, mas não monitora, as mudanças feitas em um projeto. Para dizer ao Git para preservar suas mudanças, você precisa marcar ou preparar essas mudanças para inclusão em uma confirmação.

Para preparar mudanças:

    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, mas também 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 instantâneo da estrutura do diretório e no conteúdo do arquivo para todo o projeto. Para criar uma confirmação no Git:

    git commit
    

Quando for solicitada uma mensagem de confirmação, forneça uma mensagem breve, mas útil, para as mudanças enviadas ao AOSP. Se você não adicionar uma mensagem de confirmação, ela será cancelada.

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 solicita que você selecione os branches que serão enviados para o servidor de revisão. Se houver apenas um branch, 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 mudanças:
        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 os branches de tópico desatualizados:

    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.