Ferramenta git

1,142 views

Published on

Git é uma ferramenta de controle de versão distribuída que é muito usada em projetos open source e que propõe ser eficiente e simples. O minicurso terá um caráter prático, abordando as principais ações, problemas encontrados (conflitos) e uso de servidores remotos (github).

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,142
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
27
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Ferramenta git

  1. 1. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ Introdução ao Git Felipe dos Santos Silveira SECCOM 2012 17 de Outubro de 2012
  2. 2. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQHistórico Criado por Linus Torvalds para desenvolvimento do Kernel Linux Distribuído Apto ao desenvolvimento não linear Trabalha eficientemente (tempo e espaço) com projetos grandes
  3. 3. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQCaracterísticas Armazena snapshots de arquivos e não diferença entre versões Maioria das operações são locais Mantém integridade (via hashes SHA-1) Dados só são adicionados ao repositório
  4. 4. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQEstados de modificações Existem 3 estados em que uma modificação pode estar Working directory Mudanças, arquivos adicionados, arquivos removidos. Staging area Snapshots de coisas do Working directory que serão commitados. Repositório Aqui ficam armazenados os commits feitos. De maneira geral, eles não são mais editados.
  5. 5. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQEstrutura de um commit Um commit é composto por três partes: Autor, informações do commiter, data Um snapshot dos arquivos do repositório Uma mensagem de commit Uma lista de commits do qual ele derivou À partir dessas informações é calculado o hash SHA-1, que é usado para identificar unicamente esse commit.
  6. 6. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQExemplo de commits
  7. 7. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQInstalação Veja como instalar na sua distribuição/sistema operacional no site oficial: git-scm.com/downloads
  8. 8. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQConfiguração Antes de começar a trabalhar precisamos nos identificar. Para isso usamos o comando git config Definindo variáveis de usuário git config --global user.name “<Seu nome>” git config --global user.email “<Seu email>” git config --global core.editor “gedit”
  9. 9. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQNíveis de configuração Existem 3 níveis de configuração: local para configurações somente para o repositório atual global para configurações somente para o usuário atual system para configurações para todos usuários do sistema
  10. 10. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQgit help Mostra uma tela de ajuda com descrições dos comandos. Ajuda específica git help <comando> Mostra uma melhor descrição e mais opções do comando selecionado.
  11. 11. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQgit init Um repositório é criado executando o comando git init. Agora já podemos começar o trabalho =)
  12. 12. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQgit add As mudanças são adicionadas na staging area utilizando o comando git add <arquivo> Lembre-se Um snapshot do arquivo é guardado na staging area. Caso mais modificações sejam feitas, elas precisam ser adicionadas de novo.
  13. 13. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQgit status e git diff Como está o nosso working directory e staging area? O comando git status nos mostra o estado atual do repositório, além de algumas outras dicas, que veremos em breve. O comando git diff nos mostra as diferenças entre o working directory e o último commit. Para ver mudanças apenas da staging area use git diff --cached.
  14. 14. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQgit remove Às vezes precisamos remover um arquivo do nosso repositório. Podemos atingir esse objetivo com o comando git remove <arquivo> Cuidado O comando git remove também deleta o arquivo do sistema. Utilize a git remove --cached <arquivo> para manter ele em disco. Lembre-se As operações do git são aditivas. Logo, ainda é possível recuperar o arquivo deletado.
  15. 15. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQgit commit Com as mudanças adicionadas à staging area podemos fazer o nosso primeiro commit com git commit O editor que configuramos com core.editor será chamado e poderemos ver as nossas mudanças e editar a nossa mensagem de commit. Boa prática Uma boa mensagem de commit é composta de duas partes separadas por uma linha em branco: Uma mensagem de até 80 caracteres que descreve brevemente o commit. E, se necessário, uma melhor descrição do commit. Commit message A mensagem do commit também pode ser passada por parâmetro. git commit -m <commit message>
  16. 16. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQgit log A qualquer momento podemos ver como está o repositório com o comando git log Formatação A saída do comando é totalmente configurável. Não esqueça de ver as opções com git help log.
  17. 17. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQReferências Como você deve ter percebido, todos os commits são referenciados por seus hashes. Porém, podemos usar um modo mais amigável de referenciá-los. Para isso, usamos Referências, que são ponteiros para commits. Existem 3 tipos de referências: tag: Um ponteiro para um commit específico. Ela não se move sob qualquer circunstância. branch: Um ponteiro para uma “linha” de commits. É atualizado quando há um novo commit no branch.
  18. 18. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQHEAD HEAD é a referência para onde estamos. Pode estar em dois estados: Apontando para um branch. Assim, os commits feitos à partir de HEAD atualizarão o ponteiro do branch. Apontando para uma tag ou commit. Esse estado é chamado de detached HEAD e os commits feitos só serão alcançáveis à partir de seus hashes.
  19. 19. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQUm repositório com referências
  20. 20. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQgit checkout Move o ponteiro de HEAD para a o destino especificado (branch, tag, commit) Obtendo um arquivo de outro commit Para trazer para o working directory o arquivo X no commit Y, execute git checkout Y -- X.
  21. 21. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQgit reset Move o pointeiro do branch atual. Cuidado O comando reset move o ponteiro do branch, e não a referência de HEAD, como o checkout. Ou seja, os commits do branch antigo não serão mais alcançados.
  22. 22. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQgit reset --hard versao-1.0
  23. 23. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQCriando referências Criando uma tag à partir do commit apontado por HEAD git tag <nome-da-tag> Criando um branch à partir do commit apontado por HEAD git checkout -b <nome-do-branch>
  24. 24. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQgit merge Um “merge“ é um ponto onde duas linhas separadas se encontram. Ou seja, é a junção de dois branches para criar um commit que terá dois pais. Exemplo git merge NovaFeature fast forward Quando o alvo do comando for um sucessor direto do último commit do branch atual, o merge é chamado de fast forward e somente as referências são atualizadas.
  25. 25. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQConflitos Caso haja um conflito que o git não consiga resolver, o arquivo com conflito será alterado para que possamos tomar providências. Lembre-se O comando git status nos dá informações sobre conflitos que ocorreram. Exemplo O arquivo merge-conflict.tar.bz2 contém um exemplo de um conflito para vocês resolverem.
  26. 26. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQgit rebase O comando rebase nos permite aplicar nossas mudanças partindo de outro commit base. Exemplo git rebase <branch>
  27. 27. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQEstado inicial
  28. 28. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQApós algum tempo
  29. 29. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQApós: git rebase master
  30. 30. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQMais rebase Você ainda pode usar a opção -i para editar os commits que serão adicionados. reword: mudar a mensagem do commit edit: parar para editar o commit squash: junta com o commit anterior (mantém ambas mensagens) fixup: junta com o commit anterior (usa só a mensagem do anterior) Se um linha for apagada, o commit não será usado. Os commits são aplicados de cima para baixo, e podem ser reordenados à vontade.
  31. 31. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQgit clone O comando git clone faz uma cópia de um repositório externo para a sua máquina. Clonando o repositório do linux git clone git://github.com/torvalds/linux.git
  32. 32. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQSincronização Como as operações são sempre locais, precisamos de algum modo pra sincronizar os repositórios. git fetch: apenas baixa as informações sobre os servidores remotos git pull: a mesma coisa que fetch, mas faz merge do branch atual com o seu respectivo remoto. git push: lança as atualizações para o servidor de todos os branches locais que têm um branch remoto associado.
  33. 33. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQReferências As referências de servidores remotos têm como prefixo o nome do remoto. E o nome do primeiro remote geralmente é “origin”.
  34. 34. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQgit pull Assumindo que o branch local seja “master” Equivalente a git fetch get merge origin/master Gera muitos commits de merge em um repositório ativo.
  35. 35. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQgit push Somente commits que sejam fast forward serão atualizados no servidor. Criando um branch remoto Por padrão, todos os branches são locais. Para criar um branch no servidor, utilize: git push -u <remote> <branch-local> (a opção -u configura o seu repositório para associar o branch remoto ao local). Enviando tags Por padrão as tags também são locais. Para enviar uma tag para um servidor, utilize: git push <remote> <tag-local>. Note: A opção --tags transferirá todas as tags locais para o servidor.
  36. 36. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQGithub Acesse github.com Usando SSH https://help.github.com/articles/generating-ssh-keys Troubleshooting Usando HTTPS https://help.github.com/articles/set-up-git
  37. 37. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQFiz um commit errado. Como corrijo? Depende. Se você já deu push no commit, ele já está no servidor, logo não é uma boa idéia editá-lo. Porém, você pode criar um novo commit que desfaz a mudança do commit. git revert <commit> Se você ainda não deu push temos duas opções: Editar as mudanças necessárias e “editar” o último commit usando git commit --amend Criar um novo commit. Reordenar as mudanças e juntar as modificações com a opção fixup do comand git rebase -i
  38. 38. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQSempre preciso adicionar todos os arquivos commodificações à staging area? Não. O comando git commit -a commita todos os arquivos tracked. Independentemente da staging area. Cuidado Arquivos tracked são arquivos que o git já conhece (pois você já executou git add nele). Arquivos novos sempre devem ser adicionados Uso constante de git commit -a leva a commits com arquivos faltando.
  39. 39. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQComo faço para ignorar um arquivo? Crie um arquivo chamado .gitignore dentro do seu repositório e coloque o nome do arquivo dentro dele. Várias regras são separadas por quebras de linha e são aplicadas à todos os sub-diretórios. manual git help gitignore
  40. 40. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQQuando devo usar merge e quando devo usar rebase? Devido à característica especial de merges criarem um commit com vários pais. É uma boa prática usar isso apenas para os casos onde realmente ocorreu a junção de dois caminhos destintos (e não sempre que você esquecer de sincronizar com o repositório remoto).
  41. 41. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQ“Perdi” um commit. E agora? Você pode usar o comando git reflog para ver os últimos estados onde HEAD estava. Assim podendo aplicar um reset ou cherry-pick. cherry-pick? O comando git cherry-pick permite você “copiar” um commit de outro lugar e aplicar em seu HEAD. Um novo commit será gerado com a mesmas mudanças, porém, com diferentes hashes.
  42. 42. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQExiste outras formas de referenciar um commit? Sim. Você pode referenciar um commit caminhando por sua “árvore genealógica”. Exemplo <commit>˜N Significa o N-ésimo pai do commit. <commit>˜0 Significa ele mesmo. Você também pode especificar um intervalo de commits. Manual git help gitrevisions
  43. 43. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQEssas coisas de terminal não são pra mim. E interfacegráfica, tem? Claro =) Dê uma olhada nesse link http://git-scm.com/downloads/guis
  44. 44. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQAlgumas coisas interessantes git status git merge --ff-only / git merge --no-ff git rebase -i git log --graph --oneline --decorate=short --date-order --all Plugin de git para o eclipse git config --global alias.co checkout git config --global -e
  45. 45. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQPerguntas? Contato: felipessilveira@gmail.com
  46. 46. Introdução Configurações Primeiros passos Conceitos Servidores Remotos Tips, Tricks & FAQReferências http://git-scm.com/book git help Blogs aleatórios e respostas no Stack Overflow.

×