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.
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
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
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
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...
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/
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!
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?
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
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
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 <file>..." 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!
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 <file>...” to unstage) # # new file: arquivo_teste.txt Com este comando, adicionamos o arquivo novo/modificado ao stage Rastreando arquivos:
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 <file>...” 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:
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 <file>..." 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
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
do repositório, utilizamos o comando git log $ git log Commit 312j3092cb03u23901283nc901823bcnbb Autor: Diego Martins de Pinho <[email protected]> Date: Wed Jun 5 15:15:15 2014 Segundo commit Commit 48203j4c0234j2cj0423c3j293402c394cn3 Autor: Diego Martins de Pinho <[email protected]> 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
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 <[email protected]> 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 <[email protected]> Date: Wed Jun 5 16:16:16 2014 Primeiro commit Alterando o último commit
em um arquivo, utilizamos o comando git checkout. $ git status # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." 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
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
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
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
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
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
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 <file>..." to update what will be committed) # (use "git checkout -- <file>..." 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
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
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/