O que é o Git?
Tags: git, braziliandevs
Published: 2021-09-13 01:53:57

![Big tree Image - by u3a.org.uk](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5e0qz2btst14s3z8e4lg.jpg)

<figcaption>
Imagem de <a href="u3a.org.uk">u3a.org.uk</a>
</figcaption>

## Introdução

Se você já se aventurou um pouco no mundo do desenvolvimento, muito provavelmente você se deparou em alguns assuntos envolvendo o famoso “Git”. A internet está cheia de conteúdos relacionados a essa tecnologia nos mais diversos níveis. Algo bastante engraçado sobre o assunto, é que mesmo com anos de experiência na área de desenvolvimento de software, conheço alguns programadores (eu inclusive) que ainda se surpreendem com algumas funcionalidades e versatilidades que o Git oferece.

Git é uma tecnologia muito poderosa, e com toda certeza, foi um dos pilares para chegarmos ao nível de desenvolvimento de software moderno e de colaboração que temos hoje. 

Estive um tempo sem escrever nada, então decidi criar essa postagem para, além de falar sobre o Git, poder desenferrujar um pouquinho. Prometo que vou tentar trazer alguns conteúdos interessantes para não termos “mais do mesmo”, já que, enfatizando novamente, o Git é um assunto bastante abordado na área de desenvolvimento de sistemas na internet.

Como de praxê: sem mais delongas, vamos começar!

## O que é o Git?

Acho que a primeira coisa que precisamos deixar claro seria: “o que danado é esse tal de Git?!”. 

![Logo do Git](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1jdkj98ykj5jz96vaw76.png)
<figcaption>
Imagem de <a href="https://git-scm.com/">git-scm</a>
</figcaption>
<br>

De forma bastante resumida, Git é um **sistema de controle de arquivos / versões distribuída**. “_Nossa Mauro, você ajudou bastante.. Acabou com todas as minhas dúvidas.. Uau_”. Certo, certo, peço perdão. Sei que isso ainda não diz muita coisa, mas peço mais uma chance para continuarmos a explicação.

Imagine que você e um amigo precisassem alterar um mesmo arquivo de código **simultaneamente**, só que cada um em sua própria máquina. Depois de um tempo de trabalho, vocês teriam finalizado o desenvolvimento e iriam precisar “juntar” suas modificações. Muito provavelmente vocês teriam que se reunir e concatenar, em um outro arquivo, as modificações de ambos fizeram: “Ah, eu alterei isso, adiciona esse trecho, remove essa linha aqui, não esquece de importar essa biblitoeca, blá, blá, blá”.

Agora, até pra deixar as coisas mais interessantes, imagine que foram MUITAS alterações, em DIVERSOS arquivos de códigos, e que ao invés de ser você e seu amigo, fossem VÁRIOS desenvolvedores DIFERENTES e que todas as alterações precisassem entrar em vigor RÁPIDO, e pra piorar, que de alguma forma precisasse haver um histórico de TUDO que foi alterado. Baita trabalhão gerenciar isso, né? E é exatamente aqui que o Git entra.

O Git é uma tecnologia que permite que diversas pessoas possam contribuir no código fonte de um sistema simultaneamente. Não importa se seja criando, editando ou até apagando arquivos. O intuito da tecnologia é que não haja um descontrole nas alterações que estão sendo feitas.

Basicamente, o Git nos ajuda a criar e gerenciar versões do sistema que estamos trabalhando, nos dando toda a garantia de integridade para mantermos a consistência do mesmo.

## Um pouquinho de história...

Sempre que eu vou estudar alguma tecnologia ou metodologia nova, gosto bastante de pesquisar como que os problemas relacionados a elas eram resolvidos antes. Heródoto, famoso historiador grego, disse uma vez: “Pensar o passado para compreender o presente e idealizar o futuro”. Na minha concepção, essa frase faz muito sentido para nossa construção como desenvolvedores melhores. É muito engraçado como esse tipo de conhecimento desperta em mim uma sensação de gratidão e vontade de colaborar mais para o crescimento da nossa área (ai ai, \*suspiro\*). Enfim, vamos ao que interessa, né? Como surgiu o Git?!

Antes de mais nada, precisamos citar um dos nomes mais conhecidos no mundo da computação que é o **Linus Torvalds**. Caso você não saiba quem é esse cara (tsc tsc tsc), resumidamente, ele é *apenas* o criador do Linux. Mas como se não bastasse, adivinhe só? Esse bendito também é, por sinal, o criador do Git! Como diria Vegeta de Dragon Ball Z: "O miserável é um gênio". Brincadeiras a parte, um ponto muito interessante a se ressaltar aqui é que a história da criação do Git está totalmente atrelada a história do desenvolvimento do Linux.

![Linus Torvalds](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qg6vvfm6rnbb94a1ayl8.jpeg)
<figcaption>
Linus Torvalds, Imagem de <a href="https://www.businessinsider.com/linus-torvalds-speaks-about-diversity-tech-challenges-linux">Insider</a>
</figcaption>

Como você deve imaginar, o projeto do Linux é algo com o escopo bastante grande. Muito código, muitas melhorias, muita manutenção, muitos desenvolvedores. Mega trabalhão organizar e gerenciar isso tudo, né?

Em 2002, o projeto do Linux começou usar um Sistema de Controle de Versão Distribuida (mais comumente achada na literatura como **Distributed version control system**, ou apenas DVCS) chamada "BitKeeper". Só pra constar, sucintamente, um DVCS é uma forma de controle de versão em que a base de código inteira, incluindo seu histórico completo, é "espelhada" no computador de cada desenvolvedor. De fato, dá pra ter noção de como essa tecnologia era uma mão na roda para o time de desenvolvimento do Linux na época.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pexazog53fp983ne4sub.png)
<figcaption>
Logo da Bitkeeper, Imagem de <a href="https://commons.wikimedia.org/wiki/File:Bitkeeper-logo.png">Wikimedia Commons</a>
</figcaption>

O Bitkeeper, até então, era um software proprietário, ou seja, a licença de sua utilização era paga. Por um tempo, entretanto, a BitMoover (empresa criadora do Bitkeeper) permitiu que uma versão gratuita fosse utilizada pelo time de desenvolvedores do Linux e também por toda comunidade de desenvolvedores no mundo. 

Mas como toda boa história por trás do universo da computação não pode deixar de ter uma boa e velha "treta", nos meados de 2005, a BitMoover acusou o time de desenvolvimento do Linux de violação de licença e engenharia reversa, dado que um dos seus membros (Andrew Tridgell, criador do [SAMBA](https://www.samba.org/)), na época, acabou desenvolvendo um client *open source* ao qual permitia que se pudesse trabalhar com o alguns metadados do BitKeeper. Por conta disso, a BitMoover acabou suspendendo a utilização gratuita do Bitkeeper para a comunidade e também se recusou a vender licenças para a **Open Source Development Labs** (OSDL), organização responsável pela aceleração do desenvolvimento do Linux, ao qual Linus Torvalds e Andrew Tridgell faziam parte. E foi com base nesse clima super tranquilo que iniciou-se o desenvolvimento do Git.

![Andrew Tridgell](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wj2ym651unty0rnga8x2.jpg)
<figcaption>
Andrew Tridgell, Imagem de <a href="https://www.youtube.com/watch?v=sxfpUwzH7i4">State of Eletronics</a>
</figcaption>

Linus Torvalds e toda equipe de desenvolvimento do Linux pesquisaram durante bastante tempo por algo que pudesse substituir o BitKeeper. Contudo, as soluções oferecidas naquele tempo eram bem limitadas e não atendiam as necessidades que eles buscavam. Seguindo essa linha, "já que não tem nada parecido, por que não criar a nossa própria?". Foi então que Linux Torvalds se propôs a criar algo que não apenas substituisse o Bitkeeper, mas que fosse superior! Desde então, algumas metas que o novo sistema deveria seguir eram as seguintes:

- Open Source;
- distribuida;
- rápida;
- design simples;
- ter suporte para desenvolvimento não-linear;
- e ser capaz de lidar com grandes projetos.

E BOOMM!! Assim surgiu o Git! Inicialmente, todos os requisitos pontuados, e o real intuito da criação do Git, visavam resolver apenas os problemas relacionados ao desenvolvimento do Linux. Mas o projeto escalou tão bem que acabou caindo nas graças da comunidade, e hoje, nem precisa falar que é um conhecimento/ferramenta indispensável no dia-a-dia de um programador.

## Onde aprender?

Como eu disse no começo desta postagem, Git é uma ferramenta tão versátil e completa, que até mesmo após anos de desenvolvimento, vira e mexe a gente aprende algo novo. A internet está CHEIA de informações sobre como aprender Git, contudo, muitas delas bastantes superficiais. Os melhores conteúdos sobre Git geralmente são disponibilizados em inglês, mas mesmo assim consegui encontrar um excelente conteúdo em português também! Abaixo segue uma listinha seleta com bons cursos nível "zero to hero" para você aprender Git de uma vez por todas:

- [Git e Github para Iniciantes - Willian Justen](https://www.udemy.com/course/git-e-github-para-iniciantes/)
- [Git Tutorial - W3Schools](https://www.w3schools.com/git/)
- [Learn Git - Codecademy](https://www.codecademy.com/learn/learn-git)
- [Version Control with Git - Udacity](https://www.udacity.com/course/version-control-with-git--ud123)

## Considerações Finais

Durante seus estudos, você vai se deparar com algumas ferramentas que facilitam o trabalho com o Git, como [Git Kraken](https://www.gitkraken.com/) ou [Sourcetree](https://www.sourcetreeapp.com/). Por "facilitar", não pense que o Git é uma ferramenta difícil de trabalhar, ao contrário, ela é muito simples. Porém, alguns fluxos de trabalho acabam se tornando um pouco "corriqueiros demais" com o passar do tempo, fazendo com que muitas vezes desenvolvedores cogitem usar esses utilitários. Contudo, uma dica que eu posso te dar é não utilizá-las se você estiver começando a aprender/trabalhar com Git. Elas são muito boas, não há como negar, mas o fato delas abstrairem alguns pontos importantes de conhecimento (noções de commit, pull/push, merge, rebase, stash, resolução de conflitos, cherry-pick, etc) acabam privando você de compreender a magnitude por trás do Git. Quando você estiver bastante experiente, com conhecimentos consolidados e não quiser "perder tempo", fica aí algumas dicas de ferramentas:

- [Git Kraken](https://www.gitkraken.com/)
- [Sourcetree](https://www.sourcetreeapp.com/)
- [Git Tower](https://www.git-tower.com/)

E chegamos ao fim de mais um artigo! Agradeço pela leitura e paciência até aqui, e espero ter contribuido um pouquinho pro seu conhecimento. Se você tiver artigos e conteúdos interessantes sobre Git, sinta-se a vontade de comentar aqui, vai ser de grande ajuda! Valeu, pessoal! Até a próxima. :-)

## Referências

- [Uma Breve História do Git](https://git-scm.com/book/pt-br/v2/Come%C3%A7ando-Uma-Breve-Hist%C3%B3ria-do-Git)
- [Git Parte 1: Como Surgiu a Ferramenta de Controle de Versão Mais Usada no Mundo](https://blog.taller.net.br/git-parte-1-como-durgiu-a-ferramenta-de-controle-de-versao/)
- [Tudo que você queria saber sobre Git e GitHub, mas tinha vergonha de perguntar](https://tableless.com.br/tudo-que-voce-queria-saber-sobre-git-e-github-mas-tinha-vergonha-de-perguntar/)
- [Andrew Tridgell dá sua versão sobre a 'Guerra do BitKeeper'](http://br-linux.org/linux/node/675)
- [Git // Dicionário do Programador](https://www.youtube.com/watch?v=za5KWZ5pRag)
- [Git concepts for newcomers — Part 1: What is a DVCS?](https://itnext.io/git-concepts-for-newcomers-part-1-what-is-a-dvcs-bc873076c424)