Assim como o código-fonte, a estrutura do versionamento de software necessita de cuidados, visando melhor compreensão e manutenção. O conteúdo aqui presente inicia uma sequência de artigos que dialogam sobre como tornar a linha de desenvolvimento do Git mais amigável, onde cada ponto dado na linha do tempo é valoroso.

Índice

  1. Alfaiate Git: Branches
  2. Alfaiate Git: Merges

Linha do Tempo

Um sistema de controle de versões é um software que habilita um time de desenvolvedores de software a trabalharem em grupo, armazenando a história de seu trabalho (SINK, 2011). A história deste trabalho é representada como uma sequência de passos, descrevendo, basicamente, como o código-fonte do software foi modificado em determinado período, caracterizando, assim, uma linha do tempo.

Exemplo de Linha do Tempo
Fonte: Elaborado pelo Autor

A imagem anterior apresenta uma captura de tela parcial do Gitk, exibindo a linha do tempo entre as versões 1.4.0 e 1.4.1 do repositório desta página. Nota-se que, para cada alteração efetuada, existe um nó na linha do tempo.

Assim como um alfaiate, esta linha pode ser “costurada”, onde cada nó é cosido de forma organizada, propondo-se obter o melhor produto final.

Branches

O principal recurso que diferencia o Git de outros sistemas de controle de versões é o seu modelo de branches independentes (GIT, 2017). Segundo Chacon e Straub (2014), a criação de um branch informa ao Git o afastamento de uma linha do tempo qualquer, separando as novas alterações que deverão ser aplicadas.

Um branch pode ser criado em qualquer ponto da linha do tempo e referencia um nó. Porém, quando os branches são criados sem a padronização de nós base, pode-se confundir o leitor durante a análise da linha do tempo.

Exemplo de Linha do Tempo
Fonte: Elaborado pelo Autor

A figura anterior demonstra uma captura de tela parcial do Gitk para o repositório oficial do Zend DB. Sabe-se que o Git possui uma ótima resolução de integração de afastamento de linhas, porém a leitura deste repositório em busca de informações, torna-se complicada quando não há padronização de um nó raiz durante a criação de branches.

Nós Primários

Para tanto, padroniza-se dois branches primários, master e develop, inicialmente idênticos. A criação de branches deve ser feita a partir do branch master, tendo-o como nó base da nova linha de tempo afastada.

O código abaixo, escrito em Bash, cria um repositório Git e adiciona um arquivo vazio. Após, cria o branch develop a partir do branch master, tornando-os idênticos.

$ git init example && cd example
$ touch EXAMPLE
$ git add EXAMPLE && git commit -m'Inicializa o repositório'
$ git branch develop master

Nós Secundários

A padronização de nomenclatura de nós secundários deve ser efetuada para possibilitar a fácil compreensão de futuras integrações de branches na linha do tempo base.

Por exemplo, esta página utiliza o GitHub como serviço de repositório Git. Para cada artigo necessário, adiciona-se uma nova issue e, após, um novo branch com o número da issue. Assim, sabe-se por qual necessidade criou-se um novo branch e quando ele foi integrado na linha do tempo principal.

Portanto, tem-se como padrão de nomenclatura de branches secundários a expressão regular /^issue-[1-9][0-9]*$/, onde todos os branches possuem o prefixo issue- e o número da issue como sufixo. Os nomes issue-1, issue-22 e issue-314 são exemplos que casam com essa expressão regular.

Branches

Após a criação dos nós primários, o código abaixo cria três novos branches para nós secundários a partir do nó apontado pelo branch master, adicionando um conteúdo qualquer ao arquivo vazio.

$ git checkout master -b issue-1
$ echo 'Issue 1: Única Entrada' >> EXAMPLE
$ git add EXAMPLE && git commit -m'Adiciona conteúdo de exemplo'

$ git checkout master -b issue-2
$ echo 'Issue 2: Primeira Linha' >> EXAMPLE
$ git add EXAMPLE && git commit -m'Adiciona a primeira linha'
$ echo 'Issue 2: Finalizando' >> EXAMPLE
$ git add EXAMPLE && git commit -m'Inclui novos conteúdos'

$ git checkout master -b issue-3
$ echo 'Issue 3: Começo do Documento' >> EXAMPLE
$ git add EXAMPLE && git commit -m'Começa um novo documento'
$ echo 'Issue 3: Teste de Conteúdo' >> EXAMPLE
$ git add EXAMPLE && git commit -m'Adiciona conteúdo de teste'
$ echo 'Issue 3: END' >> EXAMPLE
$ git add EXAMPLE && git commit -m'Fecha documento'

A figura abaixo apresenta a captura parcial do Gitk com a linha do tempo para todos os branches criados. Nota-se que todos os branches possuem o mesmo nó base e a leitura da linha do tempo de cada branch pode ser analisada com maior facilidade.

Exemplo de Linha do Tempo com Padrões
Fonte: Elaborado pelo Autor

O próximo artigo desta sequência tratará da integração de branches na linha do tempo original através do comando merge, fazendo com que o repositório de exemplo se torne semelhante ao apresentado na primeira figura deste artigo.

Referências

  • SINK, E. Version Control by Example. Pyrenean Gold Press (2011).
  • GIT. About Git. Disponível em: https://git-scm.com/about. Acesso em: 25 de fev. de 2017.
  • CHACON, S.; STRAUB, B. Pro Git. Apress (2014).

Veja Mais