O que é e por que aprender a usar o git?

Bem, vamos por partes. Vou começar com algumas perguntas, levando em conta que você leitor ainda não conhece o git

Como você versiona seus projetos?

Bem, você já deve ter passado por alguma situação em que estava trabalhando com algum projeto grande de faculdade ou de algum curso, ou mesmo escrevendo algum TCC ou trabalho em grupo, e provavelmente já precisou guardar versões diferentes do projeto, pro caso de precisar voltar no tempo e ter diferentes estágios de desenvolvimento, certo?

Versionamento de arquivos

Provavelmente isso te parece familiar...

Como você compartilha seus projetos?

Na mesma situação acima, provavelmente ao trabalhar em grupo, precisou também compartilhar seu projeto com seu colega, e enquanto você faz a parte A, seu colega faz a parte B. Depois que seu colega terminou sua parte, precisou copiar e colar o trecho que ele fez para o seu projeto de forma que o mesmo passasse a ter tanto a parte A quanto a parte B

Agora imagine isto quando se trata de um projeto web, ou algum outro projeto que envolva códigos. Imagine a chance de copiar e colar trechos errados, ou sobrescrever algum trecho do seu colega. Como você resolve este problema?

Como você mantém um histórico de desenvolvimento do seu projeto?

Provavelmente, sem uma ferramenta de versionamento, você NÃO mantém um histórico de desenvolvimento do seu projeto. Você não lembrará em que dia quais linhas foram adicionadas ou removidas do seu projeto, também não lembrará quem adicionou uma funcionalidade, ou que trechos de código uma pessoa modificou, a não ser que anote tudo a mão em uma espécie de change log (um histórico de modificações), que mesmo assim é de forma macro, contendo apenas funcionalidades que foram adicionadas ou removidas, não chegando ao ponto de linhas de código adicionadas ou removidas

Como o git resolve as três questões de uma vez?

O git é uma ferramenta de versionamento voltado para o desenvolvedor, e permite que você guarde uma série de retratos das modificações que você faz em um projeto

Esses retratos são chamados de commits, e eles podem conter adições, remoções ou modificações de trechos de código

Além das modificações, o commit permite guardar uma mensagem pequena, explicando com poucas palavras o contexto das suas modificações. Exemplo: Adding description to home page me faz entender que esse commit tem modificações referentes a adição de código para dar uma descrição a minha home page

árvore de commits

Uma sequencia de commits

Na imagem acima é possível ver uma representação gráfica de uma árvore de commits feita no git. Cada bolinha representa um conjunto de modificações que foi fotografada em um commit

árvore de commits

A diff em um commit

A figura acima é uma visualização dos diffs de um commit. Um diff ou delta é a variação que ocorreu entre o commit atual e o estado anterior do projeto. Na imagem, a linha vermelha é a que foi removida, e a linha verde é a que foi adicionada. Como elas ocorrem na mesma linha (linha 47), então na verdade a linha foi modificada. Antes ela continha um texto (a que está em vermelho) e com esse commit passou a ter outro (a que está em verde)

Essas duas funcionalidades resolvem o problema do histórico e das versões. É possível retornar o seu projeto para um commit passado e deixa-lo como ele estava naquela data, e cada commit possui um histórico de quais modificações foram realizadas, aonde elas foram feitas e quem foi o autor

branches

Branches no git

Uma coisa fantástica que o git permite também é o uso de branches. Branch é galho ou ramificação em inglês, ou seja, o git permite que modificações em um projeto sejam feitas em ramificações separadas. Você consegue trabalhar em uma branch ou ramificação, enquanto seu amigo trabalha em outra branch, e quando seu amigo ou você termina as modificações necessárias, uma branch pode ser mesclada com a outra, ou seja, sofrer um merge. Quando isto acontece, as alterações que seu amigo fez em uma branch, por exemplo, passam a existir na branch que você está trabalhando.

Na figura acima, a linha vermelha é uma branch, e a linha verde é outra branch. No ponto em que uma se junta com a outra, ocorreram merges, e isso resolve o problema de compartilhar e trabalhar em conjunto em um projeto

O git e o github são a mesma coisa?

Não, o git é a ferramenta de versionamento que roda na sua máquina, já o github é um serviço para criar repositórios remotos.

E o que seria um repositório remoto? Um repositório remoto é como se seu projeto estivesse guardado com um histórico de git, mas na nuvem. Resumindo, o github é um serviço que permite guardar o seu projeto e todos os commits dele na nuvem. O git é excelente para projetos open source, já que os repositórios são abertos e qualquer usuário pode acessá-los, e caso queiram adicionar modificações, podem pedir ao dono do repositório, enviando Pull Requests. Também pretendo explicar em outro post como isso é feito

Muitas empresas pedem para ver seus projetos no github para poderem ver como você escreve códigos, então é um ótimo portfólio

O github também entra na solução de trabalhar em conjunto também, já que é através de um repositório remoto que um desenvolvedor A consegue sincronizar o projeto com o desenvolvedor B. Em outro post explicarei de forma mais específica como acontece essa colaboração entre mais de um desenvolvedor com o github

Resumindo...

Se você está iniciando com desenvolvimento, tire um tempo para ver o que é o git, como instalar e como usá-lo em seus projetos. Faça também um perfil seu no github. Em outro post entrarei em mais detalhes de funcionamento do git, já que este post foi mais uma descrição por alto do que é o git e de sua importância