git
Conceitos básicos
Desenvolvedor web
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book
Cícero Viana
@cicerohen
/cicerohen
O que é o git?
Sistema open source de controle de versão de arquivos
Como você versiona seus trabalhos acadêmicos?
Meu sobrenome é organização
Num belo e tranquilo dia de expediente na empresa...
"Estagiário Zoeiro, vou te passar um site de um cliente nosso pra você fazer uma pequena alteração"
[ Programador Rabugento ]
"Opa! Só se for agora. :D"
[O Estagiário Zoeiro]
No final do dia...
[O Estagiário Zoeiro]
"Pronto, chapa..."
[ Programador Rabugento ]
[ Programador Rabugento ]
[ Programador Rabugento ]
R.I.P Estagiário Zoeiro
Se o Estagiário Zoeiro tivesse conhecido o git, nada disso teria acontecido.
Versionando com o git
Área de trabalho
Área de Consolidação
/O_Lindo_Site_Do_Cliente
Área de Estágio
(diretório .git)
Área de Trabalho
Espaço conceitual que corresponde ao diretório do seu projeto e tudo que há dentro dele.
O git observa tudo que acontece em sua Área de Trabalho
Área de Estágio
Espaço conceitual que contém todos os arquivos da Área de Trabalho que foram modificados.
Tudo que estiver nele, irá para a Área de Consolidação
Área de Consolidação
Área que corresponde a um diretório chamado ".git" dentro do diretório do projeto, onde o git guarda todos os dados e objetos do projeto.
Então o git vai criar cópias dos arquivos que eu alterei e guardar dentro da Área de Consolidação? Não. Isso será explicado logo mais
Exemplificando
O Estagiário Zoeiro altera e salva um arquivo.
O git identifica a alteração no arquivo.
O Estagiário Zoeiro "pede" pro git listar os arquivos que ele alterou.
git status
Comando que informa o estado atual da sua Área de Trabalho
O GIT informa que um arquivo foi modificado.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: index.html
O Estagiário Zoeiro envia esse arquivo alterado para a Área de Estágio
git add index.html
Comando que adiciona um ou mais arquivos para a Área de Estágio
Área de trabalho
Área de Consolidação
/O_Lindo_Site_Do_Cliente
Área de Estágio
(diretório .git)
index.html
Final do expediente chegando...
Por questões de segurança e boas práticas, o Estagiário Zoeiro envia os arquivos da Área de Estágio para a Área de consolidação.
git commit -m "minhas alterações feitas durante o expediente"
Área de trabalho
Área de Consolidação
/O_Lindo_Site_Do_Cliente
Área de Estágio
index.html
"Então o git vai criar cópias dos arquivos que eu alterei e guardar dentro da Área de Consolidação?"
Lembra dessa pergunta feita anteriormente?
A resposta é não
O GIT tira uma "foto" de toda a estrutura do projeto.
git commit
Comando que efetua a consolidação dos arquivos da Área de Estágio.
Como o GIT tira essa "foto"?
SHA-1
Algorítmo matemático que mapeia os dados de entrada para uma sequência de caracteres de tamanho fixo
/O_Lindo_Site_Do_Cliente
index.html
/images
image.png
e53c244fec5778e3613c0dc2d7edcf71a5630d4e
aa1b2fb696a831c89c53f787e03d863691d2b671
4c511f16ef2644854d04cabebfcecc82be0eb04f
7cf2a17f3345635d59e063cffddd23573b6e4a75
7cf2a17f3345635d59e063cffddd23573b6e4a75
Hash SHA-1
O Estagiário Zoeiro pede para o git exibir todas as "fotos" que já foram tiradas do projeto
git log
Comando que exibe os estado atual da sua Área de Trabalho
commit e53c244fec5778e3613c0dc2d7edcf71a5630d4e
Author: cicerohen <cicerohen@gmail.com>
Date: Fri Jun 24 14:42:47 2016 -0300
minhas alterações feitas durante o expediente
Fim de expediente..
Todas as alterações feitas estão mapeadas e guardadas pelo git, de forma segura.
Bom trabalho, Estagiário Zoeiro
Branches
(galhos/ramificações)
O que é um branch?
Branch é uma espécie de ponteiro que aponta pra alguma "foto" tirada pelo git em um determinado momento no projeto.
Por padrão, o git cria um branch chamado master, que geralmente é usado pra referenciar a versão estável do seu projeto
Você pode e DEVE criar branchs pra evitar eventuais perdas, durante o fluxo de trabalho.
Nenhuma alteração estará segura no GIT, caso você NÃO tenha feito commit( tirado uma foto) das alterações
Lembra disso?
Você não precisa mais fazer isso.
Use git. Use branchs.
Exemplificando...
meu_tcc_sobre_java.doc
Fluxo de Alterações
TCC Quase terminado, falta apenas inserir as referências bibliográficas
branch atual
master
git branch inserir_bibliografia
git checkout inserir_bibliografia
Criando um branch a partir do branch master
Alternando para o branch criado
TCC Quase terminado, falta apenas inserir as referências bibliográficas
branch atual
master
Inserindo as referências bibliográficas
inserir_bibliografia
Depois de você ter inserido as referências bibliográficas
Vamos tirar uma "foto"
git commit -m "inserindo as referências bibliográficas"
Quase terminado, falta apenas inserir as referências bibliográficas
branch atual
master
Trabalho concluido. Referências bibliográficas inseridas
inserir_bibliografia
Foto tirada. As alterações estão seguras.
git commit -m "inserindo as referências bibliográficas"
Temos agora um único arquivo no diretório, mas com duas versões diferentes.
Vamos agora atualizar a versão do branch master com a versão do branch inserir_bibliografia
Mudamos novamente para o branch master
Quase terminado, falta apenas inserir as referências bibliográficas
branch atual
master
Trabalho concluido. Referências bibliográficas inseridas
inserir_bibliografia
Foto tirada. As alterações estão seguras.
git commit -m "inserindo as referências bibliográficas"
Agora atualizamos a versão do master
git merge inserir_bibliografia
Quase terminado, falta apenas inserir as referências bibliográficas
branch atual
master
Trabalho concluido. Referências bibliográficas inseridas
inserir_bibliografia
Foto tirada. As alterações estão seguras.
git commit -m "inserindo as referências bibliográficas"
Versão do branch master agora está com as referências bibliográficas também
Como já fizemos o merge e ambos os branchs tem o mesmo conteúdo, podemos agora excluir o branch inserir_bibliografia.
git branch -D inserir_bibliografia
TCC com as referências biblográficas inseridas
branch atual
master
O branch master agora aponta para a foto tirada no branch inserir_bibliografia
Foto tirada. As alterações estão seguras.
git commit -m "inserindo as referências bibliográficas"
Feito. Fizemos as alterações no arquivo utilizando o git para versionar.
Obrigado