Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Tutorial de Git

Tutorial de Git

Tutorial realizado na Python Brasil 12 - Florianópolis por Débora Correia e Renato Oliveira.

"Generally, the best way to learn git is probably to first only do very basic things and not even look at some of the things you can do until you are familiar and confident about the basics." - Linus Torvalds

Quando começamos a trabalhar com Git, a preocupação em aprender os seus comandos básicos é, normalmente, maior do que entender seu modelo e funcionamento completo. A questão é que ele, além de ser considerado complexo e diferente do que a maioria estava acostumada, ele oferece diversas maneiras de resolver o mesmo problema. Isso faz com que possam surgir situações que pareçam complicadas de serem resolvidas. Uma boa forma de evitar que casos assim aconteçam é entender como Git funciona e seu modelo.

Esse tutorial tem como objetivo ajudar as pessoas a irem além dos comandos básicos. A partir daí, podemos então focar em resolver problemas práticos e em estratégias para trabalhar em equipe.

Labcodes Software Studio

October 14, 2016
Tweet

More Decks by Labcodes Software Studio

Other Decks in Technology

Transcript

  1. "Isto é Git. Ele controla o trabalho colaborativo em projetos

    através de um belo modelo distribuído de árvore de teoria dos grafos. Massa, como usamos? Nem ideia. Decore este comandos e digite-os para sincronizar tudo. Se acontecerem erros, salve o seu trabalho em outro lugar, delete o projeto e download uma nova cópia do repositório."
  2. Roteiro Primeiros passos Git básico Entendendo Git Git branching Branching

    models/Git workflows Desfazendo coisas Dicas e truques
  3. Controle de versão Uma estratégia de backup.
 
 O controle

    de versão é um sistema que registra as mudanças feitas em um arquivo ou um conjunto de arquivos ao longo do tempo de forma que você possa recuperar versões específicas. 
 

  4. Controle de versão Uma estratégia de backup.
 
 O controle

    de versão é um sistema que registra as mudanças feitas em um arquivo ou um conjunto de arquivos ao longo do tempo de forma que você possa recuperar versões específicas. 
 

  5. Controle de versão Uma estratégia de backup.
 
 O controle

    de versão é um sistema que registra as mudanças feitas em um arquivo ou um conjunto de arquivos ao longo do tempo de forma que você possa recuperar versões específicas. 
 Pode ser usado por qualquer um.
  6. Git histórico e background Rompimento da comunidade Linux com a

    empresa do sistema de controle de versão distribuído usado (BitKeeper). Criação do Git por Linus Torvalds. Características: Velocidade e Design simples Suporte robusto a desenvolvimento não linear Totalmente distribuído Lida eficientemente com grandes projetos
  7. Git Esqueça os outros VCSs que você já usou. A

    maior diferença está na forma de tratar os dados. SVN: Armazena a informação como uma lista de mudanças por arquivo. Salva as diferenças. Git: Considera que os dados são conjuntos de snapshots, ou seja, captura o estado atual do seu projeto a cada mudança feita (commit).
  8. Git

  9. Git Velocidade para realizar operações no Git, que precisam apenas

    de recursos e arquivos locais Ex: navegar no histórico do projeto Liberdade para trabalhar e fazer commits offline. Integridade. Não é possível mudar nada sem que o Git tenha conhecimento. Assim informação não é perdida ou corrompida.
  10. Instalador gráfico do Git: http://sourceforge.net/projects/git-osx- installer/ Via MacPorts (http://www.macports.org) $

    sudo port install git-core +svn +doc +bash_completion +gitweb Instalando git MAC
  11. Projeto msyspit http://msysgit.github.com Após concluir a instalação, você terá tanto

    uma versão command line (linha de comando, incluindo um cliente SSH que será útil depois) e uma GUI padrão. Instalando git WINDOWS
  12. git config Permite ler e definir variáveis de configuração Diferentes

    níveis de armazenamento das variáveis: /etc/gitconfig ~/.gitconfig .git/config Configurações iniciais WINDOWS
  13. $ git config --global user.name “Débora Correia" $ git config

    --global user.email [email protected] $ git config --global color.ui auto $ git config --list $ git help config
  14. Adicionar arquivos STATUS No repositório criado, veja o estado Crie

    um arquivo README.md. Adicione o arquivo para staging area Commit o arquivo
  15. Adicionar arquivos MONITORANDO ARQUIVOS MODIFICADOS Modificar o arquivo existente (README)

    e adicionar em staged area.
 
 Modificar novamente o mesmo arquivo.
  16. Adicionar arquivos VISUALIZANDO DIFERENÇAS Verificar o diff entre o arquivo

    alterado e o que está commitado (repositório). Ver a diferença entre o que tá em staged e o já commitado (repositório) Adicionar por partes
  17. $ git remote origin $ git remote -v origin git://github.com/schacon/ticgit.git

    (fetch) origin git://github.com/schacon/ticgit.git (push) $ git remote add renato [email protected]:renatooliveira/git-basics- tutorial.git $ git fetch origin $ git pull origin master $ git push origin master
  18. Resumo O que é um controle de versão Git é

    um controle de versão distribuído Instalar e configurar Criar repositórios Adicionar, acompanhar, commitar arquivos Trabalhar com repositórios remotos
  19. Comandos “Porcelain” Commands git add, git commit, git push, git

    pull, git branch, git checkout, git merge, … “Plumbing” Commands git cat-file, git hash-object, git count-objects, …
  20. Git é um map Valores e chaves Os valores são

    o conteúdo. Qualquer sequencia de byte. Chaves são hashes(checksum) SHA1 Único Praticamente impossível de ser repetido
  21. git-tutorial $ git hash-object "Python Brasil" fatal: Cannot open 'Python

    Brasil': No such file or directory git-tutorial $ echo "Python Brasil" Python Brasil git-tutorial $ echo "Python Brasil" | git hash-object --stdin bbf29edf5f31251c46279b764cf4fed25519b429
  22. Git é um persistent map De onde vem a persistência?

    Tudo tá sendo salvo em algum lugar.
  23. Objetos de Git 0ca1 5bf3 / README.md 30a7 Repositório usado

    para o tutorial de Git na Python Brasil 2016 9219 <!DOCTYPE html> <html> <head> … bf37 index.html css 2a68 h1, h2, h3, h4, h5, h6, p{ color: #414a4d; } styles.css
  24. Objetos de Git 0ca1 5bf3 / README.md 30a7 9219 bf37

    index.html css 2a68 e5e4 18e4 / css styles.css 421b index.html
  25. Objetos de Git 0ca1 5bf3 / README.md 30a7 9219 bf37

    index.html css 2a68 e5e4 18e4 / css styles.css 421b index.html
  26. Objetos de Git 0ca1 5bf3 / README.md 30a7 9219 bf37

    index.html css 2a68 e5e4 18e4 / css styles.css 421b index.html mytag
  27. “Using Git for source control is now an industry standard,

    but how do you know which workflow is best?.”
  28. “Git itself is fairly complex to understand, making the workflow

    that you use with it more complex than necessary is simply adding more mental overhead to everybody’s day. I would always advocate using the simplest possible system that will work for your team and doing so until it doesn’t work anymore and then adding complexity only as absolutely needed.” –Scott Chacon, GitHub
  29. Time release branches master develop hotfixes feature branches Derivado do

    artigo de Vincent Driessen: “a successful git branching model" Base da extensão git-flow. Gitflow
  30. Gitflow O repositório tem duas branches com vida infinita: master

    dev master develop Initial production version Next production release Next production release Work in progress
  31. Gitflow SUPPORT BRANCHES Feature branch, release branch e hotfix branch.

    Permite desenvolvimento paralelo no time. Devem ter um tempo de vida limitado, sou seja, devem ser deletadas. Branches normais de Git. Só mudam na forma de usar.
  32. Gitflow FEATURE BRANCHES Existe enquanto a feature está em desenvolvimento.

    Branch off Merge back Naming dev dev #taskId- description develop feature branches Major feature for next release
  33. Gitflow RELEASE BRANCHES Existe para preparar para um release em

    produção. Depois de feito o release, nada pode ser adicionado a esta branch. Branch off Merge back Naming dev dev master release- [version] release branches master develop Tag 1.0 From this point on, “next release” means the release after 1.0 Bugfixes from rel. branch may be continuously merged back into develop Tag 0.1 Tag 0.2 Only bugfixes! Start of release branch for 1.0
  34. master develop hotfixes Tag 1.0 Severe bug fixed for production:

    hotfix 0.2 Tag 0.1 Tag 0.2 Incorporate bugfix in develop Bug em produção que precisa ser resolvido imediatamente. Não precisa esperar as coisas estarem prontas em dev. Branch off Merge back Naming master dev master #hotfix- description Gitflow HOTFIX BRANCHES
  35. 1. Gira muito em torno dos “releases”. Para projetos onde

    há deploy todo dia, pode ser muito custoso. 2. Pode acarretar em long lived branches! 3. Adiciona complexidade Gitflow PROBLEMS
  36. “A branching strategy itself is a process; a document. It's

    the place where, as a team, you capture your approach and attitude to the way that you produce, track and ship code. It can be a simple as a page on the company wiki – something that gives structure to the way that you work”
  37. Undoing things Git é tão flexível que existem diferentes formas

    de desfazer coisas, dependendo do que você já fez e o que você deseja. Antes de começar a fazer qualquer alteração, lembre-se de fazer backup das coisas no seu working directory. Falar sobre a diferença de git reset, 
 git checkout e git revert.
  38. Undoing things Estão no seu working directory mas você ainda

    não subiu? Undoing things ALTERAÇÕES NÃO COMMITADAS
  39. Undoing things Estão no seu working directory mas você ainda

    não subiu? git reset git checkout -- <file> Undoing things ALTERAÇÕES NÃO COMMITADAS
  40. Undoing things Você fez vários commits e quer desfazê-los para

    sua branch ficar idêntica a “upstream" desta branch? git reset É uma forma de mover o HEAD da branch para um commit diferente. Undoing things ALTERAÇÕES COMMITADAS
  41. Undoing things É a melhor coisa que você pode fazer

    quando você quer desfazer coisas que não compartilhou ainda com o resto do time. (Não deu git push) Undoing things ALTERAÇÕES COMMITADAS
  42. Undoing things ALTERAÇÕES FORAM DADAS PUSH Desfaz um commit criado

    um novo commit “negativo”. É uma forma segura de desfazer erros, sem re- escrever o histórico publicado. git revert SHA git revert -m 1 SHA
  43. Undoing things ALTERAÇÕES FORAM DADAS PUSH Se for um revert

    de um merge commit, lembre- se de dar revert do revert no futuro, se você deseja dar merge novamente dessa branch. Faça isso imediatamente depois do revert na sua branch.
  44. Undoing things O PROBLEMA DE ALTERAR O HISTÓRICO Se for

    um revert de um merge commit, lembre- se de dar revert do revert no futuro, se você deseja dar merge novamente dessa branch. Faça isso imediatamente depois do revert na sua branch.
  45. Resumo Git e controle de versão Instalar e configurar Criar

    repositórios e o básico para começar a trabalhar Entendendo o modelo de git Fluxos de trabalho Resolver tretas!