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órico
De 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
Control
Nova 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 GIT
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
Instalação - Windows
Instalando GIT
Linux
Instalação - Linux
Instalação - Linux
Instalação - Linux
Instalação - Linux
Configuração
Configuração
• Globais (ou de sistema)
• Path de instalaçãoetcgitconfig
• “git config --system”
• Por usuário
• Diretório de usuário.gitconfig
• “git config --global”
• Por projeto
• Diretório do projeto.gitconfig
• “git config”
Configuração
• Informações pessoais
Configuração
• Informações pessoais
Command Line
git init
Inicia a estrutura de diretórios para que o git efetue o
tracking em um determinado diretório.
git init
git add
Com 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 commit
Nesse momento o git adiciona em seu repositório local as
alterações feitas.
git commit
git log
Possibilita a visualização do histórico de commits em seu
repositório.
git log
git log
git status
Visualiza 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 diff
Visualizando as alterações feitas nos arquivos.
git diff
git diff
git diff
git diff
git diff
git rm
Removendo arquivos de nossos repositórios.
git rm
git rm
git rm
git rm
git rm
git mv
Renomeando/Movendo arquivos em nosso repositório.
git mv
git mv
git mv
git checkout
Desfazendo alterações.
git checkout
git checkout
git checkout
git reset
Desfazendo alterações no staging index.
git reset
git reset
git commit --amend
Alterando o último commit.
git commit --amend
git commit --amend
git commit --amend
.gitignore
Ignorando arquivos
git ignore
git ignore
git ignore
Comunicação remota
Push, 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
merge
Commit 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

Primeiros passos - GIT