Bruno Orlandi
Git e contribuição para
projetos Open Source
Bruno Orlandi
●
4º Ano Ciências de Computação 
– ICMC USP
●
PET Computação
●
HTML5 Web e Mobile
●
Gosta de compartilhar 
conhecimento
●
@BrOrlandi
Instalando
●
Instalar o Git:
sudo apt­get install git
●
Instalar o Gitg:
sudo apt­get install gitg
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!
Conteúdo
●
Visão Geral
●
Comandos Básicos
●
Publicando e Colaborando
●
Trabalho em Equipe
●
Praticar
●
Praticar
●
Praticar
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
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?
Gerência de Configuração de Software
●
Identificação
●
Documentação
●
Controle
●
Auditoria
Gerência de Configuração de Software
●
Artefatos:
– Código fonte
– Documentação do Software
– Manual de Usuário
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
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
Controle de Versão resolve
●
Controle de versão faz o 'merge' entre as 
alterações.
Distribuído
Controle de Versão
Controle de Versão
O que é Github
●
Servidor de repositórios Git
●
Surgiu em 2008
●
+5 milhões de usuários
Estão no Github
Usam Git
Alternativas
●
Subversion (SVN)
●
Mercurial
●
CVS ­ Concurrent Versioning System
●
Bazaar
●
Git é o mais rápido e eficiente
Servidores
Servidores/Suporte git Mercurial SVN
Github V
Bitbucket V V
SourceForge V V V
Google Code V V V
Antes de começar alguns termos técnios!
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
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.
Vamos começar na prática!
Instalando
●
Instalar o Git:
sudo apt­get install git
●
Instalar o Gitg:
sudo apt­get install gitg
Help
●
Quando precisar de ajuda:
git help <command>
Configurando
●
Configure seu nome e e­mail:
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
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
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.”
Estados dos arquivos
●
Não monitorado (untracked)
●
Modificado (modified)
●
Preparado (staged)
●
Consolidado (commited)
Estados dos arquivos
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
Status dos arquivos
●
Edite o arquivo criado anteriormente
●
Crie um novo arquivo e veja o seu status no 
repositório
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”
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
Git Workflow
●
Basicamente a maior parte do trabalho com o 
git consiste nestas tarefas:
– Editar
– Commitar
●
Exercite estes comandos!
Log e Show
git log
●
Lista os commits mais recentes.
git log –pretty=oneline
git shortlog
git show [commit]
●
Mostra as alterações de um commit
●
Commit deve ser especificado pela chave
●
Sem parâmetro mostra o ultimo commit
Dif
git diff
●
Exibir diferenças entre commits e branchs
git diff [path]
●
Diferença no diretório
git diff HEAD~1 HEAD
●
Mostra o que foi alterado no último commit
Ferramenta externa Dif
git config ­­global merge.tool 
kdiff3
●
Permite usar uma ferramenta externa para 
usar no Diff e também no Merge.
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.
Git mv e rm
●
Git não trata perfeitamente 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.
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.
Git reset
git reset <file>
●
Remove um novo arquivo da staging area.
●
Não serve para desfazer alterações, para isso 
use: checkout ­­ 
●
Possui outras funcionalidades.
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.
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.
Branching
Criando ramificações do repositório
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
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
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
Git Rebase
●
Quando a Branch pai sofre alterações e 
deseja­se aplicar estas alterações para Branchs 
filhas.
●
Branchs filhas devem realizar o rebase:
git rebase master
●
Pode acontecer conflitos!
Conflitos
●
Conflitos podem acontecer ao unirmos 
alterações
●
Acontecem quando ramificações diferentes 
possuem as mesmas linhas nos mesmos 
arquivos editadas diferentes
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.
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>
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
Github e Remotes
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.
Remote
●
Podem receber vários commits.
●
Sincronizar o trabalho colaborativo.
●
Exige chave SSH.
git remote add origin <URL>
Criar conta no Github
●
Acessem https://github.com/
●
Criem uma conta utilizando utilizando o 
mesmo e­mail configurado no git config.
●
Gerar chaves SSH no Linux:
https://help.github.com/articles/generating­s
sh­keys
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.
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
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>
Git Clone
●
Baixa o repositório remoto.
●
Outra forma de criar um repositório local.
●
Já vem com o remote configurado.
git clone <URL>
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.
Issues no Github
●
Tradução: Questões.
●
Reportar bugs.
●
Organizar tarefas a serem feitas.
●
Permite comentários dos usuários.
●
Pode referenciar commits.
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.
Vamos praticar mais!
Caso de Exemplo
●
Extensão para  GNOME: Desktop Scroller.
●
Cria uma área de rolagem entre os Desktops.
●
Permite configurar onde a área é ativa.
●
Hoje mantido por outros usuários.
Dúvidas?
Extras
●
.gitignore
●
Git commit ­­ammend
●
Git Stash e Stash Pop
●
Milestones
●
Hooks
●
Github pages
Convite
●
Palestras
●
Minicursos
●
Concursos
●
Prêmios
●
Feira de recrutamento
●
http://semcomp.icmc.usp.br/
●
facebook.com/semcomp
Contato
●
@BrOrlandi
●
brorlandi@gmail.com
●
www.slideshare.net/BrunoOrlandi
Obrigado!
São Carlos - 2014
Obrigado!

Minicurso Git