Introdução ao Git
1. Quem sou eu?
$ git config user.name "Victor Hugo Souza"
$ git config user.email "vhbsouza@gmail.com"
$ git config user.github "/vhbsouza"
$ git config user.work "Accurate Software Ltda."
$ git config user.skills "Java, Ruby, PHP, Angular, Git"
2. Agenda
3. O que é o Git? 
3.1 Controle de Versão
3.1.1 Sistema de Controle de Versão Local
 Como trabalhar em equipe se a ferramenta é pra uso
local?
3.1.2 Sistema de Controle de Versão
Centralizado
 Ponto único de falha já que qualquer problema no
servidor, perde‐se tudo!
3.1.3 Sistema de Controle de Versão
Descentralizado
 Cada cliente possui uma cópia completa do
repositório!
3.2 História do
Eu sou um desgraçado egocêntrico, então batizo
todos os meus projetos com meu nome. Primeiro
Linux, agora Git.
-- Linus Torvalds
“
“
 
2005
3.3 Principais Caracterís cas
3.3.1 Snapshots ao invés de patches
Patches (Lista de Mudanças entre arquivos)
3.3.1 Snapshots ao invés de patches
Snapshots ("Foto" do repositório inteiro)
3.3.2 Maioria das operações são
locais
 Sem LOCK em arquivos   
 Sem necessidade de rede para:  
COMMITS, LOG, DIFF
3.3.3 Git   integridade dos dados
Checksum ‐ Hash SHA‐1 
24b9da6552252987aa493b52f8696cd6d3b00373
3.3.4 Os Três Estados
Estado Área Descrição
Modified
Working
Directory
Arquivo modi cado que
ainda não foi consolidado
Staged
Staging
Area
Arquivo modi cado que é
selecionado para próx.
consolidação "Commit"
Commited
HEAD
Git
Directory
Arquivos consolidados
"commitados" no
Repositório
3.3.4 Os Três Estados
3.4 Vantagens e Desvantagens
Vantagens Desvantagens
Rápido Maior complexidade
Independência
(Descentralizado)
Maior necessidade de
estudo para um uso efetivo
Rami cações
Tech Talk: Linus Torvalds on git
4. Instalação
4.1 Windows 
Git for Windows
h ps://git‐for‐windows.github.io/
4.2 OSX
Homebrew
$ brew install git
h p://brew.sh/
4.3 Linux   
Debian/Ubuntu
$ sudo apt-get install git
Fedora
$ dnf install git
ArchLinux
$ pacman -S git
Demais distros ...
https://git-scm.com/download/linux
4.3.1 Auto Completar
$ cd ~
$ wget "https://goo.gl/hhzDgN" -O ".git-completion.bash"
$ echo "source ~/.git-completion.bash" >> .bashrc
5. Github
h p://github.com
Adeus enviar código por
5.1 Criar Conta
5.2 Criar Repositório
5.3 Adicionar chave SSH no Github
$ ls -al ~/.ssh
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/id_rsa
$ sudo apt-get install xclip
$ xclip -sel clip < ~/.ssh/id_rsa.pub
Inserir em Se ngs > SSH and GPG keys > Add
SSH key
5.4 Github Students Pack
h ps://educa on.github.com/pack
6. Git Básico
6.0 Ajuda
$ git help [comando]
ex.:  git help init
6.1 Configurar Git
$ git config [options]
.gitconfig
6.1.1 Configurar Usuário
$ git config --global user.name "Linus Torvalds"
$ git config --global user.name "linus@linux.com"
6.1.2 Cache ‐ Login
$ git config --global credential.helper cache
$ git config --global credential.helper 
'cache --timeout=7200'
Adicione --global para de nir escopo de
con guração à nível de usuário.
6.1.3 Configurar MERGETOOL
$ git config --global merge.tool meld
6.1.3 Verificar configuração
$ git config --global user.name
> Victor Hugo Souza
6.1.3 Listar Configurações
$ git config --list
user.name=Victor Hugo Souza
user.email=victor.souza@accurate.com.br
merge.tool=meld
credential.helper=cache --timeout=36000
log.decorate=short
color.ui=auto
color.interactive=auto
color.diff=auto
color.branch=auto
color.status=auto
pager.show-branch=true
format.numbered=auto
push.default=simple
--global também pode ser adicionado aqui.
6.2 Criar Repositório
Inicia repositório git dentro do diretório
$ git init
.git
6.3 Clonar Repositório
Faz cópia do repositório
$ git clone [options]
[url_do_repositorio] [diretorio]
HTTPS  ou  SSH
6.3 git clone [op ons] [diretorio]
Opção Descrição
--
branch
Clona a partir de branch especí ca
--
depth
Clona até um nivel de "profundidade" no
histórico do repositório
Se não for especi cado diretório ele utilizará o
padrão
6.4 Add
Adiciona arquivos para próximo snapshot(commit)
$ git add [options] <pathspec>
6.4 git add [op ons] <pathspec>
git add trabalho_*.c
Opção Descrição
-n,
--dry-run
Simula o que aconteceria se o comando
fosse executado
-p,
--patch
Adiciona interativamente
trechos de um arquivo
-A, --all git add *
Working Directory   Staging Area
6.5 Commit
Consolida dados selecionados para o repositório
$ git commit [options] <pathspec>
6.5 git commit [op ons] <pathspec>
Opção Descrição
-m,
--message
Mensagem obrigatória
--amend Recuperar ultimo commit
-p,
--patch
Adiciona interativamente
trechos de um arquivo
-A, --all git commit
Staging Area   Git Directory
6.6 Tags
Referências a pontos importantes do projeto
git tag
git tag -a v1.4 -m 'my version 1.4'
6.7 Status
Lista arquivos modificados em relação a ul ma versão
$ git status [options] <pathspec>
6.7 git status [op ons] <pathspec>
Opção Descrição
-s,
--short
Versão resumida do git status
--
ignored
Exibe arquivos ignorados
-vv
Exibe a diferença de conteúdo entre os
arquivos
6.8 Log
Lista histórico de modificações consolidadas
"commitadas" do projeto
$ git log [options]
6.8 git log [op ons]
Opção Descrição
-n <limit> Limita numero de commits
-p <limit> Exibe diff do commit
--oneline Versão condensada do histórico
--stat
Lista quais arquivos e nro de
linhas alteradas
--author="
<name>"
Lista commits por autor
$ git log --graph --decorate --oneline
6.9 Diff
Exibe diferença entre versões dos arquivos
$ git diff [options]
git diff 1234a 987d2
6.9 git diff [op ons]
$ git diff
diff --git a/benchmarks.rb b/benchmarks.rb
index 3cb747f..da65585 100644
--- a/benchmarks.rb
+++ b/benchmarks.rb
@@ -36,6 +36,10 @@ def main
@commit.parents[0].parents[0].parents[0]
end
+ run_code(x, 'commits 1') do
+ git.commits.size
+ end
+
run_code(x, 'commits 2') do
log = git.commits('master', 15)
log.size
6.10 Stash
Salva modificações em andamento em um rascunho
git stash [options] [config]
git stash apply stash@{0}
6.10 git stash [op ons] [config]
Opção Descrição
list Lista rascunhos disponiveis
show Exibe conteúdo de rascunho selecionado
save Salva modi cações em novo rascunho
apply
Exibe a diferença de conteúdo entre os
arquivos
branch
Cria rami cação com conteúdo do
rascunho
clear Remove todos os rascunhos
6.10 git stash [op ons] [config]
Config Descrição
-u Incluir arquivos não monitorados
--all Inclui arquivos ignorados no rascunho
--
patch
Escolhe interativamente trechos que irão
para o rascunho
6.10 git stash [op ons] [config]
Tracked 
Files
Untracked 
Files
Ignored
Files
git stash
git stash ­u
git stash ­a
git stash options
6.11 Ignorando Arquivos
Adicione um arquivo  .gitignore  para definir o que será
ignorado pelo git.
6.11 Ignorando Arquivos
# Este é um comentário
build/ #diretório
*.[oa] # ignora terminados em .o ou .a
# mas rastreie lib.a, mesmo que você tenha ignorado
# arquivos terminados em .a acima
!lib.a
*.class
*.exe
doc/*.txt
 Ignorando arquivo já versionado:
git rm --cached [nome_arquivo]
6.12 Branch
Ramificações que permitem modificações independentes
git branch
git branch <name>
git branch -d <name>
git branch -m <new-name>
git checkout -b <new-name>
6.12 Branch
6.13 Ciclo de Vida
6.13 Ciclo de Vida
7. Desfazendo modificações
7.1 Checkout
Descartando alterações da Working Directory
$ git checkout -- <nome_arquivo>
git checkout 123ade
git checkout 452eac trabalho.c
7.2 Reset
Descartando alterações reescrevendo histórico
$ git reset HEAD <nome_arquivo>
7.2 git reset <commit> [op ons]
Op ons Descrição
--hard
Desfaz alterações descartando Working
Directory
--soft
Desfaz alterações preservando
modi cações
--patch
Escolhe interativamente trechos que
irão para o rascunho
7.3 Revert
Descartando alterações sem remover histórico
(patching)
$ git revert <commit> [options]
7.3.1 Revert vs Reset
8. Colaboração
8.1 Remote
Adiciona repositorio remoto ao projeto
git remote add <name> <url>
git remote rm <name>
git remote rename <old-name> <new-name>
8.2 Fetch
Importa commits de repositório remoto para local
git fetch <remote>
git fetch <remote> <branch>
8.3 Merge
Mesclando commits
git merge <remote>/<branch>
8.3 Merge  <master>     <outro>
$ git checkout master
$ git merge origin/outro
8.4 Pull
Fetch + Merge
git pull <remote>
git pull <remote> <branch>
git pull --rebase <remote>  
8.4 Pull
8.4 Pull
8.4 Pull
8.5 Push
Enviando commits para repositório remoto
git push -u <remote> <branch>
git push origin v1.5
git push origin --tags
git push :<branch-name>
8.6 Ciclo de Vida ‐ Remote
9 GitKraken
h ps://www.gitkraken.com/
Obrigado 

Introdução ao Git - Semac 2016