Explorar o controle do código-fonte e o controle de versão
O uso do controle de origem e versão é uma prática fundamental do DevOps. Também é um pré-requisito para práticas como integração contínua e infraestrutura como código, que são cruciais para atingir todo o potencial de DevOps. A organização em nosso cenário de exemplo deve examinar sua estratégia de desenvolvimento de software colaborativa atual e fazer a transição para um modelo de controle de versão distribuída, como o Git, especialmente considerando seus planos de usar o GitHub para seu gerenciamento de ciclo de vida de software. Isso, no entanto, requer uma compreensão sólida dos princípios de controle da versão e do código-fonte e seus benefícios, que abordaremos aqui.
Controle do código-fonte e controle de versão
Os termos controle do código-fonte e controle de versão geralmente são usados de forma intercambiável e, em muitos contextos, referem-se ao mesmo conceito. Em geral, ambos são associados à prática de gerenciar alterações no código em um ambiente de desenvolvimento compartilhado. No entanto, você pode encontrar cenários mais nuançados em que o significado deles é ligeiramente diferente. Nesses cenários, controle do código-fonte designa um sistema que gerencia alterações em arquivos de código-fonte enquanto controle de versão inclui o gerenciamento de alterações de qualquer tipo de arquivo para fins que vão além do código-fonte sozinho. Daqui para frente, por uma questão de consistência, usaremos o termo controle de versão para representar repositórios de software colaborativos baseados em Git disponíveis no GitHub e no Azure DevOps.
Quais são os benefícios do controle de versão?
O controle de versão mantém o controle de alterações em arquivos dentro de seu escopo de gerenciamento. Isso oferece uma ampla gama de benefícios:
Histórico e controle de versão: você tem a capacidade de examinar o histórico de alterações em qualquer arquivo, incluindo a capacidade de determinar quando cada alteração individual ocorreu e qual era o escopo. Isso também fornece rastreabilidade, normalmente associando cada conjunto de alterações a um identificador exclusivo.
Reversão e recuperação: Se houver um erro ou um problema, você pode facilmente reverter as alterações para recuperar a versão conhecida e funcional do arquivo afetado.
Ramificação e mesclagem: Se você precisar estender a funcionalidade do código atual adicionando outro recurso ou corrigir um bug recém-descoberto, poderá criar um chamado branch, que permite que você trabalhe de forma independente na base de código existente. O novo branch é inicialmente idêntico ao branch de principal que hospeda o código atual. Depois de concluir as alterações, mescle o novo branch com o main branch. Embora isso ainda possa levar a conflitos (se outro desenvolvedor decidir modificar o mesmo conjunto de arquivos enquanto isso por meio de outro branch), seu escopo será limitado e eles normalmente poderão ser facilmente identificados e resolvidos.
Colaboração e desenvolvimento paralelo:Provisões de resolução de conflitos, complementadas pela ramificação e mesclagem, facilitam o trabalho de vários desenvolvedores na mesma base de código, o que aumenta a eficiência. Com sistemas de controle distribuídos, como o Git, é até possível criar código em um modo desconectado. A colaboração também envolve revisões mútuas em pares de pull requests, promovendo o compartilhamento de conhecimento e a transparência.
Automação: o controle de versão é uma parte essencial da integração contínua e implantações automatizadas. O processo de build e teste automatizados pode ser acionado sempre que uma nova versão do código é enviada para o repositório de controle de versão ou mesclada com o ramo principal. Diferentes versões do código podem ser implantadas em ambientes diferentes.