Bruno Orlandi
Git e contribuição para
projetos Open Source
2ª Edição
Bruno Orlandi
●
5º Ano BCC – ICMC USP
●
P&D – Ícaro Technologies
●
Desenvolvimento Web
●
Gosta de compartilhar 
conhecimen...
Instalando
●
Instalar o Git:
sudo apt­get install git
●
Escolha sua interface gráfica:
– https://git­scm.com/downloads/gui...
Sobre o Minicurso
●
Não será abordado a parte técnica do Git.
●
Objetivo aprender Git e sua utilidade na 
prática!
●
Dúvid...
Conteúdo
●
Controle de Versão
●
Comandos Básicos
●
Ramificações
●
Publicando e Colaborando
●
Exercícios
O que é Git-SCM
●
Sistema de Controle de Versão Distribuído
●
SCM   Source Control Management→
●
Criado por Linus Torvalds...
Gerência de Configuração de
Software
Gerência de Configuração de Software
●
Durante o desenvolvimento do software 
queremos saber:
– O que mudou e quando?
– Po...
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 código que está no seu 
Dropbox
●
Você faz o download do arquivo
●
Faz as altera...
Problema exemplo
●
Seu colega também quer editar o código
●
Vocês baixam o mesmo arquivo junto
●
Você edita e salva no Dro...
Controle de Versão resolve
●
Controle de versão faz o 'merge' entre as 
alterações.
Git é Distribuído
Controle de Versão
O que é GitHub
●
Servidor de repositórios Git
●
Surgiu em 2008
●
+10 milhões de repositórios
●
+10 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
GitLab V
Bitbucket V V
SourceForge V V V
Google Code V V V
Vamos começar na prática!
Instalando
●
Instalar o Git:
sudo apt­get install git
●
Escolha sua interface gráfica:
– https://git­scm.com/downloads/gui...
Criar conta no Github
●
Acessem https://github.com/
●
Criem sua conta.
●
Lembre­se, através dessa conta você poderá 
contr...
Ajuda
●
Quando precisar de ajuda:
git help <command>
●
Site oficial:
– https://git­scm.com/ 
Criando o Primeiro Repositório
git init PrimeiroRepo
●
Será criado o diretório configurado como um 
repositório Git
●
Toda...
Crie seu primeiro arquivo
●
Crie um arquivo, edite e adicione ao 
repositório:
gedit PrimeiroArquivo
git add PrimeiroArqui...
Configurando
●
Configure seu nome e e­mail:
git config ­­global user.name 
“MeuUserName”
git config ­­global user.email 
“...
Git Status e Log
●
Comando para ver o status do repositório
git status
●
Ver últimos commits no repositório:
git log
Criar um repositório remoto
●
Crie um repositório no Github.
●
Configure o repositório remoto.
●
Crie um arquivo README.md...
Git Push
●
Enviar alterações (commits) de uma branch 
para o repositório remoto.
●
A primeira vez:
git push ­u origin mast...
Git Add
git add <lista de arquivos>
●
Adiciona os arquivos novos e modificados para 
o próximo commit
git add .
Git Commit
git commit [­m “Message”]
●
Registra o commit com todos os arquivos que 
usou “git add”
●
Se o parametro de men...
Git Workflow
●
Basicamente a maior parte do trabalho com o 
git consiste nestas tarefas:
– Editar
– Commitar
– Sincronizar...
Revisão dos comandos
● git status
● git log
● git add
● git commit
● git push
Status dos arquivos
●
Edite o arquivo criado anteriormente
●
Crie um novo arquivo e veja o seu status no 
repositório
Estados dos arquivos
●
Não monitorado (untracked)
●
Modificado (modified)
●
Preparado (staged)
●
Consolidado (commited)
Estados dos arquivos
Dif
git diff
●
Exibir diferenças entre commits e branchs
git diff [path]
●
Diferença no diretório
git diff HEAD~1
●
Mostra...
Ferramenta externa Dif
git config ­­global diff.tool 
diffmerge
●
Permite usar uma ferramenta externa para 
usar no Diff e...
Exercício 1
●
Remova uma linha de um arquivo
●
Adicione uma nova linha no mesmo arquivo
●
Adicione um novo arquivo com pel...
Git Clone
git clone <URL>
●
Baixa o repositório remoto.
●
Outra forma de criar um repositório local.
●
Já vem com o remote...
Git Pull
git pull 
●
Baixa as alterações do repositório remoto.
●
Mantém o repositório sincronizado com os 
últimos commit...
Exercício 2
●
Configure um colaborador para seu 
repositório.
●
Ele deve clonar seu repositório e fazer um 
commit nele.
●...
Navegar no histórico
git checkout <commit> <file>
●
Permite ver como um arquivo ou todo o 
repositório estava em um determ...
Git checkout
git checkout <commit>
●
Altera o repositório para o estado daquele 
commit.
●
Útil para fazer testes antes e ...
Desfazendo alterações
git checkout ­­ <path_or_file>
●
Irá desfazer todas as alterações que não 
estejam no Stage desde o ...
Git Revert
git revert <commit>
●
Irá criar um novo commit que desfaz as 
alterações do commit especificado.
●
Útil para de...
Git reset
git reset <commit>
●
Resetar o repositório para um determinado 
commit.
git reset ­­hard <commit>
●
Resetar e re...
Conflitos
●
Conflitos podem acontecer ao unirmos 
alterações.
●
Acontecem quando versões diferentes 
possuem as mesmas lin...
Conflitos
Linha 1
Linha 2
Linha 3
Linha 1
Linha 2
Linha 3
Nova linha
Linha 1
Linha 2
Linha 3
Quarta linha
?
Exercício 3
●
Crie um conflito no repositório do seu par.
●
Seu par deve editar o mesmo arquivo que 
você.
●
Você deve faz...
Branching
Criando ramificações do repositório
Branch
●
É uma lista de commits.
●
Representa ramificações no repositório.
●
Muito útil para trabalhos colaborativos.
●
Br...
Branching
git branch <nova_branch>
●
Cria uma nova branch.
git branch ­d <branch>
●
Excluir uma branch.
Git Checkout Branch
git checkout <branch>
●
Muda para a branch.
●
Seu repositório passa a ter os commits que a 
branch pos...
Exercício 4
●
Crie uma nova branch no seu repositório.
●
Mude para esta branch e faça pelo menos 2 
commits.
●
Faça o uplo...
Git Merge
git merge <branch>
●
Aplicar os commits de uma branch na branch 
atual.
●
Encontra um commit comum(base) entre a...
Exercício 5
●
Fazer o merge da nova branch na master.
●
Resolver o conflito e visualizar no GitHub o 
gráfico das branchs.
Git Rebase
git rebase <branch>
●
Semelhante ao Merge porém é diferente na 
ordem de aplicar os commits.
●
No Rebase, os se...
Exercício 6
●
Faça um commit na master e outro em outra 
branch.
●
Faça o rebase da branch com a master.
●
Veja a ordem do...
Git Fetch
git fetch
●
Baixa as atualizações do remote porém não 
aplica elas no repositório.
●
Permite fazer o rebase de u...
Exercício 7
●
Com a branch master sincronizadas você e seu 
par devem fazer commits na master.
●
Seu par deve fazer o push...
Tag
●
Útil para definir versões estáveis do projeto.
●
Semelhante a Branch porém não recebe mais 
commits.
●
Guarda um est...
Interfaces Gráficas GUI
●
Pelo terminal se faz tudo.
●
Interfaces gráficas ajudam na visualização e 
auxiliam em algumas t...
GitHub e colaboração com
Open Source
Fork no GitHub
●
Copia um repositório de outro usuário para o 
seu usuário no GitHub.
●
É assim que começa a contribuição ...
Issues no GitHub
●
Tradução: Questões.
●
Reportar bugs.
●
Organizar tarefas a serem feitas.
●
Permite discussão entre os u...
Pull Request
●
O grande simbolo de colaboração.
●
É quando você solicita que sua alterações 
sejam unidas a uma branch no ...
Fluxo do GitHub
●
https://guides.github.com/introduction/flow/ 
Exercício Final
●
Faça um fork deste repositório:
https://github.com/BrOrlandi/GitTrainingWall 
●
Rode o projeto.
●
Sua ta...
Caso de Exemplo
●
Extensão para GNOME: Desktop Scroller.
●
Cria uma borda de rolagem entre os Desktops.
●
Permite configur...
Extras
●
.gitignore
●
Git commit ­­ammend
●
Git Stash
●
GitHub pages
●
Milestones
●
Hooks
Dúvidas?
@BrOrlandi
brorlandi@gmail.com
www.slideshare.net/BrunoOrlandi
Obrigado!
Termos
●
Repositório: onde são armazenados todos os 
arquivos do projeto.
●
Commit: registro de alterações realizadas. 
Co...
Termos
●
Merge: incorporar alterações realizadas ou 
unir branchs.
●
Fork: bifurcação, uma cópia do projeto. 
Ubuntu é um ...
Git e contibuição com projetos open source usando GitHub
Próximos SlideShares
Carregando em…5
×

Git e contibuição com projetos open source usando GitHub

1.476 visualizações

Publicada em

Ministrado na Semcomp 18 - USP São Carlos em 20/08/2015

Publicada em: Tecnologia
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.476
No SlideShare
0
A partir de incorporações
0
Número de incorporações
303
Ações
Compartilhamentos
0
Downloads
98
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Git e contibuição com projetos open source usando GitHub

  1. 1. Bruno Orlandi Git e contribuição para projetos Open Source 2ª Edição
  2. 2. Bruno Orlandi ● 5º Ano BCC – ICMC USP ● P&D – Ícaro Technologies ● Desenvolvimento Web ● Gosta de compartilhar  conhecimento ● @BrOrlandi
  3. 3. Instalando ● Instalar o Git: sudo apt­get install git ● Escolha sua interface gráfica: – https://git­scm.com/downloads/guis  ● Recomendado: GitEye – http://www.collab.net/downloads/giteye 
  4. 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. 5. Conteúdo ● Controle de Versão ● Comandos Básicos ● Ramificações ● Publicando e Colaborando ● Exercícios
  6. 6. O que é Git-SCM ● Sistema de Controle de Versão Distribuído ● SCM   Source Control Management→ ● Criado por Linus Torvalds (2005) ● Auxiliar no Desenvolvimento do Linux
  7. 7. Gerência de Configuração de Software
  8. 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?
  9. 9. Gerência de Configuração de Software ● Identificação ● Documentação ● Controle ● Auditoria
  10. 10. Gerência de Configuração de Software ● Artefatos: – Código fonte – Documentação do Software – Manual de Usuário
  11. 11. Problema exemplo ● Você precisa editar um código que está no seu  Dropbox ● Você faz o download do arquivo ● Faz as alterações necessárias ● Salva o arquivo no Dropbox
  12. 12. Problema exemplo ● Seu colega também quer editar o código ● Vocês baixam o mesmo arquivo junto ● Você edita e salva no Dropbox ● Seu colega edita e salva no Dropbox e acaba  sobrescrevendo seu código
  13. 13. Controle de Versão resolve ● Controle de versão faz o 'merge' entre as  alterações.
  14. 14. Git é Distribuído
  15. 15. Controle de Versão
  16. 16. O que é GitHub ● Servidor de repositórios Git ● Surgiu em 2008 ● +10 milhões de repositórios ● +10 milhões de usuários
  17. 17. Estão no GitHub
  18. 18. Usam Git
  19. 19. Alternativas ● Subversion (SVN) ● Mercurial ● CVS ­ Concurrent Versioning System ● Bazaar ● Git é o mais rápido e eficiente
  20. 20. Servidores Servidores/Suporte git Mercurial SVN GitHub V GitLab V Bitbucket V V SourceForge V V V Google Code V V V
  21. 21. Vamos começar na prática!
  22. 22. Instalando ● Instalar o Git: sudo apt­get install git ● Escolha sua interface gráfica: – https://git­scm.com/downloads/guis  ● Recomendado: GitEye – http://www.collab.net/downloads/giteye 
  23. 23. Criar conta no Github ● Acessem https://github.com/ ● Criem sua conta. ● Lembre­se, através dessa conta você poderá  contribuir com milhões de projetos open  source.
  24. 24. Ajuda ● Quando precisar de ajuda: git help <command> ● Site oficial: – https://git­scm.com/ 
  25. 25. Criando o Primeiro Repositório git init PrimeiroRepo ● Será criado o diretório configurado como um  repositório Git ● Todas as configurações do repositório ficam  na pasta .git
  26. 26. Crie seu primeiro arquivo ● Crie um arquivo, edite e adicione ao  repositório: gedit PrimeiroArquivo git add PrimeiroArquivo git commit ­m “Criado o primeiro arquivo.”
  27. 27. Configurando ● Configure seu nome e e­mail: git config ­­global user.name  “MeuUserName” git config ­­global user.email  “meuemail@email.com” ● Configure cores no terminal: git config ­­global color.ui  auto
  28. 28. Git Status e Log ● Comando para ver o status do repositório git status ● Ver últimos commits no repositório: git log
  29. 29. Criar um repositório remoto ● Crie um repositório no Github. ● Configure o repositório remoto. ● Crie um arquivo README.md ● Faça o upload das alterações. git remote add <remote> <url>
  30. 30. Git 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
  31. 31. Git Add git add <lista de arquivos> ● Adiciona os arquivos novos e modificados para  o próximo commit git add .
  32. 32. Git Commit git commit [­m “Message”] ● Registra o commit com todos os arquivos que  usou “git add” ● Se o parametro de mensagem não for passado  abrirá um editor de texto para escrever a  mensagem ● git config ­­global core.editor  gedit
  33. 33. Git Workflow ● Basicamente a maior parte do trabalho com o  git consiste nestas tarefas: – Editar – Commitar – Sincronizar com o repositório remoto ● Exercite estes comandos!
  34. 34. Revisão dos comandos ● git status ● git log ● git add ● git commit ● git push
  35. 35. Status dos arquivos ● Edite o arquivo criado anteriormente ● Crie um novo arquivo e veja o seu status no  repositório
  36. 36. Estados dos arquivos ● Não monitorado (untracked) ● Modificado (modified) ● Preparado (staged) ● Consolidado (commited)
  37. 37. Estados dos arquivos
  38. 38. Dif git diff ● Exibir diferenças entre commits e branchs git diff [path] ● Diferença no diretório git diff HEAD~1 ● Mostra o que foi alterado no último commit ● Ver diff no GitHub
  39. 39. Ferramenta externa Dif git config ­­global diff.tool  diffmerge ● Permite usar uma ferramenta externa para  usar no Diff e também no Merge. git difftool HEAD~1
  40. 40. Exercício 1 ● Remova uma linha de um arquivo ● Adicione uma nova linha no mesmo arquivo ● Adicione um novo arquivo com pelo menos  uma linha ● Faça o commit e o push das alterações ● Veja as diferenças do commit pelo GitHub
  41. 41. Git Clone git clone <URL> ● Baixa o repositório remoto. ● Outra forma de criar um repositório local. ● Já vem com o remote configurado.
  42. 42. Git Pull git pull  ● Baixa as alterações do repositório remoto. ● Mantém o repositório sincronizado com os  últimos commits de uma branch.
  43. 43. Exercício 2 ● Configure um colaborador para seu  repositório. ● Ele deve clonar seu repositório e fazer um  commit nele. ● Você deve atualizar seu repositório com o  novo commit. ● Invertam os papéis.
  44. 44. Navegar no histórico git checkout <commit> <file> ● Permite ver como um arquivo ou todo o  repositório estava em um determinado  commit.
  45. 45. Git checkout git checkout <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 repositório no último commit.
  46. 46. 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.
  47. 47. Git Revert git revert <commit> ● Irá criar um novo commit que desfaz as  alterações do commit especificado. ● Útil para desfazer um commit antigo.
  48. 48. Git reset git reset <commit> ● Resetar o repositório para um determinado  commit. git reset ­­hard <commit> ● Resetar e remover todas as alterações. – Cuidado ao usar! Não usar se já estiver  publicado. ● Útil para desfazer últimos commits.
  49. 49. Conflitos ● Conflitos podem acontecer ao unirmos  alterações. ● Acontecem quando versões diferentes  possuem as mesmas linhas nos mesmos  arquivos editadas diferentes. ● O Git identifica os conflitos e fica aguardando  a solução deles. ● Ao resolver os conflitos deve ser feito um  commit.
  50. 50. Conflitos Linha 1 Linha 2 Linha 3 Linha 1 Linha 2 Linha 3 Nova linha Linha 1 Linha 2 Linha 3 Quarta linha ?
  51. 51. Exercício 3 ● Crie um conflito no repositório do seu par. ● Seu par deve editar o mesmo arquivo que  você. ● Você deve fazer o pull, resolver o conflito e  fazer o push das suas alterações. ● Seu par deve ver que a sua alteração foi  adicionada junto à alteração dele. ● Invertam os papéis.
  52. 52. Branching Criando ramificações do repositório
  53. 53. Branch ● É uma lista de commits. ● Representa ramificações no repositório. ● Muito útil para trabalhos colaborativos. ● Branchs de desenvolvimento facilitam o  controle. ● Branch master é a padrão. git branch
  54. 54. Branching git branch <nova_branch> ● Cria uma nova branch. git branch ­d <branch> ● Excluir uma branch.
  55. 55. Git Checkout Branch git checkout <branch> ● Muda para a branch. ● Seu repositório passa a ter os commits que a  branch possui e novos commits serão  adicionados à ela.
  56. 56. Exercício 4 ● Crie uma nova branch no seu repositório. ● Mude para esta branch e faça pelo menos 2  commits. ● Faça o upload e veja sua nova branch no  GitHub. ● Faça um commit na master que altere as  mesmas linhas. ● Veja como as branchs divergem no GitHub.
  57. 57. Git Merge git merge <branch> ● Aplicar os commits de uma branch na branch  atual. ● Encontra um commit comum(base) entre as  branchs e aplica todos os commits que a  branch atual não possui. ● Caso existam commits na branch atual que  não estão na outra, será criado um commit de  merge.
  58. 58. Exercício 5 ● Fazer o merge da nova branch na master. ● Resolver o conflito e visualizar no GitHub o  gráfico das branchs.
  59. 59. Git Rebase git rebase <branch> ● Semelhante ao Merge porém é diferente na  ordem de aplicar os commits. ● No Rebase, os seus commits na frente da base  são removidos temporariamente, os commits  de outra branch são aplicados na sua branch e  por fim seus commits são aplicados um a um. ● Pode acontecer conflitos que serão resolvidos  para cada commit.
  60. 60. Exercício 6 ● Faça um commit na master e outro em outra  branch. ● Faça o rebase da branch com a master. ● Veja a ordem dos commits. ● Mesmo que tenha conflitos o histórico de  commits é preservado.
  61. 61. Git Fetch git fetch ● Baixa as atualizações do remote porém não  aplica elas no repositório. ● Permite fazer o rebase de uma branch em vez  de fazer o merge. ● Pull = Fetch + Merge ● Fetch e Rebase é melhor para manter histórico  do desenvolvimento.
  62. 62. Exercício 7 ● Com a branch master sincronizadas você e seu  par devem fazer commits na master. ● Seu par deve fazer o push dos commits dele. ● Antes de você fazer o push dos seus commits  você deve fazer o rebase com os commits do  seu par.
  63. 63. Tag ● Útil para definir versões estáveis do projeto. ● Semelhante a Branch porém não recebe mais  commits. ● Guarda um estado do repositório. git tag [nome da tag] git push <remote> <tag>
  64. 64. 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 – GitEye – Linux, Windows e Mac – SourceTree – Para Windows ● Não Recomendado: GitHub for Windows
  65. 65. GitHub e colaboração com Open Source
  66. 66. Fork no GitHub ● Copia um repositório 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.
  67. 67. Issues no GitHub ● Tradução: Questões. ● Reportar bugs. ● Organizar tarefas a serem feitas. ● Permite discussão entre os usuários. ● Pode ser referenciado por commits. – Commit: “Closes #3”
  68. 68. 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. ● Igual uma Issue porém com uma branch  associada. ● Muito útil para o trabalho colaborativo.
  69. 69. Fluxo do GitHub ● https://guides.github.com/introduction/flow/ 
  70. 70. Exercício Final ● Faça um fork deste repositório: https://github.com/BrOrlandi/GitTrainingWall  ● Rode o projeto. ● Sua tarefa é criar um template com informações  do seu usuário no GitHub. ● Faça o trabalho em um branch separada e depois  crie um Pull Request para o repositório original.
  71. 71. 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.
  72. 72. Extras ● .gitignore ● Git commit ­­ammend ● Git Stash ● GitHub pages ● Milestones ● Hooks
  73. 73. Dúvidas?
  74. 74. @BrOrlandi brorlandi@gmail.com www.slideshare.net/BrunoOrlandi Obrigado!
  75. 75. 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
  76. 76. 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.

×