💡 Entendendo o Controle de Versão: E se o Git não existisse?
Hoje, experimentei uma profunda gratidão pelo Git.
Envolvida em meu projeto pessoal, onde dedico um pouco do meu tempo todos os dias, enfrentei o desafio de alternar entre dois computadores. Moro em São Paulo, e nos últimos dias, a cidade tem enfrentado chuvas intensas. Em meio a esse cenário, fiquei sem energia por dois dias consecutivos, tornando meu computador de trabalho inoperável durante esse período.
Nesse momento, minha eterna gratidão pelo Git e pela "Carolina do passado" floresceu. Utilizando o Git, salvei todas as alterações, mesmo as incompletas, em uma branch separada no meu repositório. Essa prática permitiu-me transportar meu notebook para outro local e continuar trabalhando no mesmo projeto, mesmo durante a interrupção de energia.
E ai me bateu uma dúvida...
E se o Git não existisse?
A evolução do controle de versionamento é notável, contrastando com os dias em que dependíamos de atalhos como CTRL+Z para desfazer alterações ou de cópias de pastas para criar versões distintas do código.
Compartilhar essas versões era um desafio naquela época, pois conflitos poderiam surgir, resultando na perda de importantes alterações. Hoje, a evolução trouxe ferramentas incríveis, como a aba de "Linha do Tempo" no VSCode, proporcionando a capacidade de visualizar as diferenças entre as alterações e obter uma visão clara do estado atual do projeto.
Para solucionar os problemas, foram criados sistemas de versionamento de código, sendo um dos primeiros o Source Code Control System (SCCS), desenvolvido pela Bell Labs em 1972, e posteriormente, por outra empresa, o Git em 2005.
A distinção fundamental entre sistemas de versionamento centralizados e distribuídos é impressionante.
No Sistema Centralizado de Controle de Versão mantinha-se uma cópia principal do código em um servidor. As pessoas reservavam (faziam o checkout) desses arquivos para trabalhar localmente em seus próprios computadores. Durante esse período, os arquivos ficavam bloqueados para outros desenvolvedores, permitindo que apenas o usuário que os reservou fizesse edições até que fossem enviados de volta ao servidor (check-in) para atualizar as alterações.
Essa abordagem, embora evitasse conflitos, causava atrasos quando várias pessoas precisavam trabalhar no mesmo projeto ao mesmo tempo ou quando era necessário aplicar uma correção urgente, mas não se tinha certeza de quem estava trabalhando em determinado arquivo.
Já os sistemas distribuídos, como o Git, oferecem a cada desenvolvedor uma cópia completa do repositório em seu computador incluindo todo o histórico de alterações, permitindo a liberdade para trabalhar individualmente sem bloquear arquivos.
O Git, sendo como um álbum de fotos, captura cada alteração no projeto. Essas capturas, chamadas de "commits", registram não apenas o que mudou, mas também quem fez a mudança e quando. Essa capacidade permite que cada desenvolvedor trabalhe em seu próprio ritmo, compartilhando alterações quando estiver pronto. Sem se preocupar em interferir no trabalho dos outros.
A importância do Git se torna ainda mais evidente ao imaginar um mundo sem essa ferramenta. A colaboração em projetos de software seria caótica, presa a métodos arcaicos de compartilhamento de código. A ausência de um sistema descentralizado resultaria em conflitos constantes e perda de alterações importantes. Os benefícios do Git, como o rastreamento detalhado do histórico de alterações e a capacidade de criar ramificações, seriam inexistentes. Sem essas funcionalidades, entender o passado, corrigir bugs e implementar novos recursos seriam desafios hercúleos.
A eficiência do Git em fusões e resolução de conflitos é inigualável. Sem essa capacidade, os desenvolvedores perderiam tempo valioso resolvendo disputas manualmente, levando a prazos perdidos e projetos desordenados.
A comunidade open source, impulsionada pelo Git, é vital para o desenvolvimento moderno. Sem essa ferramenta, a colaboração global e o compartilhamento de conhecimento seriam prejudicados.
Em um mundo onde imprevistos como a falta de energia ou mudanças repentinas fazem parte do cotidiano, saber que o Git é mais do que uma ferramenta, é um aliado poderoso para enfrentar esses desafios, é reconfortante. Afinal, o código pode mudar, mas a história por trás de cada linha escrita permanece intacta.
Esta newsletter no linkedin é um convite para você, que também está nessa jornada de desenvolvimento. É um espaço onde compartilho não apenas experiências, mas também conhecimento, erros e conquistas.
O Git, criado por Linus Torvalds, superou seu propósito inicial de ser apenas uma ferramenta de controle de versão, transformando-se em uma das infraestruturas mais cruciais na engenharia de software e, por extensão, no mundo contemporâneo. Linus desenvolveu o Git especificamente para facilitar o desenvolvimento colaborativo do Linux. Isso foi decisivo para o sucesso do Linux sobre o BSD, que, apesar de ser de código aberto, era desenvolvido de forma fechada por um seleto grupo de colaboradores, com apenas os realeses sendo públicos. Em contraste, o Linux adotou um modelo de desenvolvimento verdadeiramente aberto e colaborativo, atraindo inicialmente dezenas, depois centenas, e agora milhares de colaboradores.
O domínio do Linux sobre o BSD não se deveu a superioridades técnicas, mas sim à filosofia distribuída que se materializou através do Git. Este, e não o Linux, é o verdadeiro legado de Linus para a humanidade. O Git não apenas mudou a forma como o software é desenvolvido, mas influenciou a colaboração em uma escala global, redefinindo a engenharia de software. O impacto do Git não se limita apenas ao Linux. Sem ele, talvez, até web como conhecemos não existiria.
Falando especificamente sobre sistemas de controle de versão, surge um paradoxo interessante. Se o Git não existisse, provavelmente hoje teriamso alternativas melhores. Sem ironias, o Git terrível em certos aspectos. Esta é a natureza das grandes ferramentas: elas nos cativam a tal ponto que nos tornamos relutantes em buscar ou adotar novas soluções, mesmo quando estas podem ser superior. E sim existe, muita coisa melhor que o Git, mas 99% dos casos não faz sentido usar, porque o git é bom o sufiente e todo mundo já deveria saber usar.
Apesar de sua importância, muitos desenvolvedores usam o Git diariamente sem compreender seu funcionamento, enfrentando dificuldades até mesmo com comandos básicos e desconhecendo o potencial dos comandos mais avançados.
Não seja esse cara.
Explore a fundo o que se encontra na pasta .git, além da configuração. Dominar o Git não apenas aumenta a produtividade no trabalho atual, mas também é vai te tornar um programador fundamentalmente melhor. Por exemplo, executar o Git sob o GDB e acompanhar o processo de um commit pode ensinar mais sobre sistemas de arquivos do que um curso de sistemas operacionais.
E a maior lição de todas: commit early, commit often.