Instrutor
Stefan Horochovec• Arquiteto de Software;• Adobe Community Manager;• Oreilly Community Author;• BlackBerry Developer Manager;• Professor/Autor/Palestrante;• 13 anos de experiência no desenvolvimento WEB;• 5 anos de experiência no desenvolvimento Mobile;• 7 anos como líder de grupo de desenvolvedores;• Blog: http://www.horochovec.com.br/• Twitter: @horochovec
Agenda• Histórico;• Distributed Version Control;• Instalação
• Windows;• Linux;
• Configurações;• Command Line
• git init;• git add;• git commit;• git log;• git status;• git diff;• git rm;• git mv;• git checkout;• git reset;• git commit –amend;
• .gitignore;• Comunicação remota;
HistóricoDe onde viemos e para onde estamos caminhando
Histórico
• Source Code Control System – SCCS• 1972;• Código fechado;• Distribuído gratuitamente com Unix;• O versionamento era baseado em SNAPSHOTs das alterações do arquivo.
Para obter versões recentes, o Diff das alterações eram aplicados na ordem cronológica do versionamento, uma operação lenta em arquivos com grandes números de modificações;
• Revision Control System – RCS• 1982;• Open-source;• Cross-plataform;• O versionamento era baseado em manter disponível a última alteração
do arquivo. Para obter versões antigas, o PATH das alterações era aplicado de forma retroativa ao último arquivo versionado, garantindo assim uma maior velocidade comparando com o SCCS;
Histórico
• Concurrent Version System – CVS• 1986 - 1990;• Open-source;• Criado o conceito de repositório;• Trabalhava apenas com arquivos textos;• Múltiplas pessoas poderiam trabalhar no mesmo arquivo;
• Apache Subversion – SVN• 2000;• Open-source;• Versionamento de arquivos binários;• O versionamento era baseado em diretórios, e não em arquivos.
Surge o conceito de REVISION;• Uma REVISION baseava que determinados arquivos foram
alterados naquele “commit”.
Histórico
• Git – Git• 2005;• Criado por Linus Trovalds;• Distributed Version Control;• Mais rápido que outros SCM (até 100x mais);• Utilizado por empresas como:
• Adobe;• Apache Software Foundation;• Atlassian (JIRA, Confluence);• BlackBerry;• Globo.com;• Google;• Petrobras;• Rede Globo;• Oracle;
Distributed Version ControlNova filosofia para controle de versões
Distributed Version Control
• Filosofia anterior• Único repositório central contendo uma versão centralizada;• Cópias locais do repositório central com constantes check-outs
para sincronização;
• Nova filosofia• Não existe o conceito de um único repositório;• Alterações de código são mantidas em “change sets”;• O foco muda para controle de change sets entre repositórios;
Arquitetura GIT
Arquitetura GIT
• Modelo SVN
Workspace
Repositório
Commit Check-out
Arquitetura GIT
• Modelo GIT
Staging Index
Repositório
Add’s
Fetch
Workspace
Commit
Instalando GITWindows
Instalação - Windows
Instalação - Windows
Instalação - Windows
Instalação - Windows
Instalação - Windows
Instalação - Windows
Instalação - Windows
Instalação - Windows
Instalação - Windows
Instalação - Windows
Instalação - Windows
Instalando GITLinux
Instalação - Linux
Instalação - Linux
Instalação - Linux
Instalação - Linux
Configuração
Configuração
• Globais (ou de sistema)• Path de instalação\etc\gitconfig• “git config --system”
• Por usuário• Diretório de usuário\.gitconfig• “git config --global”
• Por projeto• Diretório do projeto\.git\config• “git config”
Configuração
• Informações pessoais
Configuração
• Informações pessoais
Command Line
git initInicia a estrutura de diretórios para que o git efetue o tracking em um determinado diretório.
git init
git addCom o comando “add”, o git irá verificar todas as alterações feitas a partir do seu diretório e irá adicioná-las ao tracking de alterações.
git add
git add
git commitNesse momento o git adiciona em seu repositório local as alterações feitas.
git commit
git logPossibilita a visualização do histórico de commits em seu repositório.
git log
git log
git statusVisualiza a lista de alterações desde o último commit.
git status
git status
git status
git status
git status
git status
git status
git status
git status
git status
git diffVisualizando as alterações feitas nos arquivos.
git diff
git diff
git diff
git diff
git diff
git rmRemovendo arquivos de nossos repositórios.
git rm
git rm
git rm
git rm
git rm
git mvRenomeando/Movendo arquivos em nosso repositório.
git mv
git mv
git mv
git checkoutDesfazendo alterações.
git checkout
git checkout
git checkout
git resetDesfazendo alterações no staging index.
git reset
git reset
git commit --amendAlterando o último commit.
git commit --amend
git commit --amend
git commit --amend
.gitignoreIgnorando arquivos
git ignore
git ignore
git ignore
Comunicação remotaPush, fetchs, merges e forks
Comunicação remota
Servidor Remoto
Computador Local
Commit 1 Commit 2 Commit 3master
Comunicação remota
Servidor Remoto
Computador Local
Commit 1 Commit 2 Commit 3
push
master
Comunicação remota
Servidor Remoto
Computador Local
Commit 1 Commit 2 Commit 3
push
master
Commit 1 Commit 2 Commit 3master
Comunicação remota
Servidor Remoto
Computador Local
Commit 1 Commit 2 Commit 3
push
master
Commit 1 Commit 2 Commit 3master
Commit 1 Commit 2 Commit 3origin/master
Comunicação remota
Servidor Remoto
Computador Local
Commit 1 Commit 2 Commit 3master
Commit 1 Commit 2 Commit 3master
Commit 1 Commit 2 Commit 3origin/master
Commit 4
Comunicação remota
Servidor Remoto
Computador Local
Commit 1 Commit 2 Commit 3master
Commit 1 Commit 2 Commit 3master
Commit 1 Commit 2 Commit 3origin/master
Commit 4
fetch
Comunicação remota
Servidor Remoto
Computador Local
Commit 1 Commit 2 Commit 3master
Commit 1 Commit 2 Commit 3master Commit 4
fetch
Commit 1 Commit 2 Commit 3origin/master Commit 4
Comunicação remota
Servidor Remoto
Computador Local
master
Commit 1 Commit 2 Commit 3master Commit 4
mergeCommit 1 Commit 2 Commit 3origin/master Commit 4
Commit 1 Commit 2 Commit 3 Commit 4
Real World!Criando um projeto Java e um repositório git.
Real World – Projeto Java
Real World – Projeto Java
Real World – Projeto Java
Real World – Repositório Git
Real World – Repositório Git
Real World – Repositório Git
Real World – Repositório Git
Real World – Repositório Git
Real World – Repositório Git
Real World – Repositório Git
Real World – Repositório Git
Real World – Repositório Git
Real World – Repositório Git
Real World – Repositório Git
Real World – Repositório Git
Real World – Repositório Git
Real World – Repositório Git
Real World – Repositório Git
Real World – Repositório Git
Real World – Repositório Git
Real World – Repositório Git
Real World – Repositório Git
Real World – Repositório Git
Real World – Repositório Git
Real World – Repositório Git
Real World – Repositório Git
Real World – Repositório Git
Real World – Repositório Git
Real World!Fork de projetos
Real World – Fork
Real World – Fork
Real World – Fork
Real World – Fork
Real World – Fork
Real World – Fork
Real World – Fork
Real World – Fork
Real World – Fork
Real World – Fork
Real World – Fork
Real World – Fork
Real World – Fork
Real World – Fork
Real World – Fork
Real World – Fork
Real World – Fork
Real World – Fork
Obrigado“O talento vence jogos, mas só o trabalho em equipe ganha campeonatos.” – Michael Jordan