Pablo Machado 
machadoum@mail.com
1. Introdução 
2. Configuração 
3. Primeiros passos 
4. Como tudo funciona? (baixo nível) 
4. Trabalhando com Branchs 
5. Repositórios remotos 
6. WorkFlow 
7. Fiz merda, e agora?
Introdução
Histórico 
Initially designed and developed by Linus Torvalds for Linux 
kernel development in 2005. 
➔ Distribuido 
➔ Alta performance 
➔ Free 
➔ Confiabilidade 
Take CVS as an example of what not to do. 
Significado: "unpleasant person".
"I'm an egotistical bastard, and I name all my projects 
after myself. First 'Linux', now 'git'.
Vantagens 
➔ Trabalhar offline 
➔ Velocidade 
➔ Versionamento local 
➔ Distribuido 
➔ Suporte a grandes projetos 
Um mundo de possibilidades
Distribuido X Centralizado
Configurações
Instalando 
$ apt-get install git 
Usuário 
$ git config --global user.name "Eu" 
$ git config --global user.email meuEmail@examplo.com 
Ferramenta de merge 
$ git config --global merge.tool vimdiff 
Ferramenta de edição de texto 
$ git config --global core.editor emacs 
Alias 
$ git config --global alias.co checkout
Primeiros Passos
➔ git init 
➔ git clone 
➔ git config 
➔ git add 
➔ git commit 
➔ git status 
➔ git log
Meu primeiro commit 
➔ Criar arquivo 
➔ Adicionar arquivo 
➔ Commitar arquivo 
Stash
Status do repositório 
$ git status 
$ git log 
$ git log --pretty=oneline 
$ git diff 
$ git log --pretty=format:"%h %s" --graph 
git log --stat
Como tudo funciona? 
(baixo nível)
➔ Gerência de estados (snapshots) 
➔ Nada é apagado 
Commit contêm: 
Arvore 
Autor 
Comitador 
Mensagem 
Ponteiro para o commit anterior
Qual é a mágica? 
$ git init 
$ echo “ola mundo” > oi.txt 
$ git add . 
$ git commit -m “meu primeiro commit” 
$ find .git/objects/ -type f | awk -F '/' '{print $3$4}' | git cat-file --batch
Trabalhando com Branchs
Branch / checkout 
Ponteiro para um commit 
Precisa de um nome 
$ git branch 
$ git branch -r 
$ git branch working 
$ git branch -t feature
Merge 
Mescla os commits de 2 branchs 
Algoritmos de Merge 
➔ 3-way merge 
➔ fast-forward merge 
$ git merge branchName
Resolvendo conflitos 
Requisitos: 
➔ 2 branchs com mesma origem 
➔ Realizar alterações conflitantes 
➔ Realizar Merge nos 2 branchs 
$ git merge testeConflito 
$ Auto-merging arquivo.txt 
CONFLICT (content): Merge conflict in arquivo.txt 
Automatic merge failed; fix conflicts and then commit the result. 
$ git mergetool 
$ git commit
Rebase 
Altera o histórico 
Permite apagar commits da história 
$ git rebase master 
$ git rebase -i master
Rebase 
Altera o histórico 
Permite apagar commits da história 
$ git rebase master 
$ git rebase -i master
Remote / Clone 
Adicionar/Editar repositórios remotos 
Protocolos 
➔ Local 
/opt/git/project.git 
➔ SSH 
user@server:project.git 
Git 
git:localhost/your-path/project-X 
➔ HTTP/S 
http://example.com/gitproject.git 
$ git remote add NAME URL 
$ git clone URL 
http://git-scm.com/book/en/Git-on-the-Server-The-Protocols
Fetch / Push / Pull 
$ git fetch <remote> 
$ git fetch <remote> <branch> 
$ git pull <remote> 
$ git push <remote> <branch> 
https://www.atlassian.com/git/tutorial/remote-repositories
Fiz merda, e agora?
$ git commit --amend 
$ git clean -n 
Dicas
Eu quero ser um mestre Jedi! 
http://pcottle.github.io/learnGitBranching/ 
https://www.atlassian.com/git 
Pro Git - Scott Chacon

Git - Visão Geral

  • 1.
  • 2.
    1. Introdução 2.Configuração 3. Primeiros passos 4. Como tudo funciona? (baixo nível) 4. Trabalhando com Branchs 5. Repositórios remotos 6. WorkFlow 7. Fiz merda, e agora?
  • 3.
  • 4.
    Histórico Initially designedand developed by Linus Torvalds for Linux kernel development in 2005. ➔ Distribuido ➔ Alta performance ➔ Free ➔ Confiabilidade Take CVS as an example of what not to do. Significado: "unpleasant person".
  • 5.
    "I'm an egotisticalbastard, and I name all my projects after myself. First 'Linux', now 'git'.
  • 6.
    Vantagens ➔ Trabalharoffline ➔ Velocidade ➔ Versionamento local ➔ Distribuido ➔ Suporte a grandes projetos Um mundo de possibilidades
  • 7.
  • 8.
  • 9.
    Instalando $ apt-getinstall git Usuário $ git config --global user.name "Eu" $ git config --global user.email meuEmail@examplo.com Ferramenta de merge $ git config --global merge.tool vimdiff Ferramenta de edição de texto $ git config --global core.editor emacs Alias $ git config --global alias.co checkout
  • 10.
  • 11.
    ➔ git init ➔ git clone ➔ git config ➔ git add ➔ git commit ➔ git status ➔ git log
  • 12.
    Meu primeiro commit ➔ Criar arquivo ➔ Adicionar arquivo ➔ Commitar arquivo Stash
  • 13.
    Status do repositório $ git status $ git log $ git log --pretty=oneline $ git diff $ git log --pretty=format:"%h %s" --graph git log --stat
  • 15.
    Como tudo funciona? (baixo nível)
  • 16.
    ➔ Gerência deestados (snapshots) ➔ Nada é apagado Commit contêm: Arvore Autor Comitador Mensagem Ponteiro para o commit anterior
  • 17.
    Qual é amágica? $ git init $ echo “ola mundo” > oi.txt $ git add . $ git commit -m “meu primeiro commit” $ find .git/objects/ -type f | awk -F '/' '{print $3$4}' | git cat-file --batch
  • 18.
  • 19.
    Branch / checkout Ponteiro para um commit Precisa de um nome $ git branch $ git branch -r $ git branch working $ git branch -t feature
  • 20.
    Merge Mescla oscommits de 2 branchs Algoritmos de Merge ➔ 3-way merge ➔ fast-forward merge $ git merge branchName
  • 21.
    Resolvendo conflitos Requisitos: ➔ 2 branchs com mesma origem ➔ Realizar alterações conflitantes ➔ Realizar Merge nos 2 branchs $ git merge testeConflito $ Auto-merging arquivo.txt CONFLICT (content): Merge conflict in arquivo.txt Automatic merge failed; fix conflicts and then commit the result. $ git mergetool $ git commit
  • 22.
    Rebase Altera ohistórico Permite apagar commits da história $ git rebase master $ git rebase -i master
  • 23.
    Rebase Altera ohistórico Permite apagar commits da história $ git rebase master $ git rebase -i master
  • 24.
    Remote / Clone Adicionar/Editar repositórios remotos Protocolos ➔ Local /opt/git/project.git ➔ SSH user@server:project.git Git git:localhost/your-path/project-X ➔ HTTP/S http://example.com/gitproject.git $ git remote add NAME URL $ git clone URL http://git-scm.com/book/en/Git-on-the-Server-The-Protocols
  • 25.
    Fetch / Push/ Pull $ git fetch <remote> $ git fetch <remote> <branch> $ git pull <remote> $ git push <remote> <branch> https://www.atlassian.com/git/tutorial/remote-repositories
  • 26.
  • 31.
    $ git commit--amend $ git clean -n Dicas
  • 34.
    Eu quero serum mestre Jedi! http://pcottle.github.io/learnGitBranching/ https://www.atlassian.com/git Pro Git - Scott Chacon