2. Bruno Orlandi
● 4º Ano Ciências de Computação
– ICMC USP
● PET Computação
● Gosta de compartilhar
conhecimento
● @BrOrlandi
3. Instalando
● Instalar o Git:
sudo aptget
install git
● Instalar o Gitg:
sudo aptget
install gitg
http://gitscm.
com
4. Sobre o Minicurso
● Não será abordado a parte técnica do Git.
● Objetivo aprender Git e sua utilidade na
prática!
● Dúvidas e correções a qualquer momento!
5. Conteúdo
● Visão Geral
● Comandos Básicos
● Publicando e Colaborando
● Trabalho em Equipe
● Praticar
● Praticar
● Praticar
6. O que é Git-SCM
● Sistema de Controle de Versão Distribuído
● SCM → Software Configuration Management
● Criado por Linus Torvalds (2005)
● Auxiliar no Desenvolvimento do Linux
8. Gerência de Configuração de Software
● Durante o desenvolvimento do software
queremos saber:
– O que mudou e quando?
– Por que mudou?
– Quem fez a mudança?
– Podemos reproduzir esta mudança?
10. Gerência de Configuração de Software
● Artefatos:
– Código fonte
– Documentação do Software
– Manual de Usuário
11. Problema exemplo
● Você precisa editar um site hospedado em um
servidor
● Você faz o download via FTP
● Faz as alterações necessárias
● Manda os arquivos alterados para o servidor
via FTP
12. Problema exemplo
● Agora outro desenvolvedor também deve fazer
alterações no site
● Baixa o mesmo arquivo junto com você
● Edita e manda para o servidor depois de você
● Sobrescreve suas alterações
13. Controle de Versão resolve
● Controle de versão faz o 'merge' entre as
alterações.
23. Termos
● Repositório: onde são armazenados todos os
arquivos do projeto.
● Commit: registro de alterações realizadas.
Como se fosse um “checkpoint”.
● Branch: ramificação do projeto, uma linha de
desenvolvimento diferente
24. Termos
● Merge: incorporar alterações realizadas ou
unir branchs.
● Fork: bifurcação, uma cópia do projeto.
Ubuntu é um fork do Debian.
● Push: enviar as alterações para um repositório
remoto.
● Pull e Fetch: baixar as alterações feitas de um
repositório remoto. Pull realiza o merge.
27. Configurando
● Configure seu nome e email:
git config global
user.name
“Meu Nome”
git config global
user.email
meuemail@email.com
● Configure cores no terminal:
git config global
color.ui
true
28. Criando o Primeiro Repositório
git init PrimeiroRepo
● Será criado o diretório com o novo repositório
vazio.
cd PrimeiroRepo
● Todas as configurações do repositório ficam
na pasta .git
29. Crie seu primeiro arquivo
● Crie um arquivo, edite e adicione ao
repositório:
touch PrimeiroArquivo
gedit PrimeiroArquivo
git add PrimeiroArquivo
git commit m
“Criado o primeiro arquivo.”
30. Estados dos arquivos
● Não monitorado (untracked)
● Modificado (modified)
● Preparado (staged)
● Consolidado (commited)
32. Status dos arquivos
● Use o comando:
git status
● Exibe alterações desde o último commit
● Exibe os arquivos:
– Modificados
– Preparados para o Commit
– Novos que não estão no repositório
33. Status dos arquivos
● Edite o arquivo criado anteriormente
● Crie um novo arquivo e veja o seu status no
repositório
34. Explicando os comandos usados
git add <lista de arquivos>
● Adiciona os arquivos novos e modificados na
Staging Area, preparados para o próximo
Commit.
● git add all
● git add *.txt
● git add folder/*.txt
● git add folder/
● git add “*.txt”
35. Explicando comandos usados
git commit [m
“Message”]
● Registra o commit de todos os arquivos que
estão na Staging Area.
● Se o parametro de mensagem não for passado
abrirá um editor de texto para escrever a
mensagem
● git config global
core.editor
gedit
36. Git Workflow
● Basicamente a maior parte do trabalho com o
git consiste nestas tarefas:
– Editar
– Commitar
● Exercite estes comandos!
37. Log e Show
git log
● Lista os commits mais recentes.
git log –pretty=oneline
git shortlog
git log author=
User
git show [commit]
● Mostra as alterações de um commit
● Commit deve ser especificado pela chave
38. Dif
git diff
● Exibir diferenças entre commits e branchs
git diff [path]
● Diferença em relação ao stage ou ultimo
commit
git diff HEAD~1 HEAD
● Mostra o que foi alterado no último commit
39. Ferramenta externa Dif
git config global
merge.tool
git config global
diff.external
● Permite usar uma ferramenta externa para
usar no Diff e no Merge.
● No Eclipse:
40. Git Blame
● Encontrar os culpados pelas alterações em um
arquivo.
git blame <arquivo> L
10,15
● Vai exibir das linhas 10 a 15 quem escreveu
elas.
41. Git mv e rm
● Git não trata automaticamente arquivos
renomeados ou movidos.
git mv <path1> <path2>
git rm <file>
● Remove um arquivo do repositório.
● A diferença é que essas alterações já são
adicionadas ao staging.
42. Desfazendo alterações
git checkout <
path_or_file>
● Irá desfazer todas as alterações que não
estejam no Stage desde o último commit.
git checkout HEAD <
path_file>
● Desfazer as alterações desde o último commit
incluindo o Stage.
43. Git reset
git reset <file>
● Remove um novo arquivo da staging area.
● Não serve para desfazer alterações, para isso
use: checkout
44. Git checkout
git checkout <commit_id>
● Irá trocar HEAD para apontar para o commit.
● Altera o repositório para o estado daquele
commit.
● Útil para fazer testes antes e depois de
alterações.
git checkout master
● Para voltar o HEAD à posição normal.
45. Git Revert
● Reverter um commit pode ser bastante útil.
git revert <commit_id>
● Irá criar um novo commit que desfaz as
alterações do commit especificado.
47. Branch
● É uma ramificação do repositório
● Alterações(commits) ocorrem na branch
● Muito útil para trabalhos colaborativos
● Branchs de desenvolvimento facilitam o
controle
git branch
48. Branching
git branch new_branch
git checkout new_branch
● Cria e troca para uma nova branch
● É possível comparar branchs com diff:
git diff master new_branch
49. Merge
● Uma tarefa muito comum com branchs é
realizar o merge com outra branch.
git checkout master
git merge new_branch
● Excluir uma branch:
git branch d
new_branch
50. Conflitos
● Conflitos podem acontecer ao unirmos
alterações
● Acontecem quando ramificações diferentes
possuem as mesmas linhas nos mesmos
arquivos editadas diferentes
51. Merge com Conflito
● Ao tentar fazer o Merge se houver conflitos
será acusado e anotado nos arquivos.
● O repositório fica em estado aguardando você
consertar os conflitos manualmente.
● Após isso deve ser feito um commit indicando
que o conflito foi resolvido.
52. Git Rebase
● Quando a Branch pai sofre alterações e desejase
aplicar estas alterações para Branchs filhas.
● Branchs filhas devem realizar o rebase:
git rebase master
● Pode acontecer conflitos!
● Diferença do Merge é que adiciona os commits
antes dos commits da branch.
53. Git Rebase
● Quando a Branch pai sofre alterações e desejase
aplicar estas alterações para Branchs filhas.
● Branchs filhas devem realizar o rebase:
git rebase master
● Pode acontecer conflitos!
● Diferença do Merge é que adiciona os commits
antes dos commits da branch.
54. Tag
● Útil para definir versões estáveis do projeto.
● Semelhante a Branch porém não sofre mais
alterações.
● Guarda o estado atual da branch.
git tag [nome da tag]
git push <remote> <tag>
55. Interfaces Gráficas GUI
● Pelo terminal se faz tudo.
● Interfaces gráficas ajudam na visualização e
auxiliam em algumas tarefas.
● Recomendadas:
– Egit – Plugin para Eclipse
– Gitg – Para Linux
– SourceTree – Para Windows
● Não Recomendado: Github for Windows
57. Remote
● Repositório remoto, hospedado em um
servidor.
● São referenciados por uma URL.
● Vamos trabalhar com repositório remoto no
Github.
● Outra opção interessante Bitbucket.
58. Remote
● Podem receber vários commits.
● Sincronizar o trabalho colaborativo.
● Exige chave SSH.
git remote add origin <URL>
59. Criar conta no Github
● Acessem https://github.com/
● Criem uma conta utilizando utilizando o
mesmo email
configurado no git config.
● Github permite autenticação por chaves SSH.
Use isto!
60. Criar um repositório remoto
● Crie um repositório no Github.
● Inicialize um repositório local.
● Configure o repositório remoto.
● Crie um arquivo README.md
● Faça o upload das alterações.
61. Push
● Enviar alterações (commits) de uma branch
para o repositório remoto.
● A primeira vez:
git push u
origin master
● O envio é rejeitado se o repositório local não
estiver sincronizado.
git push <remote> <branch>
git push
62. Pull
● Baixa as alterações do repositório remoto e
realiza o Merge automático com o repositório
local.
● Mantém o repositório sincronizado com os
últimos commits de uma branch.
● Permite baixar novas branchs que não foram
criadas localmente.
git pull
git pull <remote> <nova>
63. Git Clone
● Baixa o repositório remoto.
● Outra forma de criar um repositório local.
● Já vem com o remote configurado.
git clone <URL>
64. Fork no Github
● Copia um repositório remoto de outro usuário
para o seu usuário no Github.
● É assim que começa a contribuição para
outros projetos.
● Você teria uma cópia independente do
repositório original, podendo fazer quaisquer
alterações.
65. Issues no Github
● Tradução: Questões.
● Reportar bugs.
● Organizar tarefas a serem feitas.
● Permite comentários dos usuários.
● Pode referenciar commits.
66. Pull Request
● O grande simbolo de colaboração.
● É quando você solicita que sua alterações
sejam unidas a uma branch no mesmo
repositório ou a um repositório que sofreu o
fork.
● Pull request podem ser comentados e
referenciados no Github.
● Muito útil para o trabalho colaborativo.
68. Caso de Exemplo
● Extensão para GNOME: Desktop Scroller.
● Cria uma borda de rolagem entre os Desktops.
● Permite configurar onde a borda é ativa.
● Hoje mantido por outros usuários.