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

Git para Principiantes

Git para Principiantes

O mínimo que você, desenvolvedor, precisa saber sobre Git - Sistema de Versionamento de Arquivos.

Fabio Beneditto

February 18, 2020
Tweet

More Decks by Fabio Beneditto

Other Decks in Technology

Transcript

  1. Git para Principiantes Git para Principiantes O mínimo que você

    precisa saber O mínimo que você precisa saber Fabio Beneditto Fabio Beneditto (v 1.2.2) (v 1.2.2)
  2. Sobre Sobre Fabio Beneditto Fabio Beneditto Entusiasta de FOSS Entusiasta

    de FOSS Voluntário Tchelinux Voluntário Tchelinux Praticante de Praticante de #mototerapia #mototerapia Fotógrafo Fotógrafo about.me/fabiobeneditto about.me/fabiobeneditto Github / Gitlab / Twitter / Telegram: Github / Gitlab / Twitter / Telegram: @fabiobeneditto @fabiobeneditto
  3. Motivação • Esse é o Git. Ele mostra nosso trabalho

    em projetos através de uma árvore distribuída. • Legal! E como vamos usar ele? • Não faço ideia. Apenas decore esses comandos e digite-os para sincronizar tudo. Se der erro, salve seu trabalho em algum lugar, apague o projeto e faça uma nova cópia. (tradução livre) - Fonte: https://xkcd.com/1597/
  4. O que é Controle de Versão? • Sistema que registra

    as mudanças feitas – Em um arquivo, ou vários • De forma que seja fácil a recuperação – Versões específicas, anteriores • Pode ser utilizado com qualquer tipo de arquivo – Código-fonte é mais comum Fonte: https://git-scm.com/book/pt-br/v2 Fonte: https://git-scm.com/book/pt-br/v2
  5. Por que usar Controle de Versão? • Manter histórico de

    alterações no código – Autor da alteração (Quem?) – Data das alterações (Quando?) – Motivo das alterações (Por que?) – Arquivos alterados (O que?) • Facilitar a colaboração – pessoas podem trabalhar juntas • Auxiliar na identificação e resolução de problemas
  6. O que é GIT? • Sistema de controle de versão

    distribuído Sistema de controle de versão distribuído • Criado por Linus Torvalds em 07/04/2005 Criado por Linus Torvalds em 07/04/2005 • Simples e rápido Simples e rápido – Armazena Armazena snapshots snapshots • É Livre É Livre – GNU GPL v2 GNU GPL v2
  7. GIT != GitHub • Serviço de Hospedagem de Código Serviço

    de Hospedagem de Código • Criado em 2008 Criado em 2008 • Usa GIT Usa GIT • Comprado pela Microsoft em Comprado pela Microsoft em 04/06/2018 04/06/2018 – Por U$ 7,5 bilhões Por U$ 7,5 bilhões • NÃO É Livre (ainda) NÃO É Livre (ainda) – As Free Speech As Free Speech
  8. GIT != GitHub • Github – github.com Github – github.com

    • Gitlab – gitlab.com Gitlab – gitlab.com • Bitbucket – bitbucket.org Bitbucket – bitbucket.org
  9. Utilização básica de Git Utilização básica de Git “ “Talk

    is Cheap: show me the code” Talk is Cheap: show me the code”
  10. Configurando o cliente Git $ git config $ git config

    –-global –-global user.name "John Doe" user.name "John Doe" $ git config $ git config –-global –-global user.email "[email protected]" user.email "[email protected]" $ cat .gitconfig $ cat .gitconfig [user] [user] name = John Doe name = John Doe email = [email protected] email = [email protected]
  11. Clonando um repositório $ mkdir Projeto $ mkdir Projeto $

    cd Projeto $ cd Projeto $ git clone \ $ git clone \ https://gitlab.com/fabiobeneditto/tchelinux- https://gitlab.com/fabiobeneditto/tchelinux- git.git Tchelinux git.git Tchelinux Cloning into 'Tchelinux'... Cloning into 'Tchelinux'... done. done.
  12. Verificando alterações $ vim hello.md $ vim hello.md $ git

    status $ git status On branch master On branch master Initial commit Initial commit Untracked files: Untracked files: (use "git add <file>..." to include in what will be committed) (use "git add <file>..." to include in what will be committed) hello.md hello.md nothing added to commit but untracked files present (use "git add" to track) nothing added to commit but untracked files present (use "git add" to track)
  13. Verificando alterações $ vim hello.md $ vim hello.md $ git

    status $ git status -s -s ?? hello.md ?? hello.md
  14. Adicionando arquivos ao index $ git add hello.md $ git

    add hello.md $ git status $ git status On branch master On branch master Changes to be committed: Changes to be committed: (use "git reset HEAD <file>..." to unstage) (use "git reset HEAD <file>..." to unstage) modified: hello.md modified: hello.md
  15. Adicionando arquivos ao index “ “Index Index” é a ”

    é a stage area: stage area: • um simples arquivo que armazena informações sobre um simples arquivo que armazena informações sobre o que irá em seu próximo o que irá em seu próximo commit commit. Você, durante o . Você, durante o ciclo: ciclo: – Modifica arquivos no seu diretório de trabalho. Modifica arquivos no seu diretório de trabalho. – Seleciona os arquivos, adicionando Seleciona os arquivos, adicionando snapshots snapshots deles para o deles para o index index. . – Faz um Faz um commit commit, levando os arquivos como eles , levando os arquivos como eles estão no estão no index index e os armazena permanentemente e os armazena permanentemente
  16. Fazendo seu primeiro commit $ git commit $ git commit

    -m -m "Versão Inicial de hello.md" "Versão Inicial de hello.md" [master (root-commit) [master (root-commit) f480dd9 f480dd9] Versão Inicial de hello.md ] Versão Inicial de hello.md 1 file changed, 3 insertions(+) 1 file changed, 3 insertions(+) create mode 100644 hello.md create mode 100644 hello.md
  17. Fazendo os demais commits $ vim hello.md $ vim hello.md

    $ git add hello.md $ git add hello.md $ git commit $ git commit -m -m "Bloco Extra em hello.md" "Bloco Extra em hello.md" [master [master 97e567d 97e567d] Bloco Extra em hello.md ] Bloco Extra em hello.md 1 file changed, 1 insertion(+), 1 deletion(-) 1 file changed, 1 insertion(+), 1 deletion(-)
  18. Fazendo os demais commits $ vim hello.md $ vim hello.md

    $ git add -p $ git add -p (ou --patch) (ou --patch) diff --git a/hello.md b/hello.md diff --git a/hello.md b/hello.md index 9cff701..aa1314b 100644 index 9cff701..aa1314b 100644 --- a/hello.md --- a/hello.md +++ b/hello.md +++ b/hello.md @@ -4,3 +4,5 @@ Exemplo de como fica um arquivo no Git @@ -4,3 +4,5 @@ Exemplo de como fica um arquivo no Git ## Como fazer ## Como fazer Adicionando uma segunda linha e um ponto. Adicionando uma segunda linha e um ponto. + + +...e mais uma +...e mais uma Stage this hunk [y,n,q,a,d,/,e,?]? Stage this hunk [y,n,q,a,d,/,e,?]?
  19. Use mensagens explicativas! $ vim hello.md $ vim hello.md $

    git add hello.md $ git add hello.md $ git commit $ git commit [] Descricao Curta [] Descricao Curta Descrição Detalhada do Commit Descrição Detalhada do Commit # Please enter the commit message for your changes. Lines starting # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # with '#' will be ignored, and an empty message aborts the commit. # On branch master # On branch master # Changes to be committed: # Changes to be committed: # modified: hello.md # modified: hello.md # #
  20. Enviando tudo para o servidor remoto $ git push -u

    origin $ git push -u origin –all –all Counting objects: 12, done. Counting objects: 12, done. Delta compression using up to 4 threads. Delta compression using up to 4 threads. Compressing objects: 100% (8/8), done. Compressing objects: 100% (8/8), done. Writing objects: 100% (12/12), 1.28 KiB | 653.00 KiB/s, done. Writing objects: 100% (12/12), 1.28 KiB | 653.00 KiB/s, done. Total 12 (delta 2), reused 0 (delta 0) Total 12 (delta 2), reused 0 (delta 0) To gitlab.com:fabiobeneditto/tchelinux-git.git To gitlab.com:fabiobeneditto/tchelinux-git.git * [new branch] master -> master * [new branch] master -> master * [new branch] nova-feature -> nova-feature * [new branch] nova-feature -> nova-feature Branch master set up to track remote branch master from origin. Branch master set up to track remote branch master from origin. Branch nova-feature set up to track remote branch nova-feature from Branch nova-feature set up to track remote branch nova-feature from origin. origin.
  21. Uso menos básico de Git Uso menos básico de Git

    “ “Básica, mas nem tanto” Básica, mas nem tanto”
  22. Criando um repositório $ mkdir Projeto $ mkdir Projeto $

    cd Projeto $ cd Projeto $ git init $ git init Initialized empty Git repository in Projeto/.git/ Initialized empty Git repository in Projeto/.git/
  23. Reescrevendo o último commit $ vim hello.md $ vim hello.md

    $ git add hello.md $ git add hello.md $ git commit --amend $ git commit --amend [master [master dd259b4 dd259b4] Bloco Extra em hello.md ] Bloco Extra em hello.md Date: Sun Sep 17 15:36:51 2017 -0300 Date: Sun Sep 17 15:36:51 2017 -0300 1 file changed, 3 insertions(+), 1 deletion(-) 1 file changed, 3 insertions(+), 1 deletion(-)
  24. Reescrevendo o último commit $ git commit --amend $ git

    commit --amend Bloco Extra em hello.md Bloco Extra em hello.md # Please enter the commit message for your changes. Lines starting # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # with '#' will be ignored, and an empty message aborts the commit. # # # Date: Sun Sep 17 15:36:51 2017 -0300 # Date: Sun Sep 17 15:36:51 2017 -0300 # # # On branch master # On branch master # Changes to be committed: # Changes to be committed: # modified: hello.md # modified: hello.md
  25. Removendo o último commit $ git reset --hard HEAD~1 $

    git reset --hard HEAD~1 HEAD is now at HEAD is now at f480dd9 f480dd9 Versão Inicial de hello.md Versão Inicial de hello.md
  26. Descartando alterações antes do commit $ git checkout -p $

    git checkout -p diff --git a/hello.md b/hello.md diff --git a/hello.md b/hello.md index aba21ac..2cc5dc2 100644 index aba21ac..2cc5dc2 100644 --- a/hello.md --- a/hello.md +++ b/hello.md +++ b/hello.md @@ -1,3 +1,5 @@ @@ -1,3 +1,5 @@ # Hello World # Hello World Exemplo de como fica um arquivo no Git Exemplo de como fica um arquivo no Git + + +Adicionando uma terceira linha +Adicionando uma terceira linha Discard this hunk from worktree [y,n,q,a,d,/,e,?]? Discard this hunk from worktree [y,n,q,a,d,/,e,?]?
  27. Listando commits realizados $ git log $ git log commit

    commit f480dd9 f480dd96974c5eafea736a4286db353172e960e3 (HEAD -> master) 6974c5eafea736a4286db353172e960e3 (HEAD -> master) Author: Fabio Beneditto <[email protected]> Author: Fabio Beneditto <[email protected]> Date: Sun Sep 17 15:02:48 2017 -0300 Date: Sun Sep 17 15:02:48 2017 -0300 Versão Inicial de hello.md Versão Inicial de hello.md $ git log $ git log --pretty=oneline --pretty=oneline f480dd9 f480dd96974c5eafea736a4286db353172e960e3 (HEAD -> master) Versão 6974c5eafea736a4286db353172e960e3 (HEAD -> master) Versão Inicial de hello.md Inicial de hello.md $ git log $ git log --oneline --oneline f480dd9 f480dd9 (HEAD -> master) Versão Inicial de hello.md (HEAD -> master) Versão Inicial de hello.md
  28. Visualizando detalhes de um commit $ git show $ git

    show f480dd9 f480dd9 commit commit f480dd9 f480dd96974c5eafea736a4286db353172e960e3 (HEAD -> master) 6974c5eafea736a4286db353172e960e3 (HEAD -> master) Author: Fabio Beneditto <[email protected]> Author: Fabio Beneditto <[email protected]> Date: Sun Sep 17 15:02:48 2017 -0300 Date: Sun Sep 17 15:02:48 2017 -0300 Versão Inicial de hello.md Versão Inicial de hello.md diff --git a/hello.md diff --git a/hello.md b/hello.md b/hello.md new file mode 100644 new file mode 100644 index 0000000..aba21ac index 0000000..aba21ac --- /dev/null --- /dev/null +++ b/hello.md +++ b/hello.md @@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@ +# Hello World +# Hello World + + +Exemplo de como fica um arquivo no Git +Exemplo de como fica um arquivo no Git
  29. Exibindo diferenças entre commits $ git diff $ git diff

    f480dd9 f480dd9.. ..cf8cc84 cf8cc84 diff --git a/hello.md diff --git a/hello.md b/hello.md b/hello.md index aba21ac.. index aba21ac..2cc5dc2 2cc5dc2 100644 100644 --- a/hello.md --- a/hello.md +++ b/hello.md +++ b/hello.md @@ -1,3 +1,5 @@ @@ -1,3 +1,5 @@ # Hello World # Hello World Exemplo de como fica um arquivo no Git Exemplo de como fica um arquivo no Git + + +Adicionando uma terceira linha +Adicionando uma terceira linha
  30. Criando e usando branches $ git branch nova-feature $ git

    branch nova-feature $ git branch $ git branch * master * master nova-feature nova-feature $ git checkout nova-feature $ git checkout nova-feature Switched to branch 'nova-feature' Switched to branch 'nova-feature' $ git branch $ git branch master master * nova-feature * nova-feature
  31. Fazendo merge de branches $ git checkout master $ git

    checkout master Switched to branch 'master' Switched to branch 'master' $ git merge nova-feature $ git merge nova-feature Updating 3e9fc43..ce48a52 Updating 3e9fc43..ce48a52 Fast-forward Fast-forward hello.md | 1 + hello.md | 1 + 1 file changed, 1 insertion(+) 1 file changed, 1 insertion(+) commit f480dd96974c5eafea736a4286db353172e960e3 commit f480dd96974c5eafea736a4286db353172e960e3 $ git log --oneline $ git log --oneline ce48a52 (HEAD -> master, nova-feature) Subtitulo incluido ce48a52 (HEAD -> master, nova-feature) Subtitulo incluido 3e9fc43 Descricao Curta da tarefa 3e9fc43 Descricao Curta da tarefa cf8cc84 Bloco Extra em hello.md cf8cc84 Bloco Extra em hello.md f480dd9 Versão Inicial de hello.md f480dd9 Versão Inicial de hello.md
  32. Utilização de repositórios Utilização de repositórios remotos com Git remotos

    com Git “ “Já tenho um repositório. #comofas ?” Já tenho um repositório. #comofas ?”
  33. Atualizando um repositório local $ cd Tchelinux/ $ cd Tchelinux/

    $ git checkout master $ git checkout master $ git pull $ git pull --rebase --rebase
  34. Adicionando remotes ao repositório $ cd Tchelinux $ cd Tchelinux

    $ git remote add origin \ $ git remote add origin \ [email protected]:fabiobeneditto/tchelinux-git.git [email protected]:fabiobeneditto/tchelinux-git.git
  35. E como aprender mais? • Git Book Git Book -

    https://git-scm.com/book/pt-br/v2 - https://git-scm.com/book/pt-br/v2 • Git Cheat Sheet Git Cheat Sheet - https://www.git-tower.com/blog/git-cheat-sheet/ - https://www.git-tower.com/blog/git-cheat-sheet/ • OwShitGit OwShitGit - http://ohshitgit.com/ - http://ohshitgit.com/ • Git Explorer Git Explorer - https://gitexplorer.com - https://gitexplorer.com • Criar contas e usar: Criar contas e usar: – Gitlab Gitlab - https://gitlab.com/ - https://gitlab.com/ – Github Github - https://github.com/ - https://github.com/ • Clonar repositórios e colaborar com projetos Clonar repositórios e colaborar com projetos
  36. Muito Obrigado! Agradecimentos: Agradecimentos: • Leonardo Vaz Leonardo Vaz •

    Julio Biason Julio Biason • Cláudio Cláudio “Patola” “Patola” Sampaio Sampaio • Tchelinux Tchelinux https://speakerdeck.com/fabiobeneditto https://speakerdeck.com/fabiobeneditto