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 gerenciamento de repositório criada pelo Google que roda sobre o Git). Consulte Ferramentas de controle de origem para obter uma explicação sobre o relacionamento entre Repo e Git e links para documentação de suporte para cada ferramenta.

Fluxo

O desenvolvimento do Android envolve o seguinte fluxo de trabalho básico:

  1. Inicie uma nova ramificação de tópico usando repo start .
  2. Edite os arquivos.
  3. Mudanças de estágio usando git add .
  4. Confirme as alterações usando git commit .
  5. Faça upload das alterações para o servidor de revisão usando repo upload .

Tarefas

Trabalhar com Git e 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 uma nova ramificação.
repo status Mostra o status da ramificação atual.
repo upload Carrega alterações para o servidor de revisão.
git add Prepara os arquivos.
git commit Confirma os arquivos preparados.
git branch Mostra as ramificações atuais.
git branch [branch] Cria uma nova ramificação de tópico.
git checkout [branch] Alterna HEAD para a ramificação especificada.
git merge [branch] Mescla [branch] na ramificação atual.
git diff Mostra a comparação das alterações não preparadas.
git diff --cached Mostra diferenças entre as alterações preparadas.
git log Mostra o histórico da filial atual.
git log m/[codeline].. Mostra os commits que não são enviados.

Para obter informações sobre como usar o Repo para baixar o código-fonte, consulte Fazendo download do código-fonte e Referência de comando do Repo .

Sincronizando clientes

Para sincronizar os arquivos de todos os projetos disponíveis:

repo sync

Para sincronizar os arquivos dos projetos selecionados:

repo sync PROJECT0 PROJECT1 ... PROJECTN

Criando ramificações de tópico

Inicie uma ramificação de tópico em seu ambiente de trabalho local sempre que iniciar 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; é um ponteiro para um commit específico, o que torna a criação de ramificações locais e a alternância entre elas uma operação leve. Ao usar ramificações, você pode isolar um aspecto do seu trabalho dos outros. Para obter um artigo interessante sobre o uso de ramificações de tópicos, consulte Separando ramificações de tópicos .

Para iniciar uma ramificação de tópico usando 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 a nova ramificação foi criada:

repo status .

Usando ramificações de tópico

Para atribuir a ramificação a um projeto específico:

repo start BRANCH_NAME PROJECT_NAME

Para obter uma lista de todos os projetos, consulte android.googlesource.com . Se você já navegou até o diretório do projeto, basta usar um ponto final para representar o projeto atual.

Para mudar para outra filial no seu ambiente de trabalho local:

git checkout BRANCH_NAME

Para visualizar uma lista de filiais existentes:

git branch

ou

repo branches

Ambos os comandos retornam a lista de ramificações existentes com o nome da ramificação atual precedido por um asterisco (*).

Preparando arquivos

Por padrão, o Git percebe, mas não rastreia, as alterações feitas em um projeto. Para dizer ao Git para preservar suas alterações, você deve marcar ou preparar essas alterações para inclusão em um commit.

Para preparar mudanças:

git add

Este comando aceita argumentos para arquivos ou diretórios dentro do diretório do projeto. Apesar do nome, git add não apenas adiciona arquivos ao repositório Git; ele também pode ser usado para preparar modificações e exclusões de arquivos.

Visualizando o status do cliente

Para listar o estado dos arquivos:

repo status

Para visualizar edições não confirmadas (edições locais que não estão marcadas para confirmação):

repo diff

Para visualizar as edições confirmadas (edições localizadas marcadas para confirmação), verifique se você está no diretório do projeto e execute git diff com o argumento cached :

cd ~/WORKING_DIRECTORY/PROJECT
git diff --cached

Confirmando alterações

Um commit é a unidade básica de controle de revisão no Git e consiste em um instantâneo da estrutura de diretórios e do conteúdo do arquivo de todo o projeto. Use este comando para criar um commit no Git:

git commit

Quando for solicitada uma mensagem de commit, forneça uma mensagem curta (mas útil) para as alterações enviadas ao AOSP. Se você não adicionar uma mensagem de commit, o commit falhará.

Fazendo upload de alterações para Gerrit

Atualize para a revisão mais recente e faça upload da alteração:

repo sync
repo upload

Esses comandos retornam uma lista de alterações que você confirmou e solicita que você selecione as ramificações para fazer upload para o servidor de revisão. Se houver apenas uma ramificação, você verá um prompt y/n simples.

Resolver conflitos de sincronização

Se o comando repo sync retornar conflitos de sincronização:

  1. Visualize os arquivos que não foram mesclados (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, em seguida, rebase as alterações:
    git add .
    git commit
    git rebase --continue
    
  4. Após a conclusão do rebase, inicie toda a sincronização novamente:
    repo sync PROJECT0 PROJECT1 ... PROJECTN
    

Limpando clientes

Depois de mesclar as alterações no Gerrit, atualize seu diretório de trabalho local e use repo prune para remover com segurança ramificações de tópicos obsoletos:

repo sync
repo prune

Excluindo 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

Excluir um cliente exclui permanentemente todas as alterações que você não carregou para revisão.