Skip to content

Latest commit

 

History

History
276 lines (168 loc) · 7.09 KB

git-under-hood.md

File metadata and controls

276 lines (168 loc) · 7.09 KB
theme transition title enableMenu enableSearch enableChalkboard slideNumber
serif
slide
Git por debaixo dos panos
true
false
true
true

Git por debaixo dos panos

Luís Antônio


Roteiro da apresentação

  • Ponteiros
  • Git do dia a dia
  • 3 Áreas do git
  • Objetos git
  • Funcionamento interno
  • Branch e merge
  • Prática

Ponteiros

[...] um ponteiro ou apontador é um tipo de dado [...], cujo valor se refere diretamente a um outro valor alocado em outra área da memória.

Wikipedia


Ponteiros

-{width=70%}


Ponteiros | Aplicabilidade

-


Pontieros | Aplicabilidade

-


Git do gueto


Normalmente, aprendemos por ódio

-


3 Áreas do git

-


Working directory

Área do dia a dia


Staging area

A partir daqui temos a benção do pai git


Local repository

Tudo que existe dentro da temida pasta /.git


Vamos lá, agora é de verdade


Mas antes, um aviso importante

-

NÃO Tenha medo das strings SHA1


3 Objetos git

  • commit
  • tree
  • blob

Commit

  • Autor
  • Mensagem
  • Ponteiro para uma Tree
  • Ponteiro para o pai
  • É um print (snapshot) do estado atual

Tree

  • Ponteiros para blob
  • Ponteiros para outra Tree
  • Abstrai nossas pastas

Blob

  • Dados em si
  • Não possui metadados

Funcionamento interno


O que é o git

O git é, essencialmente, um banco de dados de ponteiros. Ou ainda, um grafo direcionado acíclico


HEAD

Um ponteiro que aponta para a branch atual


SHA1

-

A função SHA1 usa a função de hash criptográfica SHA1 para converter uma string de comprimento variável em uma string de 40 caracteres


SHA1

  • Unico
  • Alta entropia
  • Dois inputs iguais geram o mesmo resultado

SHA1, exemplo

  1. File => SHA1 => 0b064b56112cc80495ba59e2ef63ffc9e9ef0c77
  2. Storage: .git/objects/0b/064b56...

Exemplo prático


Situação no dia a dia

-

  • Meu repositório possui apenas 3 arquivos, localizados em:
    • test-utils.tsx
    • /login/functions.ts
    • /login/ListSpaceModal/styles.ts

Sitação no dia a dia (Manhã)

Durante a manhã mexi em todos os 3 arquivos e fiz um commit com todas as alteações

  • test-utils.tsx
  • /login/functions.ts
  • /login/ListSpaceModal/styles.ts

Sitação no dia a dia (Tarde)

Na parte da tarde eu fiz alterações apenas no arquivo de estilos dentro de ListSpaceModal

  • /login/ListSpaceModal/styles.ts

Sitação no dia a dia (Noite)

A noite, final do expediente eu só mudei algo nos meus testes, mudei apenas o arquivo test-utils

  • test-utils.tsx

Árvore de commits

-

Branchs


O que é uma branch? (advinhem)

Uma branch é um ponteiro que aponta para o último commit em um dado contexto

Stackoverflow Blog


O que é uma branch?

-


O que é uma branch?

-

O ponteiro é movido para o último commit automaticamente


E onde fica esse ponteiro no disco? (advinhem)

-


E advinhem o que tem dentro?

-


Merges


Fast-forward

-


Recursive strategy

-

  • Uma mesclagem começa com o Git localizando o commit comum do qual as ramificações de mesclagem divergiram mais recentemente.
  • O Git então calcula dois diffs
  • Para formar o commit do merge, o Git aplica os dois diffs à base do merge.

Exemplo

-


  1. O Git primeiro descobre que a base de mesclagem.
  2. O Git então calcula o diff de C até G(porque G é master) e o diff de C até Z (porque Zé otherbranch).
  3. O Git então aplica ambos os diffs à C simultaneamente — e confirma o resultado em master.
  4. Agora a branch master aponta para o commit de merge, o qual possui dois pais

Dúvidas


Luís Antônio (Tonhão)

  • Linkedin: Luís Santiago
  • GitHub: luis-antonio-dev
  • Instagram: dev__luis