SlideShare uma empresa Scribd logo
1 de 72
Baixar para ler offline
Git e contribuição para 
projetos Open Source 
Bruno Orlandi
Bruno Orlandi 
● 4º Ano Ciências de Computação 
– ICMC USP 
● PET Computação 
● Gosta de compartilhar 
conhecimento 
● @BrOrlandi
Instalando 
● Instalar o Git: 
sudo apt­get 
install git 
● Instalar o Gitg: 
sudo apt­get 
install gitg 
http://git­scm. 
com
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
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 
● +3 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!
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 log ­­author= 
User 
git show [commit] 
● Mostra as alterações de um commit 
● Commit deve ser especificado pela chave
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
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:
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 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.
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 ­­
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
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.
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! 
● Diferença do Merge é que adiciona os commits 
antes dos commits da 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! 
● Diferença do Merge é que adiciona os commits 
antes dos commits da branch.
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. 
● Github permite autenticação por chaves SSH. 
Use isto!
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 borda de rolagem entre os Desktops. 
● Permite configurar onde a borda é ativa. 
● Hoje mantido por outros usuários.
Extras 
● .gitignore 
● Git commit ­­ammend 
● Git Stash e Stash Pop 
● Milestones 
● Hooks 
● Github pages
Dúvidas?
Contato 
● @BrOrlandi 
● brorlandi@gmail.com 
● www.slideshare.net/BrunoOrlandi
Obrigado! 
http://goo.gl/XEsbPQ

Mais conteúdo relacionado

Mais procurados

Como participar de projetos Open Source no Github?
Como participar de projetos Open Source no Github?Como participar de projetos Open Source no Github?
Como participar de projetos Open Source no Github?Guilherme Farias
 
Treinamento - Iniciando no Git e Github by Leandro Alves
Treinamento  - Iniciando no Git e Github by Leandro AlvesTreinamento  - Iniciando no Git e Github by Leandro Alves
Treinamento - Iniciando no Git e Github by Leandro AlvesLeandro Alves
 
Github para colaboradores livres
Github para colaboradores livresGithub para colaboradores livres
Github para colaboradores livresThiago Sciotta
 
Aula 1 - Curso Git e Github - Webschool
Aula 1 - Curso Git e Github - WebschoolAula 1 - Curso Git e Github - Webschool
Aula 1 - Curso Git e Github - WebschoolBruno Orlandi
 
Introdução ao GitHub e Git
Introdução ao GitHub  e GitIntrodução ao GitHub  e Git
Introdução ao GitHub e GitIgor Steinmacher
 
Apresentação de Git
Apresentação de GitApresentação de Git
Apresentação de GitIsaacBessa
 
Git e Gitlab para Iniciantes
Git e Gitlab para IniciantesGit e Gitlab para Iniciantes
Git e Gitlab para IniciantesIgorDiniz22
 
Learn about Git - Git Tutorial
Learn about Git - Git TutorialLearn about Git - Git Tutorial
Learn about Git - Git TutorialLucas Brigida
 
Use o git e perca o medo de errar
Use o git e perca o medo de errarUse o git e perca o medo de errar
Use o git e perca o medo de errarBruno Calheira
 
Controle de versão com git
Controle de versão com gitControle de versão com git
Controle de versão com gitIgorDiniz22
 

Mais procurados (20)

Como participar de projetos Open Source no Github?
Como participar de projetos Open Source no Github?Como participar de projetos Open Source no Github?
Como participar de projetos Open Source no Github?
 
Treinamento - Iniciando no Git e Github by Leandro Alves
Treinamento  - Iniciando no Git e Github by Leandro AlvesTreinamento  - Iniciando no Git e Github by Leandro Alves
Treinamento - Iniciando no Git e Github by Leandro Alves
 
Git e Github
Git e GithubGit e Github
Git e Github
 
Introdução ao Git
Introdução ao GitIntrodução ao Git
Introdução ao Git
 
Git ...ftw!
Git ...ftw!  Git ...ftw!
Git ...ftw!
 
Github para colaboradores livres
Github para colaboradores livresGithub para colaboradores livres
Github para colaboradores livres
 
Aula 1 - Curso Git e Github - Webschool
Aula 1 - Curso Git e Github - WebschoolAula 1 - Curso Git e Github - Webschool
Aula 1 - Curso Git e Github - Webschool
 
Introdução ao GitHub e Git
Introdução ao GitHub  e GitIntrodução ao GitHub  e Git
Introdução ao GitHub e Git
 
Gerenciando projetos com Git e GitHub
Gerenciando projetos com Git e GitHubGerenciando projetos com Git e GitHub
Gerenciando projetos com Git e GitHub
 
Git e GitHub
Git e GitHubGit e GitHub
Git e GitHub
 
Apresentação de Git
Apresentação de GitApresentação de Git
Apresentação de Git
 
Git e Gitlab para Iniciantes
Git e Gitlab para IniciantesGit e Gitlab para Iniciantes
Git e Gitlab para Iniciantes
 
Git e GitHub - Conceitos Básicos
Git e GitHub - Conceitos BásicosGit e GitHub - Conceitos Básicos
Git e GitHub - Conceitos Básicos
 
Learn about Git - Git Tutorial
Learn about Git - Git TutorialLearn about Git - Git Tutorial
Learn about Git - Git Tutorial
 
Git e github
Git e githubGit e github
Git e github
 
Git+github
Git+githubGit+github
Git+github
 
Use o git e perca o medo de errar
Use o git e perca o medo de errarUse o git e perca o medo de errar
Use o git e perca o medo de errar
 
Git
GitGit
Git
 
Controle de versão com git
Controle de versão com gitControle de versão com git
Controle de versão com git
 
Ferramentas para versionamento Utilizando git
Ferramentas para versionamento Utilizando gitFerramentas para versionamento Utilizando git
Ferramentas para versionamento Utilizando git
 

Destaque

Iniciando com Yeoman, Grunt e Bower
Iniciando com Yeoman, Grunt e BowerIniciando com Yeoman, Grunt e Bower
Iniciando com Yeoman, Grunt e BowerMateus Padua
 
Os camaradas Grunt e Bower
Os camaradas Grunt e BowerOs camaradas Grunt e Bower
Os camaradas Grunt e BowerA2 Comunicação
 
Mantendo seu trabalho a salvo com git
Mantendo seu trabalho a salvo com gitMantendo seu trabalho a salvo com git
Mantendo seu trabalho a salvo com gitMatheus Pereira
 
Palestra UFPR - Intro Ionic framework + WordPress
Palestra UFPR - Intro Ionic framework + WordPressPalestra UFPR - Intro Ionic framework + WordPress
Palestra UFPR - Intro Ionic framework + WordPressRômulo Zoch
 

Destaque (6)

[CEFETMG] - Introdução ao Github
[CEFETMG] - Introdução ao Github[CEFETMG] - Introdução ao Github
[CEFETMG] - Introdução ao Github
 
Iniciando Yeoman
Iniciando YeomanIniciando Yeoman
Iniciando Yeoman
 
Iniciando com Yeoman, Grunt e Bower
Iniciando com Yeoman, Grunt e BowerIniciando com Yeoman, Grunt e Bower
Iniciando com Yeoman, Grunt e Bower
 
Os camaradas Grunt e Bower
Os camaradas Grunt e BowerOs camaradas Grunt e Bower
Os camaradas Grunt e Bower
 
Mantendo seu trabalho a salvo com git
Mantendo seu trabalho a salvo com gitMantendo seu trabalho a salvo com git
Mantendo seu trabalho a salvo com git
 
Palestra UFPR - Intro Ionic framework + WordPress
Palestra UFPR - Intro Ionic framework + WordPressPalestra UFPR - Intro Ionic framework + WordPress
Palestra UFPR - Intro Ionic framework + WordPress
 

Semelhante a Git e contribuição para projetos Open Source

Git - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de VersõesGit - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de VersõesLeandro Cavalcante
 
Desmistificando a ferramenta git
Desmistificando a ferramenta gitDesmistificando a ferramenta git
Desmistificando a ferramenta gitDiogo Souza Machado
 
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019Tchelinux
 
Controle de versionamento com Git
Controle de versionamento com GitControle de versionamento com Git
Controle de versionamento com GitRaphael Cruzeiro
 
Minicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENACMinicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENACDanilo Pinotti
 
Controle de Versão Distribuído com Git básico
Controle de Versão Distribuído com Git básicoControle de Versão Distribuído com Git básico
Controle de Versão Distribuído com Git básicoFabricio Nogueira
 
Introdução ao git
Introdução ao gitIntrodução ao git
Introdução ao gitDiogo Gomes
 
Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)Danilo Pinotti
 
Rogue Snail Talk - Usando Git na Game Jam - WGJ
Rogue Snail Talk - Usando Git na Game Jam - WGJRogue Snail Talk - Usando Git na Game Jam - WGJ
Rogue Snail Talk - Usando Git na Game Jam - WGJNathália Cruz de Oliveira
 
Usando Git na Unity - Gaming For All 2021
Usando Git na Unity - Gaming For All 2021Usando Git na Unity - Gaming For All 2021
Usando Git na Unity - Gaming For All 2021Erik Cruz
 
Rogue Snail Talk - Usando Git na Game Jam - WGJ
Rogue Snail Talk - Usando Git na Game Jam - WGJRogue Snail Talk - Usando Git na Game Jam - WGJ
Rogue Snail Talk - Usando Git na Game Jam - WGJNathália Cruz de Oliveira
 
Git e GitHub: Versionamento de Código Fácil
Git e GitHub: Versionamento de Código FácilGit e GitHub: Versionamento de Código Fácil
Git e GitHub: Versionamento de Código FácilTiago Antônio da Silva
 

Semelhante a Git e contribuição para projetos Open Source (20)

Git - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de VersõesGit - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de Versões
 
Desmistificando a ferramenta git
Desmistificando a ferramenta gitDesmistificando a ferramenta git
Desmistificando a ferramenta git
 
GIT - Hands-On
GIT - Hands-On GIT - Hands-On
GIT - Hands-On
 
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
 
Git para quem vem do SVN
Git para quem vem do SVNGit para quem vem do SVN
Git para quem vem do SVN
 
Controle de versionamento com Git
Controle de versionamento com GitControle de versionamento com Git
Controle de versionamento com Git
 
Minicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENACMinicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENAC
 
Controle de Versão Distribuído com Git básico
Controle de Versão Distribuído com Git básicoControle de Versão Distribuído com Git básico
Controle de Versão Distribuído com Git básico
 
GIT Básico
GIT BásicoGIT Básico
GIT Básico
 
Git
GitGit
Git
 
Introdução ao git
Introdução ao gitIntrodução ao git
Introdução ao git
 
Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)
 
Rogue Snail Talk - Usando Git na Game Jam - WGJ
Rogue Snail Talk - Usando Git na Game Jam - WGJRogue Snail Talk - Usando Git na Game Jam - WGJ
Rogue Snail Talk - Usando Git na Game Jam - WGJ
 
Git
GitGit
Git
 
Usando Git na Unity - Gaming For All 2021
Usando Git na Unity - Gaming For All 2021Usando Git na Unity - Gaming For All 2021
Usando Git na Unity - Gaming For All 2021
 
Rogue Snail Talk - Usando Git na Game Jam - WGJ
Rogue Snail Talk - Usando Git na Game Jam - WGJRogue Snail Talk - Usando Git na Game Jam - WGJ
Rogue Snail Talk - Usando Git na Game Jam - WGJ
 
Controle de versão e colaboração com Git
Controle de versão e colaboração com GitControle de versão e colaboração com Git
Controle de versão e colaboração com Git
 
Git 101
Git 101Git 101
Git 101
 
Git
GitGit
Git
 
Git e GitHub: Versionamento de Código Fácil
Git e GitHub: Versionamento de Código FácilGit e GitHub: Versionamento de Código Fácil
Git e GitHub: Versionamento de Código Fácil
 

Git e contribuição para projetos Open Source

  • 1. Git e contribuição para projetos Open Source Bruno Orlandi
  • 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 apt­get install git ● Instalar o Gitg: sudo apt­get install gitg http://git­scm. 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?
  • 9. Gerência de Configuração de Software ● Identificação ● Documentação ● Controle ● Auditoria
  • 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.
  • 17. O que é Github ● Servidor de repositórios Git ● Surgiu em 2008 ● +3 milhões de usuários
  • 20. Alternativas ● Subversion (SVN) ● Mercurial ● CVS ­Concurrent Versioning System ● Bazaar ● Git é o mais rápido e eficiente
  • 21. Servidores Servidores/Suporte git Mercurial SVN Github V Bitbucket V V SourceForge V V V Google Code V V V
  • 22. Antes de começar alguns termos técnios!
  • 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.
  • 25. Vamos começar na prática!
  • 26. Help ● Quando precisar de ajuda: git help <command>
  • 27. 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
  • 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 deseja­se 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 deseja­se 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 e­mail 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.
  • 69. Extras ● .gitignore ● Git commit ­­ammend ● Git Stash e Stash Pop ● Milestones ● Hooks ● Github pages
  • 71. Contato ● @BrOrlandi ● brorlandi@gmail.com ● www.slideshare.net/BrunoOrlandi