Workshop - Introdução ao controle de versão com GIT
Apresentação utilizada no workshop sobre git realizada no Encontro de ciências exatas e tecnologia, na Pontifícia Universidade Católica, no dia 14/10/2014.
Cronograma ▪ Apresentação ▪ Quais os problemas? ▪ Conheça o Git ▪ Como instalar ▪ Comandos básicos ▪ Utilizando o GitHub ▪ Integrando o Git e o GitHub ▪ Dicas adicionais ▪ Links ▪ Dúvidas ▪ Palavra dos patrocinadores ▪ Sorteio do livro
Apresentação Diego Martins de Pinho ▪ 22 anos ▪ Bacharel em ciência da computação pela PUC-SP ▪ Desenvolvedor na Touch por 2 anos ▪ Ex-blogueiro: FuckYeaWorld.com ▪ Gosta de ler, escrever, jogar videogames, ensinar e desenvolver /diego.pinho.31 @DiegoPinho /in/diegopinho diegopinho.com.br DiegoPinho DiegoPinho DiegoPinho1992
Apresentação – Touch Health ▪ 15+ anos de experiência em desenvolvimento de software para área da saúde ▪ Desde automação laboratorial até gestão de laudos de exame de imagem ▪ 5º ano premiado na GPTW ▪ Atua em grandes hospitais/laboratórios: DASA, Hospital Samaritano, Salomão Zoppi Diagnósticos, entre outros. /touchhealth /company/280363 touchhealth.com.br São Paulo – Vila Olímpia São José dos Campos – Univap
Quais os problemas em desenvolvimento? Prazos Mutabilidade de Requisitos Finanças Ambiente de Desenvolvimento Ambiente de Trabalho Trabalho em equipe Complexidade Mudanças constantes Processos Abstrato Tecnologias
Histórico de modificações Garoto, rápido, não há tempo! Eu sou você daqui 20 anos. No futuro, o sistema vai quebrar em produção e só o seu código de hoje pode salvá-lo! Cadê ele?! Vish! Eu deletei ontem. Já era.
Problemas com desenvolvimento em equipe Detectar as mudanças providas pelos nossos colegas Foi você que alterou a minha classe? Eu?! Não, claro que não...
Problemas com desenvolvimento em equipe Acabei de refatorar todas as classes de contabilidade! Sério? Vish... Acabei de inserir 32 classes lá Eu te odeio, sabia? Detectar conflitos entre alterações
Problemas com desenvolvimento em equipe Integrar de maneira transparente e sem emendas com o código de todos os outros desenvolvedores da equipe Tragam seus códigos que com um pouco de fita, eu junto tudo!
Problemas com desenvolvimento em equipe Por favor, aguardem na fila que ele não terminou ainda Trabalhar de forma assíncrona (não ter que ficar esperando as mudanças dos colegas para trabalhar)
O que é controle de versão? ▪ Salva alterações em arquivos ao longo do tempo ▪ Útil para recuperar versões específicas do passado ▪ Desenvolvimento de software em equipe ▪ Útil não somente para código-fonte de programas Desenvolvedores Designers Documentação Versões • Código-fonte • Documentação • Sites • Apresentações • Composições • TCC • Etc...
Conheça o Git ▪ O Git é um sistema de controle de versão que, pela sua estrutura interna, é uma máquina do tempo extremamente rápida e um robô de integração bem competente. Site oficial: http://git-scm.com/
Um pouco sobre o Git Foi Desenvolvido por Linus Torvalds para o desenvolvimento do kernel do Linux! Não é somente usado em empresas, mas também para hospedar projetos open source, como: jQuery, Node. js, Ruby on Rails, Jenkins, Spring, JUnit, entre outros Conhece-lo é uma habilidade importante para uma carreira bem sucedida em desenvolvimento de software!
Principais características do Git Open Source Desenvolvimento distribuído Compatibilidade com HTTP/SSH Autenticação criptográfica do histórico Maior parte das ações são locais Rapidez Visão dos arquivos diferenciada E muito mais...
Ciclo básico de trabalho ATUALIZAR O REPOSITÓRIO RESOLVER CONFLITOS CLONAR PROJETO REALIZAR ALTERAÇÕES VERIFICAR ALTERAÇÕES DESFAZER ALTERAÇÕES GRAVAR ALTERAÇÕES PROPAGAR ALTERAÇÕES Já clonou o repositório? não sim Ocorreram conflitos? sim não sim não Desfazer alterações?
Primeira configuração ▪ O primeiro passo é nos identificarmos para o Git através do nosso nome e e-mail. Para isso, basta entrar no terminal e executar os comandos: $ git config --global user.name “Diego Martins de Pinho” Nome: $ git config --global user.email “[email protected]” E-Mail: /etc/gitconfig ~/.gitconfig Configurações Globais Configurações do Usuário .git/config Configurações de um Repositório --system --global
Criando um repositório ▪ Para transformar um diretório em um repositório reconhecido pelo Git, basta executar o comando git init ▪ Uma vez executado este comando, o diretório já um repositório Git ▪ Todo repositório Git possui um diretório oculto com o nome .git $ git init Criando um repositório: Arquivos do projeto git init Arquivos do Projeto + .git Arquivos de configuração e rastreio do Git Diretório do projeto Diretório do projeto
Verificando nossos arquivos ▪ Para sabermos se um arquivo dentro do nosso diretório já foi versionado, utilizamos o comando git status ▪ Ao executar este comando, será exibida uma mensagem semelhante a esta: # On branch master # # Initial commit # # Untracked files: # (use "git add ..." to include in what will be committed) # # arquivo_teste.txt nothing added to commit but untracked files present (use "git add" to track) Verificando arquivos: Note que o arquivo não está sendo rastreado pelo Git!
Rastreando e gravando as alterações ▪ Para rastrearmos uma alteração em um arquivo, utilizamos o comando git add ▪ Por exemplo, para que o arquivo_teste.txt seja rastreado, utilizamos o comando: git add arquivo_teste.txt $ git add arquivo_teste.txt $ git status # On branch master # # Initial commit # # Changes to be commited: # (use “git rm –cached ...” to unstage) # # new file: arquivo_teste.txt Com este comando, adicionamos o arquivo novo/modificado ao stage Rastreando arquivos:
Rastreando e gravando alterações ▪ Para rastrear vários arquivos de uma vez, utilizamos o comando git add . ▪ Para o exemplo abaixo, imagine que temos 3 arquivos no nosso workspace: arquivo_um.txt, arquivo_dois.txt e arquivo_tres.txt $ git add . $ git status # On branch master # # Initial commit # # Changes to be commited: # (use “git rm –cached ...” to unstage) # # new file: arquivo_um.txt # new file: arquivo_dois.txt # new file: arquivo_tres.txt Com este comando, adicionamos os arquivos novos/modificados ao stage Rastreando arquivos:
Rastreando e gravando alterações ▪ Às vezes temos arquivo no nosso projeto que são sempre modificados, como por exemplo, uma lista de tarefas. Para estes casos, nunca iremos querer comitar estes arquivos. ▪ Para resolver este problema, basta adicionar um arquivo chamado . gitignore no diretório do seu projeto e colocar o nome do arquivo nele. Rastreando arquivos: # On branch master # # Initial commit # # Untracked files: # (use "git add ..." to include in what will be committed) # # .gitignore nothing added to commit but untracked files present (use "git add" to track .gitignore Depois que comitado o .gitignore, o Git vai sempre ignorar as modificações no arquivo_ignorado.txt arquivo_ ignorado.txt Diretório do projeto
Gravando arquivo no repositório ▪ Para gravamos as mudanças no nosso repositório, utilizamos o comando git commit ▪ Caso seja o primeiro commit, também utilizamos a opção –m para informar a mensagem do commit $ git commit –m ‘Mensagem do meu commit’ [master (root-commit) d0123st3] Mensagem do meu commit 0 files changed create mode 100644 arquivo_teste.txt $ git status # On branch master nothing to commit (working directory clean) Gravando arquivos: Se executarmos o git status após o commit, veremos que Não há mais nada para comitar, ou seja, já foi tudo gravado
Histórico de modificações ▪ Para visualizar o histórico de commits do repositório, utilizamos o comando git log $ git log Commit 312j3092cb03u23901283nc901823bcnbb Autor: Diego Martins de Pinho Date: Wed Jun 5 15:15:15 2014 Segundo commit Commit 48203j4c0234j2cj0423c3j293402c394cn3 Autor: Diego Martins de Pinho Date: Wed Jun 4 14:14:14 2014 Primeiro commit Visualizando histórico de mudanças Hash do commit, nome do autor, data do commit e mensagem do commit
Alterando o último commit ▪ É possível alterar o último commit utilizando o comando git commit –- amend. Ele irá refazer o último commit considerando o stage atual $ git log Commit 312j3092cb03u23901283nc901823bcnbb Autor: Diego Martins de Pinho Date: Wed Jun 5 15:15:15 2014 Primeiro commit $ git add arquivo_modificado.txt $ git commit –amend Commit 312j3092cb03u23901283nc901823bcnbb Autor: Diego Martins de Pinho Date: Wed Jun 5 16:16:16 2014 Primeiro commit Alterando o último commit
Desfazendo modificação de um arquivo ▪ Para desfazer as modificações em um arquivo, utilizamos o comando git checkout. $ git status # On branch master # Changes not staged for commit: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # # modified: arquivo_um.txt # no changes added to commit (use "git add" and/or "git commit -a") $ git checkout -- arquivo1 $ git status # On branch master nothing to commit, working directory clean Desfazendo modificação em um arquivo
O que é o GitHub? ▪ GitHub é um serviço web para projetos que usam o controle de versionamento Git ▪ Escrito em Ruby on Rails ▪ Desenvolvida pela Logical Awesome ▪ Possui planos comerciais e gratuitos para projetos de código aberto ▪ Possui funcionalidades de uma rede social como feeds, followers, wiki e um gráfico que mostra como os desenvolvedores trabalham as versões de seus repositórios ▪ Utilizado para hospedar projetos como: jQuery, Prototype, ASP. NET, MooTools, Haml, entre outros
Hospedagem de código Controle de Versão Git Git Mercurial Git Subversion Perforce Preço do Repositório Público Grátis Grátis Grátis Preço do Respositório Privado US$ 7 por mês (até 5 usuários) Grátis (até 5 usuários) Grátis (até 3 usuários) Ferramentas Controle de equipe Issue tracking Revisão de código Wikis Controle de equipe Issue tracking Revisão de código Wikis Controle de equipe Issue tracking Revisão de código Wikis bitbucket.org github.com assembla.com
Enviando commits para repositório remoto ▪ Para propagar os commits para um repositório remoto, é necessário adicioná-lo ao seu repositório local. Para isso utilizamos o comando git remote add origin $ git remote add origin [email protected]:DiegoPinho/workshop.git Adicionando repositório remoto
Enviando commits para repositório remoto ▪ Uma vez que o repositório externo está configurado, podemos propagar nossas mudanças locais para o repositório local utilizando o comando git push. $ git push origin master Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (5/5), 491 bytes, done. Total 5 (delta 1), reused 0 (delta 0) To [email protected]:DiegoPinho/workshop.git * [new branch] master -> master Enviando commits para repositório remoto Repositório local Repositório remoto (github) Uma vez no repositório remoto, estará disponível para todos! Enviando modificações para o origem na branch master
Obtendo commits do repositório remoto ▪ Para verificarmos atualizações do repositório remoto, utilizamos o comando git fetch origin ▪ Uma vez que atualizações são identificadas, a incorporamos ao nosso repositório local com o comando git pull $ git fetch origin remote: Counting objects: 159, done. remote: Compressing objects: 100% (82/82), done. remote: Total 83 (delta 48), reused 0 (delta 0) Unpacking objects: 100% (83/83), done. From [email protected]:DiegoPinho/workshop.git 431ece6..f4c1242 master -> origin/master $ git pull Updating 431ece6..f4c1242 Fast-forward arquivo_um.txt | 6 ++ Obtendo commits do repositório remoto São mostradas todas as alterações feitas nos arquivos do ponto que você estava até o ponto obtido
Customizando comandos com alias ▪ Muitas vezes os comandos do Git são muito verbosos, como por exemplo: git rebase master, git fetch origin/master, etc... ▪ O Git oferece a possibilidade de customizar comandos através de alias. Para configurá-los, basta editar o arquivo .gitconfig .gitconfig $ git st # On branch master # Changes not staged for commit: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # # modified: arquivo_um.txt # no changes added to commit (use "git add" and/or "git commit -a") [alias] st = status ls = log --decorate=short --oneline co = checkout
Plugin do Git para Eclipse ▪ Também existem alguns plugins para o Eclipse para facilitar o uso do Git no seu projeto. O mais famoso deles é o EGit - http://eclipse. github.io/ Ver as alterações não confirmadas e facilmente comparar , confirmar ou desfazer deles. Veja por que , quando e por quem cada linha de um arquivo foi modificado pela última vez. Visualize commits ao longo do tempo e ver rapidamente quais ramos foram fundidas. Comitar mudanças Rastrear mudanças Navegar histórico
Links úteis ▪ Documentação do Git: http://git-scm.com/doc ▪ Help do GitHub: https://help.github.com/ ▪ Try-Git: https://try.github.io ▪ Git CheatSheet: http://ndpsoftware.com/git-cheatsheet.html ▪ Git tutorials: https://www.atlassian.com/git/tutorials/ ▪ Top 10 Git Tutorials for Beginners: http://goo.gl/dikwH8 ▪ E para não levar tudo tão a sério... ▪ When in Git: http://wheningit.tumblr.com/