Sobre o Git

From USPGameDev Wiki
Jump to: navigation, search

Git é uma ferramenta de controle de versão desenvolvida pelo Linus (mesmo cara do Linux). Nesta pagina, serão esclarecidas algumas dúvidas sobre seu uso.

Motivação

Mundialmente usada, o Git tem dois usos importantes:

  1. Controle de versão: neste contexto, controle de versão significa termos várias versões do mesmo arquivo, isso é, a capacidade de revertermos as modificações realizadas, ou voltarmos para a versão mais atualizada. Isso ajuda no histórico do projeto, encontrar erros, reverter modificações erradas e similares.
  2. Colaboração em grupo: essa ferramenta permite o trabalho paralelo (separado, individual) de várias pessoas no mesmo projeto. Cada pessoa modifica sua parte do projeto e essas partes são unidas posteriormente de maneira automática, raramente precisando de manipulação direta, inclusive modificações realizadas no mesmo arquivo.

Note que em nenhum momento foi dada alguma especificação sobre quais arquivos o git suporta, isso porque ele (teoricamente) suporta todos os tipos de arquivos, sejam imagens, arquivos de texto, pdfs, arquivos de som, etc. Isso que torna a ferramenta tão poderosa.

Termologia

Branch

Dizemos que branch é uma versão do projeto. Isso pode se entender como um conjunto de modificações próprias nos arquivos. (De maneira geral) Não existe relação entre branchs, ou seja, a modificação de uma branch não deveria afetar o outro. É esse fator que permite o trabalho em grupo: cada integrante faz suas modificações em seu branch, sem afetar o trabalho dos outros.

Master

É o Branch Principal. Nesse sentido, todos os outros branchs normalmente vão partir dele e eventualmente voltarem para ele. Nele é representado o trabalho conjunto do grupo e o estado atual do projeto.

Merge Request (ou Pull Request)

Um pedido para que suas modificações no projeto (em um branch) sejam adicionadas ao Master. Caso aceito, dizemos que o seu branch é “merged” no master, isso é, as modificações são “misturadas” no mestre. É através de MRs ou PRs que o Master evolui. Não existe diferença entre o termo MR ou PR .

Repositório Git (Github, GitLab, etc)

Um local na internet onde seus arquivos são guardados. Equivalente a um Google Drive, Dropbox, Mega, mas com integração com o git.

Uso normal do Git

Usar o git é algo simples. Primeiro, você verifica se está no branch correto (não queremos modificar os arquivos dos outros). Depois, modifique os arquivos que precisar. E então mande a sua nova versão do arquivo para o repositório.

Pense se estivéssemos usando um Dropbox, Google Drive, Mega ou similares. Primeiro baixaríamos o arquivo, então faríamos as nossas modificações e depois daríamos uploud nele. O git é o mesmo processo.

Para dar uploud, o git usa duas termologias: commit e push.

  • Commit pode se dizer que é uma confirmação da modificação. No caso acima do dropbox, seria similar a salvar o arquivo e fechar o editor. Commits também tem a vantagem de possuírem uma mensagem de texto, usada para detalhar o que foi modificado.
  • Push é a ação de dar uploud nos commits realizados. Isso efetivamente sincroniza os arquivos que estão na sua máquina e os arquivos do repositório. Caso você não dê push, todas as modificações nunca vão chegar na nuvem e não poderão ser vistas pelas outras pessoas!

Depois de ter modificado tudo que deseje, não se esqueça de abrir um MR (ou PR) para pedir que a sua versão dos arquivos seja adicionada ao projeto.

Merge e conflitos

Uma vez que o MR for aceito, a sua nova versão do arquivo vai ser adicionada ao Master. Na verdade, o git é inteligente o suficiente para adicionar somente o que foi modificado no seu branch no Master. Isso permite que duas pessoas modifiquem lugares diferentes de um arquivo e mesmo assim deem merge sem problemas, pois suas modificações não conflitam (não ocorrem no mesmo lugar, portanto basta aplicar as duas modificações).

O problema ocorre quando existem conflitos: duas ou mais pessoas modificaram o mesmo arquivo ao “mesmo tempo”. Isso ocorre quando ambas criaram um branch “ao mesmo tempo” e modificaram o mesmo arquivo. Quando o merge for ocorrer, o git não sabe qual modificação aplicar. Note que isso é diferente de uma pessoa modificar um arquivo, dar merge e então outra pessoa modificar o arquivo.

Normalmente, o único jeito de resolver conflitos é a mão. Uma das duas pessoas (normalmente a que der merge por último) vai ter que primeiro baixar as modificações no arquivo, alterar o que for necessário e então realizar o merge.

Veja também