Pra que? Como e porque? Conheça o Git Como instalar Primeiros passos Utilizando o GitHub Integrando o Git e o GitHub Demonstração Dicas adicionais Links Dúvidas
22 anos Bacharel em ciência da computação pela PUC-SP Desenvolvedor na Touch por 2 anos Gosta de ler, estudar, escrever, jogar videogames, ensinar e desenvolver /diego.pinho.31 @DiegoPinho /in/diegopinho diegopinho.com.br
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 GTPW 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
de software em equipe são: Como manter o histórico do nosso código ao decorrer do tempo de maneira limpa e desacoplada? Como trabalhar em equipe? Também é necessário lidar com: Prazos Mutabilidade de requisitos Finanças Ambiente de trabalho Processos Etc...
ao decorrer o tempo de maneira limpa e desacoplada? 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! Eu deletei ontem. Já era.
providas pelos nossos colegas Foi você que alterou a minha classe? Eu?! Não, claro que não... 2 - Identificar conflitos entre alterações Acabei de refatorar todas as classes de contabilidade! Acabei de inserir 32 classes lá Eu te odeio, sabia?
transparente e sem emendas com o código de todos os outros desenvolvedores da nossa equipe Tragam seus códigos que com um pouco de fita, eu junto tudo! 4 - Trabalhar de forma assíncrona (não ter que ficar esperando as mudanças dos colegas para começar a trabalhar). Por favor, aguardem na fila que ele não terminou ainda
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 • Código-fonte • Documentação • Sites • Apresentações • Composições • 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/
Linus Torvalds em meados de 2005 para o desenvolvimento do kernel do Linux O Git 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 Conhecer bem como utilizar o Git é um habilidade importante para uma carreira bem-sucedida no desenvolvimento de software
consistente para desenvolvimentos não-lineares Desenvolvimento distribuído Compatibilidade com protocolos/sistemas existentes Manipulação eficiente de projetos extensos Autenticação criptográfica do histórico Modelo baseado em ferramentas Estratégias de mescla (merge) conectáveis
SVN Commit Files (A) Add, commit and push 113 modified files (2164+, 2259-) 0.64 2.60 4x Commit Images (B) Add, commit and push 1000 1k images 1.53 24.70 16x Diff Current Diff 187 changed files (1664+, 4859-) against last commit 0.25 1.09 4x Diff Recent Diff against 4 commits back (269 changed/3609+,6898-) 0.25 3.99 16x Diff Tags Diff two tags against each other (v1.9.1.0/v1.9.3.0 ) 1.17 83.57 71x Log (File) Log of the history of a single file (array.c - 483 revs) 0.60 82.84 138x Update Pull of Commit A scenario (113 files changed, 2164+, 2259-) 0.90 2.82 3x Blame Line annotation of a single file (array.c) 1.91 3.04 1x Fonte: http://git-scm.com/about/small-and-fast
de arquivos Repositório completo do projeto, oculto no sistema de arquivos Arquivos salvos em commit Arquivos novos ou modificados Arquivos selecionados para o commit
não tem nenhum segredo. Escolha as opções padrão. Serão instalados alguns programas, sendo o mais importante o Git Bash, que permite que o Git seja executado pela linha de comando no Windows. Windows
A instalação não tem nenhum segredo. Escolha as opções padrão. Passos (maneira 2): É possível instalar via MacPorts (http://www.macports.org). Execute o comando: $ sudo port install git-core +svn +doc +bash_completion +gitweb Macintosh
estão ligados ao seu ciclo básico de trabalho. Ele pode ser definido como as operações comuns realizadas por um desenvolvedor em seu dia a dia de trabalho. Fazem parte do ciclo básico do GIT as seguintes operações: Atualizar seu repositório e cópia de trabalho Fazer alterações Verificar suas alterações Possivelmente desfazer algumas alterações Resolver conflitos Submeter alterações Propagar suas alterações para outro repositório
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
stage, utilizamos o comando git reset HEAD. $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: arquivo_um.txt # $ git reset HEAD arquivo_um.txt Unstaged changes after reset: M arquivo_um.txt $ 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 Removendo o arquivo do stage
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
Keys e adicione sua chave SSH. Caso você não possua ou não saiba gerar, a própria página possui um tutorial: https://help.github.com/articles/generating-ssh-keys
usamos 2 protocolos: HTTP e SSH. No caso do Linux, fica mais fácil utilizar o protocolo SSH, mas para o Windows, talvez o HTTP seja mais fácil $ git clone [email protected]:workshop- git/repositorio-teste.git Por HTTP será necessário inserir seu login e sua senha do GitHub! Para maiores informações: https://help.github.com/articles/which-remote-url-should-i-use
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
local Adicionar um arquivo Modificar um arquivo Comitar no repositório local Verificar mudanças Criar um repositório remoto Comitar no repositório remoto OBJETIVOS Demonstrar o uso básico do Git e do GitHub (apresentar o uso dos comandos apresentados ao longo do workshop) https://try.github.io/ Try Git
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
no Git não é uma tarefa fácil de se resolver Melhor opção: Meld Comparação de arquivos Comparação de diretórios Controle de versão Modo merge Suporte internacional Como instalar Definindo o Meld como ferramenta de merge do Git $ git config --global merge.tool meld $ sudo apt-get install meld Para maiores informações: http://meldmerge.org/
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/