SlideShare uma empresa Scribd logo
1 de 66
O FANTÁSTICO
MUNDO DE GIT
$ whoami
Matheus Fidelis
Desenvolvedor Web PHP na
Superlogica Tecnologias
DevOps & Security SysAdmin
/fidelissauro
/msfidelis
$ WHOAMI
● GIT não é um sistema de controle de versão de código
● GIT é um sistema de controle de versão de ARQUIVOS
● Permite que pessoas possam contribuir para projetos
de forma simultânea, editando, criando e removendo
sem riscos de sobrescrita.
● GIT não se resume apenas a código e usar um sistema
de versionamento é uma decisão sábia não só para
Devs.
● Versiona arquivos PST, Imagens, Documentos,
Binários e até mesmo… folhas de código :)
# git log
O QUE É GIT
▸Criado por Linus Torvalds para substituir um VCS
(Version Control System) chamado Bit Keeper - Todos
os arquivos são requisitados ao servidor
▸Criado a partir da necessidade de gerenciar o
projeto do Kernel Linux com a comunidade.
▸Focado em performance e confiabilidade
▸Mais tarde se tornou um DVCS (Distributed Version
Control Systems) - Todo cliente possui uma cópia
completa do repositório.
O QUE É GIT
~$ whoami
▸GIT é apenas um serviço, em um servidor que
manipula as informações e versões do repositórios.
▸O Github é uma hospedagem de Git. Ele fornece
ferramentas para melhorar a usabilidade em um
servidor de Git compartilhado com opções
gratuitas e privadas.
O GIT NÃO É O GITHUB
INCLUSIVE EXISTEM OUTRAS
OPÇÕES….
INSTALAR O GIT É FÁCIL
~# sudo apt-get install git
git
pull
git push
git commit
git add
git checkout
ALIASES DO GIT
Plumbing and Porcelain
git
pull
git push
git commit
git add
git checkout
ALIASES DO GIT
Plumbing and Porcelain
git rebase
git reset
git merge
git fetch
ALIASES DO GIT
Plumbing and Porcelain
git
pull
git push
git commit
git add
git checkout
git rebase
git reset
git merge
git fetch
cat-file
write-tree
read-tree
commit-tree
hash-object
GIT OBJECTS
● BLOBS
● TREES
● COMMITS
OS OBJETOS DO GIT - BLOBS
▸O Git usa um modelo de armazenamento uniforme
para todos os seus objetos.
▸Cada objeto é identificado com o seu hash, mas o
tipo do objeto é armazenado em metadados
juntamente com o objeto.
▸Sempre que criamos ou modificamos um arquivo
trackeado, é gerado um BLOB para o mesmo.
OS OBJETOS DO GIT - TREES
▸Como o GIT sabe, qual arquivo está na minha branch
atual, e qual pertence a qual?
▸Os blobs são organizados em trees, o que
corresponde aos diretórios em uma estrutura de
diretórios.
▸A tree representa uma arvore de diretório diretório,
contendo uma mistura de blobs e outras trees. Caso
seja um blob de tree dentro de uma tree, podemos
identificar um subdiretório, e assim em diante...
OS OBJETOS DO GIT - COMMITS
▸Um commit também é um objeto de hash,
armazenado exatamente nos mesmos mecanismos
em que blobs e trees.
▸Um commit é um hash da mensagem de commit,
com um tipo de identificação das modificações.
USANDO O GIT SEM FERRAMENTAS
#SEJAROOTS
USANDO O GIT NO GITHUB COM
AUTENTICAÇÃO DE DUAS ETAPAS
▸Copie sua chave pública.
▸No Github vá em Settings -> SSH and GPG keys
▸Clique em New SSH Key e cole sua chave.
▸Pronto :)
USANDO O GIT NO GITHUB COM
AUTENTICAÇÃO DE DUAS ETAPAS
▸cat ~/.ssh/id_rsa.pub
USANDO O GIT NO GITHUB COM
AUTENTICAÇÃO DE DUAS ETAPAS
CONFIGURANDO O GIT
$ git config --global user.name “SEU NOME”
$ git config --global user.email “SEU EMAIL”
$ git config --global core.fileMode false
$ git config --global diff.tool vimdiff
▸O repositório é onde o sistema de controle de versão
mantém o rastreamento de todas as alterações
realizadas no projeto.
▸Armazenam o estado atual do código, o histórico de
alterações, quem fez, e um log que explica o porquê
da alteração ter sido realizada.
▸De forma geral o repositório precisa ter tudo que é
essencial para o projeto, tanto para codificar,
modificar quanto para construir as versões.
REPOSITORIO
▸WORKING DIRECTORY - Onde estão os arquivos
vigentes, ainda não adicionados nem commitados
▸INDEX (STAGE) - É uma árvore temporária de
arquivos adicionados.
▸HEAD (Ta valendo) - Area que aponta o ultimo
commit de alterações confirmadas que você realizou.
FLUXO DE TRABALHO NO GIT
▸Commited: O arquivo está sob controle de versão e
não apresenta nenhuma modificação.
▸Commit candidate: Quando você adiciona as
modificações (commit), esses serão os arquivos
incluídos.
▸Modified: Arquivos que foram modificados.
▸Untracked: Arquivos novos, que ainda não estão
sendo monitorados pelo Git.
OS 4 ESTADOS DOS ARQUIVOS NO GIT
INICIANDO UM REPOSITORIO LOCAL
$ git init
▸Cria um repositório LOCAL com a estrutura do git
▸A pasta que contém a pasta “.git”
▸Contém todos os metadados do seu repositório e as
versões disponíveis
$ git remote add origin <servidor>
CLONANDO UM REPOSITORIO REMOTO
$ git clone https://github.com/user/repositorio.git
VIA HTTPS
$ git clone git@github.com:user/repositorio.git
VIA SSH
CONFIGURANDO O GIT
CRIANDO E DANDO CHECKOUT NAS
BRANCHES
$ git checkout -b novabranch branchorigem
PARA CRIAR UMA BRANCH A PARTIR DE OUTRA
$ git checkout branch
TROCANDO DE BRANCH
IDENTIFICANDO AS BRANCHES
$ git branch
PARA VERIFICAR AS BRANCHS UTILIZADAS
$ git branch --all
VERIFICAR TODAS AS BRANCHES EXISTENTES NO PROJETO
O COMANDO MAIS IMPORTANTE DO GIT
$ git status
▸Exibe o status da branch, e todos os arquivos.
▸Deve se usar sem moderação.
▸Exibe o status das árvores, branch atual, histórico de
arquivos modificados, adicionados, criados e
apagados
ADICIONANDO UM ARQUIVO / TODOS
$ git add arquivo.php
$ git add pasta/
$ git add *
▸Adiciona os arquivos para o Index (Stage)
REMOVENDO UM ARQUIVO DA INDEX
$ git reset arquivo.php HEAD
▸Retorna o arquivo para o estago de unstaged
CRIANDO UM COMMIT
$ git commit -m "modifiquei o sistema de
checkout"
▸Cria um commit das modificações executadas
$ git commit -am "modifiquei os boletos"
▸Cria um commit das modificações executadas já
adicionando todos os commits candidates (add * )
CRIANDO PUSH PARA O REMOTE
$ git push origin <branch>
▸Enviamos nossas modificações commitadas para o
remote.
SOLICITANDO UM PULL DAS
MODIFICAÇÕES DO SERVIDOR
$ git pull origin <branch>
▸Git pull é um “syntax sugar” para “git fetch ; git
merge HEAD”, onde são baixadas as modificações da
branch e as mesmas são “merjadas” com a HEAD
atual.
EFETUANDO O MERGE DE DUAS
BRANCHES
$ git merge <branch>
▸O Merge é uma das tarefas mais complexas que o git
faz, perde somente para o rebase, outra alteranativa
para o merge.
▸O Merge vai olhar para as duas branches (a atual e a
de origem), encontrar os commits em comum e
aplicar os commits que a branch atual não tem em
cima.
REBASE - ALTERNATIVA MAIS COMPLEXA
AO MERGE
$ git rebase <branch>
▸É mais uma forma de mover commits entre branchs
do Git
▸No Rebase, os seus commits (acima da base) são
temporariamente apagados.
▸A branch atual fica exatamente igual ao outro
branch e seus commits são aplicados um a um no
branch atual.
▸Ideal para manter o histórico intacto.
VERIFICANDO UM DIFF DE UM ARQUIVO
$ git diff file
▸É o visualizador de diffs default do git.
▸Ele mostra as linhas modificadas de um arquivo
apontado.
▸Caso o arquivo seja muito grande ele vai abrir um
“less” em shell para melhor visualização.
▸“+” Representa as linhas adicionadas
▸“-” Representa as linhas removidas/substituidas
▸O Netbeans tem plugin nativo (FODA) de Git que
ajuda no historico e nos diffs
▸O Sublime tem alguns packages que ajudam
-> Sublime GIT
-> GitStatus
▸Atom tem muitos tbm...
VERIFICANDO UM DIFF DE UM ARQUIVO
IH, DEU RUIM! - It's Dangerous To Go Alone
VERIFICANDO CONFLITOS
$ git ls-files -u
▸Lista todos os conflitos
encontrados durante o merge.
VERIFICANDO CONFLITOS
$ git status;
$ git diff <arquivo>
REVERTENDO ALTERAÇÕES LOCAIS
$ git checkout -- <arquivo>
▸Modifiquei, deu ruim, é mais fácil refazer…
CHECKOUT NELE!
▸Substitui as alterações do arquivo pelo conteúdo
mais recente do mesmo presente do HEAD.
▸Alterações já adicionadas ao Index (Stage) e novos
arquivos serão mantidos.
VERIFICANDO OS LOGS DOS COMMITS
$ git log
▸Verifica as alterações efetuadas no repositório e
parseia de uma forma mais amigável.
▸Exibe as hashes dos commits e seus respectivos
autores.
REVERTENDO ALTERAÇÕES LOCAIS
$ git fetch origin
$ git reset --hard origin/master
▸ZOEI TODO O MEU LOCAL!!! E agora??? Descarte todos
os commits locais e baixe uma nova cópia novinha
do servidor!
▸Todas as suas alterações locais (sem o push) vão
voltar para o estado original do servidor.
▸CUIDADO. Vai descartar tudo MESMO!
ROLLBACK EM COMMITS
$ git reset --hard hashdocommit
$ git reset --hard HEAD˜10
▸Podemos dar um reset na hash de um commit
específico, voltando todo o estado do head para o
estado commit especificado (git log)
▸Podemos voltar também um número específico de
commits para trás.
APOIO
▸https://services.github.com/kit/downloads/github-
git-cheat-sheet.pdf
▸https://git-scm.com/book/en/v2/Getting-Started-
Git-Basics
▸https://git-scm.com/about/distributed
▸http://rogerdudler.github.io/git-
guide/index.pt_BR.html
QUE A FORÇA
ESTEJA COM
VOCÊS!
PERGUNTAS??

Mais conteúdo relacionado

Mais procurados

Git e Github para Iniciantes by Alysson Ajackson
Git e Github para Iniciantes by Alysson AjacksonGit e Github para Iniciantes by Alysson Ajackson
Git e Github para Iniciantes by Alysson AjacksonAlysson Ajackson
 
Introdução ao Git - Semac 2016
Introdução ao Git - Semac 2016Introdução ao Git - Semac 2016
Introdução ao Git - Semac 2016Victor Souza
 
Git e Github - Comandos e conceitos básicos
Git e Github - Comandos e conceitos básicos Git e Github - Comandos e conceitos básicos
Git e Github - Comandos e conceitos básicos Jonathan Célio
 
Introdução ao GitHub e Git
Introdução ao GitHub  e GitIntrodução ao GitHub  e Git
Introdução ao GitHub e GitIgor Steinmacher
 
Git e GitHub: Versionamento de Código Fácil
Git e GitHub: Versionamento de Código FácilGit e GitHub: Versionamento de Código Fácil
Git e GitHub: Versionamento de Código FácilTiago Antônio da Silva
 
Git e git hub para iniciantes
Git e git hub para iniciantesGit e git hub para iniciantes
Git e git hub para iniciantesMario Ernesto
 
Como fazer controle de versões de dados e modelos de Machine Learning usando...
 Como fazer controle de versões de dados e modelos de Machine Learning usando... Como fazer controle de versões de dados e modelos de Machine Learning usando...
Como fazer controle de versões de dados e modelos de Machine Learning usando...Alexandre Ray
 
Docker - minicurso utfpr 2017
Docker -  minicurso utfpr 2017Docker -  minicurso utfpr 2017
Docker - minicurso utfpr 2017Fabio Janiszevski
 

Mais procurados (20)

Git
GitGit
Git
 
Git e Github para Iniciantes by Alysson Ajackson
Git e Github para Iniciantes by Alysson AjacksonGit e Github para Iniciantes by Alysson Ajackson
Git e Github para Iniciantes by Alysson Ajackson
 
Introdução ao Git - Semac 2016
Introdução ao Git - Semac 2016Introdução ao Git - Semac 2016
Introdução ao Git - Semac 2016
 
Git e Github - Comandos e conceitos básicos
Git e Github - Comandos e conceitos básicos Git e Github - Comandos e conceitos básicos
Git e Github - Comandos e conceitos básicos
 
Git e GitHub
Git e GitHubGit e GitHub
Git e GitHub
 
Introdução ao GitHub e Git
Introdução ao GitHub  e GitIntrodução ao GitHub  e Git
Introdução ao GitHub e Git
 
Git e GitHub: Versionamento de Código Fácil
Git e GitHub: Versionamento de Código FácilGit e GitHub: Versionamento de Código Fácil
Git e GitHub: Versionamento de Código Fácil
 
Introducao ao Git
Introducao ao GitIntroducao ao Git
Introducao ao Git
 
Docker: uma visão geral
Docker: uma visão geralDocker: uma visão geral
Docker: uma visão geral
 
Git para quem vem do SVN
Git para quem vem do SVNGit para quem vem do SVN
Git para quem vem do SVN
 
Git+github
Git+githubGit+github
Git+github
 
Apres git geinfo2012
Apres git geinfo2012Apres git geinfo2012
Apres git geinfo2012
 
Git e git hub para iniciantes
Git e git hub para iniciantesGit e git hub para iniciantes
Git e git hub para iniciantes
 
Ambiente de desenvolvimento com docker e ruby on rails
Ambiente de desenvolvimento com  docker e ruby on railsAmbiente de desenvolvimento com  docker e ruby on rails
Ambiente de desenvolvimento com docker e ruby on rails
 
Introdução ao git e github
Introdução ao git e githubIntrodução ao git e github
Introdução ao git e github
 
Aprendendo Git
Aprendendo GitAprendendo Git
Aprendendo Git
 
Como fazer controle de versões de dados e modelos de Machine Learning usando...
 Como fazer controle de versões de dados e modelos de Machine Learning usando... Como fazer controle de versões de dados e modelos de Machine Learning usando...
Como fazer controle de versões de dados e modelos de Machine Learning usando...
 
Docker - minicurso utfpr 2017
Docker -  minicurso utfpr 2017Docker -  minicurso utfpr 2017
Docker - minicurso utfpr 2017
 
Oficina docker
Oficina dockerOficina docker
Oficina docker
 
Docker compose
Docker composeDocker compose
Docker compose
 

Destaque

Certificado de palestra proferida: "O Inimigo Interno"
Certificado de palestra proferida: "O Inimigo Interno"Certificado de palestra proferida: "O Inimigo Interno"
Certificado de palestra proferida: "O Inimigo Interno"Ricardo Maganhati Junior
 
Desmistificando a Amazon AWS
Desmistificando a Amazon AWSDesmistificando a Amazon AWS
Desmistificando a Amazon AWSMatheus Fidelis
 
Escalando API's com NodeJS, Docker e RabbitMQ
Escalando API's com NodeJS, Docker e RabbitMQEscalando API's com NodeJS, Docker e RabbitMQ
Escalando API's com NodeJS, Docker e RabbitMQMatheus Fidelis
 
Slides para Apresentação acadêmica
Slides para Apresentação acadêmicaSlides para Apresentação acadêmica
Slides para Apresentação acadêmicaRafaelBorges3
 
Apresentação de slides pronto
Apresentação de slides prontoApresentação de slides pronto
Apresentação de slides prontocandidacbertao
 

Destaque (9)

Certificado de palestra proferida: "O Inimigo Interno"
Certificado de palestra proferida: "O Inimigo Interno"Certificado de palestra proferida: "O Inimigo Interno"
Certificado de palestra proferida: "O Inimigo Interno"
 
Docker para maiores
Docker para maioresDocker para maiores
Docker para maiores
 
Desmistificando a Amazon AWS
Desmistificando a Amazon AWSDesmistificando a Amazon AWS
Desmistificando a Amazon AWS
 
Escalando API's com NodeJS, Docker e RabbitMQ
Escalando API's com NodeJS, Docker e RabbitMQEscalando API's com NodeJS, Docker e RabbitMQ
Escalando API's com NodeJS, Docker e RabbitMQ
 
Slide pronto
Slide prontoSlide pronto
Slide pronto
 
Slides prontos
Slides prontosSlides prontos
Slides prontos
 
Slides para Apresentação acadêmica
Slides para Apresentação acadêmicaSlides para Apresentação acadêmica
Slides para Apresentação acadêmica
 
Apresentação de slides pronto
Apresentação de slides prontoApresentação de slides pronto
Apresentação de slides pronto
 
Web scraping com python
Web scraping com pythonWeb scraping com python
Web scraping com python
 

Semelhante a O Fantástico Mundo de Git

Minicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENACMinicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENACDanilo Pinotti
 
Git - Rápido, seguro, eficiente
Git - Rápido, seguro, eficienteGit - Rápido, seguro, eficiente
Git - Rápido, seguro, eficienteWaldyr Felix
 
EIIFRO2014 - Desenvolvimento Colaborativo de Software
EIIFRO2014 - Desenvolvimento Colaborativo de SoftwareEIIFRO2014 - Desenvolvimento Colaborativo de Software
EIIFRO2014 - Desenvolvimento Colaborativo de SoftwareAldson Diego
 
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019Tchelinux
 
Learn about Git - Git Tutorial
Learn about Git - Git TutorialLearn about Git - Git Tutorial
Learn about Git - Git TutorialLucas Brigida
 
Git e Sistemas de Controle de Versão
Git e Sistemas de Controle de VersãoGit e Sistemas de Controle de Versão
Git e Sistemas de Controle de VersãoJhonatan Henrique
 
Desmistificando a ferramenta git
Desmistificando a ferramenta gitDesmistificando a ferramenta git
Desmistificando a ferramenta gitDiogo Souza Machado
 
PDC - Engenharia - Git e Gitorious
PDC - Engenharia - Git e GitoriousPDC - Engenharia - Git e Gitorious
PDC - Engenharia - Git e Gitoriousslides_teltools
 
Intro ao Git e GitHub
Intro ao Git e GitHubIntro ao Git e GitHub
Intro ao Git e GitHubLviaSouza32
 
Workshop git para iniciantes
Workshop git para iniciantesWorkshop git para iniciantes
Workshop git para iniciantesPaula Santana
 
Intervalo técnico Git/SVN
Intervalo técnico Git/SVNIntervalo técnico Git/SVN
Intervalo técnico Git/SVNLuciano Lima
 
Apresentação de Git
Apresentação de GitApresentação de Git
Apresentação de GitIsaacBessa
 
workshopgitparainiciantes1-190901224755.pdf
workshopgitparainiciantes1-190901224755.pdfworkshopgitparainiciantes1-190901224755.pdf
workshopgitparainiciantes1-190901224755.pdfAuriceliaRosa
 
Introdução ao git
Introdução ao gitIntrodução ao git
Introdução ao gitDiogo Gomes
 
Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)Danilo Pinotti
 

Semelhante a O Fantástico Mundo de Git (20)

Git e github
Git e githubGit e github
Git e github
 
Introdução ao git
Introdução ao gitIntrodução ao git
Introdução ao git
 
Minicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENACMinicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENAC
 
Git & GitHub for beginners
Git & GitHub for beginnersGit & GitHub for beginners
Git & GitHub for beginners
 
Git - Rápido, seguro, eficiente
Git - Rápido, seguro, eficienteGit - Rápido, seguro, eficiente
Git - Rápido, seguro, eficiente
 
EIIFRO2014 - Desenvolvimento Colaborativo de Software
EIIFRO2014 - Desenvolvimento Colaborativo de SoftwareEIIFRO2014 - Desenvolvimento Colaborativo de Software
EIIFRO2014 - Desenvolvimento Colaborativo de Software
 
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
 
Learn about Git - Git Tutorial
Learn about Git - Git TutorialLearn about Git - Git Tutorial
Learn about Git - Git Tutorial
 
Git e Github
Git e GithubGit e Github
Git e Github
 
Git e Sistemas de Controle de Versão
Git e Sistemas de Controle de VersãoGit e Sistemas de Controle de Versão
Git e Sistemas de Controle de Versão
 
Desmistificando a ferramenta git
Desmistificando a ferramenta gitDesmistificando a ferramenta git
Desmistificando a ferramenta git
 
PDC - Engenharia - Git e Gitorious
PDC - Engenharia - Git e GitoriousPDC - Engenharia - Git e Gitorious
PDC - Engenharia - Git e Gitorious
 
Intro ao Git e GitHub
Intro ao Git e GitHubIntro ao Git e GitHub
Intro ao Git e GitHub
 
Workshop git para iniciantes
Workshop git para iniciantesWorkshop git para iniciantes
Workshop git para iniciantes
 
Intervalo técnico Git/SVN
Intervalo técnico Git/SVNIntervalo técnico Git/SVN
Intervalo técnico Git/SVN
 
Apresentação de Git
Apresentação de GitApresentação de Git
Apresentação de Git
 
Git
GitGit
Git
 
workshopgitparainiciantes1-190901224755.pdf
workshopgitparainiciantes1-190901224755.pdfworkshopgitparainiciantes1-190901224755.pdf
workshopgitparainiciantes1-190901224755.pdf
 
Introdução ao git
Introdução ao gitIntrodução ao git
Introdução ao git
 
Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)
 

Mais de Matheus Fidelis

Criando API's com HapiJS
Criando API's com HapiJSCriando API's com HapiJS
Criando API's com HapiJSMatheus Fidelis
 
Desbravando o REST com Python
Desbravando o REST com PythonDesbravando o REST com Python
Desbravando o REST com PythonMatheus Fidelis
 
Docker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaDocker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaMatheus Fidelis
 
Introdução a Containers Docker
Introdução a Containers DockerIntrodução a Containers Docker
Introdução a Containers DockerMatheus Fidelis
 
Aula 1 - Testando a Segurança de Sua Aplicação Web
Aula 1 - Testando a Segurança de Sua Aplicação WebAula 1 - Testando a Segurança de Sua Aplicação Web
Aula 1 - Testando a Segurança de Sua Aplicação WebMatheus Fidelis
 

Mais de Matheus Fidelis (6)

Road to serverless
Road to serverlessRoad to serverless
Road to serverless
 
Criando API's com HapiJS
Criando API's com HapiJSCriando API's com HapiJS
Criando API's com HapiJS
 
Desbravando o REST com Python
Desbravando o REST com PythonDesbravando o REST com Python
Desbravando o REST com Python
 
Docker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaDocker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG Cabreúva
 
Introdução a Containers Docker
Introdução a Containers DockerIntrodução a Containers Docker
Introdução a Containers Docker
 
Aula 1 - Testando a Segurança de Sua Aplicação Web
Aula 1 - Testando a Segurança de Sua Aplicação WebAula 1 - Testando a Segurança de Sua Aplicação Web
Aula 1 - Testando a Segurança de Sua Aplicação Web
 

O Fantástico Mundo de Git

  • 2. $ whoami Matheus Fidelis Desenvolvedor Web PHP na Superlogica Tecnologias DevOps & Security SysAdmin /fidelissauro /msfidelis $ WHOAMI
  • 3. ● GIT não é um sistema de controle de versão de código ● GIT é um sistema de controle de versão de ARQUIVOS ● Permite que pessoas possam contribuir para projetos de forma simultânea, editando, criando e removendo sem riscos de sobrescrita. ● GIT não se resume apenas a código e usar um sistema de versionamento é uma decisão sábia não só para Devs. ● Versiona arquivos PST, Imagens, Documentos, Binários e até mesmo… folhas de código :) # git log O QUE É GIT
  • 4.
  • 5. ▸Criado por Linus Torvalds para substituir um VCS (Version Control System) chamado Bit Keeper - Todos os arquivos são requisitados ao servidor ▸Criado a partir da necessidade de gerenciar o projeto do Kernel Linux com a comunidade. ▸Focado em performance e confiabilidade ▸Mais tarde se tornou um DVCS (Distributed Version Control Systems) - Todo cliente possui uma cópia completa do repositório. O QUE É GIT
  • 7. ▸GIT é apenas um serviço, em um servidor que manipula as informações e versões do repositórios. ▸O Github é uma hospedagem de Git. Ele fornece ferramentas para melhorar a usabilidade em um servidor de Git compartilhado com opções gratuitas e privadas. O GIT NÃO É O GITHUB
  • 9. INSTALAR O GIT É FÁCIL ~# sudo apt-get install git
  • 10. git pull git push git commit git add git checkout ALIASES DO GIT Plumbing and Porcelain
  • 11. git pull git push git commit git add git checkout ALIASES DO GIT Plumbing and Porcelain git rebase git reset git merge git fetch
  • 12. ALIASES DO GIT Plumbing and Porcelain git pull git push git commit git add git checkout git rebase git reset git merge git fetch cat-file write-tree read-tree commit-tree hash-object
  • 13. GIT OBJECTS ● BLOBS ● TREES ● COMMITS
  • 14.
  • 15. OS OBJETOS DO GIT - BLOBS ▸O Git usa um modelo de armazenamento uniforme para todos os seus objetos. ▸Cada objeto é identificado com o seu hash, mas o tipo do objeto é armazenado em metadados juntamente com o objeto. ▸Sempre que criamos ou modificamos um arquivo trackeado, é gerado um BLOB para o mesmo.
  • 16.
  • 17.
  • 18. OS OBJETOS DO GIT - TREES ▸Como o GIT sabe, qual arquivo está na minha branch atual, e qual pertence a qual? ▸Os blobs são organizados em trees, o que corresponde aos diretórios em uma estrutura de diretórios. ▸A tree representa uma arvore de diretório diretório, contendo uma mistura de blobs e outras trees. Caso seja um blob de tree dentro de uma tree, podemos identificar um subdiretório, e assim em diante...
  • 19. OS OBJETOS DO GIT - COMMITS ▸Um commit também é um objeto de hash, armazenado exatamente nos mesmos mecanismos em que blobs e trees. ▸Um commit é um hash da mensagem de commit, com um tipo de identificação das modificações.
  • 20.
  • 21.
  • 22.
  • 23. USANDO O GIT SEM FERRAMENTAS #SEJAROOTS
  • 24. USANDO O GIT NO GITHUB COM AUTENTICAÇÃO DE DUAS ETAPAS ▸Copie sua chave pública. ▸No Github vá em Settings -> SSH and GPG keys ▸Clique em New SSH Key e cole sua chave. ▸Pronto :)
  • 25. USANDO O GIT NO GITHUB COM AUTENTICAÇÃO DE DUAS ETAPAS ▸cat ~/.ssh/id_rsa.pub
  • 26. USANDO O GIT NO GITHUB COM AUTENTICAÇÃO DE DUAS ETAPAS
  • 27. CONFIGURANDO O GIT $ git config --global user.name “SEU NOME” $ git config --global user.email “SEU EMAIL” $ git config --global core.fileMode false $ git config --global diff.tool vimdiff
  • 28. ▸O repositório é onde o sistema de controle de versão mantém o rastreamento de todas as alterações realizadas no projeto. ▸Armazenam o estado atual do código, o histórico de alterações, quem fez, e um log que explica o porquê da alteração ter sido realizada. ▸De forma geral o repositório precisa ter tudo que é essencial para o projeto, tanto para codificar, modificar quanto para construir as versões. REPOSITORIO
  • 29. ▸WORKING DIRECTORY - Onde estão os arquivos vigentes, ainda não adicionados nem commitados ▸INDEX (STAGE) - É uma árvore temporária de arquivos adicionados. ▸HEAD (Ta valendo) - Area que aponta o ultimo commit de alterações confirmadas que você realizou. FLUXO DE TRABALHO NO GIT
  • 30. ▸Commited: O arquivo está sob controle de versão e não apresenta nenhuma modificação. ▸Commit candidate: Quando você adiciona as modificações (commit), esses serão os arquivos incluídos. ▸Modified: Arquivos que foram modificados. ▸Untracked: Arquivos novos, que ainda não estão sendo monitorados pelo Git. OS 4 ESTADOS DOS ARQUIVOS NO GIT
  • 31. INICIANDO UM REPOSITORIO LOCAL $ git init ▸Cria um repositório LOCAL com a estrutura do git ▸A pasta que contém a pasta “.git” ▸Contém todos os metadados do seu repositório e as versões disponíveis $ git remote add origin <servidor>
  • 32. CLONANDO UM REPOSITORIO REMOTO $ git clone https://github.com/user/repositorio.git VIA HTTPS $ git clone git@github.com:user/repositorio.git VIA SSH
  • 34. CRIANDO E DANDO CHECKOUT NAS BRANCHES $ git checkout -b novabranch branchorigem PARA CRIAR UMA BRANCH A PARTIR DE OUTRA $ git checkout branch TROCANDO DE BRANCH
  • 35.
  • 36. IDENTIFICANDO AS BRANCHES $ git branch PARA VERIFICAR AS BRANCHS UTILIZADAS $ git branch --all VERIFICAR TODAS AS BRANCHES EXISTENTES NO PROJETO
  • 37.
  • 38. O COMANDO MAIS IMPORTANTE DO GIT $ git status ▸Exibe o status da branch, e todos os arquivos. ▸Deve se usar sem moderação. ▸Exibe o status das árvores, branch atual, histórico de arquivos modificados, adicionados, criados e apagados
  • 39.
  • 40. ADICIONANDO UM ARQUIVO / TODOS $ git add arquivo.php $ git add pasta/ $ git add * ▸Adiciona os arquivos para o Index (Stage)
  • 41.
  • 42. REMOVENDO UM ARQUIVO DA INDEX $ git reset arquivo.php HEAD ▸Retorna o arquivo para o estago de unstaged
  • 43.
  • 44. CRIANDO UM COMMIT $ git commit -m "modifiquei o sistema de checkout" ▸Cria um commit das modificações executadas $ git commit -am "modifiquei os boletos" ▸Cria um commit das modificações executadas já adicionando todos os commits candidates (add * )
  • 45. CRIANDO PUSH PARA O REMOTE $ git push origin <branch> ▸Enviamos nossas modificações commitadas para o remote.
  • 46.
  • 47. SOLICITANDO UM PULL DAS MODIFICAÇÕES DO SERVIDOR $ git pull origin <branch> ▸Git pull é um “syntax sugar” para “git fetch ; git merge HEAD”, onde são baixadas as modificações da branch e as mesmas são “merjadas” com a HEAD atual.
  • 48.
  • 49. EFETUANDO O MERGE DE DUAS BRANCHES $ git merge <branch> ▸O Merge é uma das tarefas mais complexas que o git faz, perde somente para o rebase, outra alteranativa para o merge. ▸O Merge vai olhar para as duas branches (a atual e a de origem), encontrar os commits em comum e aplicar os commits que a branch atual não tem em cima.
  • 50.
  • 51. REBASE - ALTERNATIVA MAIS COMPLEXA AO MERGE $ git rebase <branch> ▸É mais uma forma de mover commits entre branchs do Git ▸No Rebase, os seus commits (acima da base) são temporariamente apagados. ▸A branch atual fica exatamente igual ao outro branch e seus commits são aplicados um a um no branch atual. ▸Ideal para manter o histórico intacto.
  • 52. VERIFICANDO UM DIFF DE UM ARQUIVO $ git diff file ▸É o visualizador de diffs default do git. ▸Ele mostra as linhas modificadas de um arquivo apontado. ▸Caso o arquivo seja muito grande ele vai abrir um “less” em shell para melhor visualização. ▸“+” Representa as linhas adicionadas ▸“-” Representa as linhas removidas/substituidas
  • 53.
  • 54. ▸O Netbeans tem plugin nativo (FODA) de Git que ajuda no historico e nos diffs ▸O Sublime tem alguns packages que ajudam -> Sublime GIT -> GitStatus ▸Atom tem muitos tbm... VERIFICANDO UM DIFF DE UM ARQUIVO
  • 55. IH, DEU RUIM! - It's Dangerous To Go Alone
  • 56. VERIFICANDO CONFLITOS $ git ls-files -u ▸Lista todos os conflitos encontrados durante o merge.
  • 57. VERIFICANDO CONFLITOS $ git status; $ git diff <arquivo>
  • 58.
  • 59.
  • 60. REVERTENDO ALTERAÇÕES LOCAIS $ git checkout -- <arquivo> ▸Modifiquei, deu ruim, é mais fácil refazer… CHECKOUT NELE! ▸Substitui as alterações do arquivo pelo conteúdo mais recente do mesmo presente do HEAD. ▸Alterações já adicionadas ao Index (Stage) e novos arquivos serão mantidos.
  • 61. VERIFICANDO OS LOGS DOS COMMITS $ git log ▸Verifica as alterações efetuadas no repositório e parseia de uma forma mais amigável. ▸Exibe as hashes dos commits e seus respectivos autores.
  • 62.
  • 63. REVERTENDO ALTERAÇÕES LOCAIS $ git fetch origin $ git reset --hard origin/master ▸ZOEI TODO O MEU LOCAL!!! E agora??? Descarte todos os commits locais e baixe uma nova cópia novinha do servidor! ▸Todas as suas alterações locais (sem o push) vão voltar para o estado original do servidor. ▸CUIDADO. Vai descartar tudo MESMO!
  • 64. ROLLBACK EM COMMITS $ git reset --hard hashdocommit $ git reset --hard HEAD˜10 ▸Podemos dar um reset na hash de um commit específico, voltando todo o estado do head para o estado commit especificado (git log) ▸Podemos voltar também um número específico de commits para trás.
  • 66. QUE A FORÇA ESTEJA COM VOCÊS! PERGUNTAS??