SlideShare uma empresa Scribd logo
1 de 59
Baixar para ler offline
Sistemas de Controlo
                            de Versões
                           Nuno Morgadinho <nuno@widgilabs.com>




Friday, December 2, 2011
Sistemas de Controlo
                            de Versões?


Friday, December 2, 2011
Sistemas de Controlo
                          de Versões (VCS)
                    • software para gerir diferentes versões
                    • Conhecido vulgarmente como:
                     • Version Control System (VCS)
                     • Source Code Manager (SCM)
                     • Revision Control System (RCS)

Friday, December 2, 2011
Porquê?



Friday, December 2, 2011
Necessidades

                    • trabalhar / colaborar com mais pessoas
                    • guardar um histórico
                    • nunca perder o trabalho
                    • poder voltar atrás se algo correr mal
                    • bug tracking

Friday, December 2, 2011
O que não é um VCS?



Friday, December 2, 2011
Não são VCS

                    • Ficheiro .zip, .tar, .tgz, etc.
                    • Dropbox
                    • GMail
                    • Qualquer outra ferramenta de backup

Friday, December 2, 2011
Como funciona?
                  Repositório




Friday, December 2, 2011
Como funciona?
                  Repositório

                                Ch
                                     ec
                                       ko
                                            ut




Friday, December 2, 2011
Como funciona?
                  Repositório

                                Ch
                                     ec
                                       ko
                                            ut




                                                   modifica




                                                 Utilizador




Friday, December 2, 2011
Como funciona?
                                                                        Repositório
                  Repositório

                                Ch
                                     ec




                                                                   it
                                       ko




                                                               m
                                            ut




                                                               m
                                                              co
                                                   modifica




                                                 Utilizador




Friday, December 2, 2011
Centralizado
                                   Tiago




                           Ana   Repositório   Pedro




                                    João




Friday, December 2, 2011
Distribuído
                                 Tiago




                           Ana           Pedro




                                 João




Friday, December 2, 2011
CVS



Friday, December 2, 2011
SVN
                     • Em relação ao CVS:
                      • Mais rápido
                      • Menos informação transmitida
                      • Detecção automática de ficheiros que
                                   mudaram de localização ou de nome
                           • Correcção de muitos bugs no CVS
  http://tartarus.org/~simon/cvs-vs-svn.html

Friday, December 2, 2011
Sun WorkShop
                             TeamWare


Friday, December 2, 2011
TeamWare

                    • commits locais
                    • não é preciso estar online
                    • distribuído (peer-to-peer)

 http://docs.oracle.com/cd/E19957-01/806-3573/underhood.html


Friday, December 2, 2011
Git
                           http://git-scm.com


Friday, December 2, 2011
Friday, December 2, 2011
Git - Necessidades

                     • Facilitar o desenvolvimento distribuído
                     • Ser escalável
                     • Rápido e eficiente
                      • Repositórios mais pequenos (por ex. no
                                   caso da Mozilla 30x)


  https://git.wiki.kernel.org/articles/g/i/t/GitSvnComparison_cb82.html

Friday, December 2, 2011
Git - Necessidades

                     • Integridade e segurança dos dados
                     • Responsabilidade
                     • Imutabilidade
                     • Transações atómicas

  https://git.wiki.kernel.org/articles/g/i/t/GitSvnComparison_cb82.html

Friday, December 2, 2011
Git - Necessidades

                     • Suportar, facilitar e encorajar a criação e
                             integração de branches
                     • Repositórios completos
                     • Arquitectura modular e extensível
                     • Software Livre

  https://git.wiki.kernel.org/articles/g/i/t/GitSvnComparison_cb82.html

Friday, December 2, 2011
Git

                    • o conteúdo versus o ficheiro
                    • SHA1 versus revision number
                    • sem metadata
                    • branching e merging simplificado

 http://peepcode.com/products/git-internals-pdf

Friday, December 2, 2011
Git
                    • tudo é guardado como um objecto
                    • dentro da directoria .git
                    • quatro tipos de objectos:
                                         blob
                                         tree
                                         commit
                                         tag

 http://peepcode.com/products/git-internals-pdf

Friday, December 2, 2011
blob


                    • o conteúdo de ficheiros é guardado como
                           um blob
                    • sem metadados


Friday, December 2, 2011
blob

                           blob [content_size]
                           Your content here

                           lorem ipsum lorem ipsum




Friday, December 2, 2011
tree

                    • para directorias
                    • recursivo
                    • representação guardada em texto


Friday, December 2, 2011
tree
                           tree [content_size]

                           100644 blob b5f21a README
                           100644 blob afe433 Makefile.pl
                           040000 tree a42cd0 lib




Friday, December 2, 2011
commit

                    • permite criar o histórico
                    • contem um ponteiro para uma tree
                    • informação sobre o autor e a modificação
                           efectuada




Friday, December 2, 2011
commit
      commit [content_size]
      tree 23edfc
      author Nuno Morgadinho <nuno@widgilabs.com>
      committer Nuno Morgadinho <nuno@widgilabs.com>

      commit without a parent

      initial revision




Friday, December 2, 2011
tag

                    • trata-se de um “etiqueta” para um
                           determinado commit
                    • pode ter associada uma descrição
                    • assinada digitalmente via GPG


Friday, December 2, 2011
tag
                tag [content_size]
                object 123fec
                type commit
                tag v1
                tagger Nuno Morgadinho <nuno@widgilabs.com>
                123456789

                release 1.0!



Friday, December 2, 2011
Em Resumo
                           Centralizados   Distribuídos




                               CVS          TeamWare
                               SVN             Git




Friday, December 2, 2011
Outros
                           Centralizados   Distribuídos



                              SCCS          TeamWare
                              RCS              Git
                               CVS          Mercurial
                               SVN           Bazaar




Friday, December 2, 2011
Outros
                                                  Centralizados         Distribuídos

                                                               SCCS      TeamWare
                                                                RCS         Git
              Livre                                             CVS       Mercurial
                                                                SVN        Bazaar

                                                                         BitKeeper
                                                       IBM Rational
      Comercial                                          Perforce
                                                                        Code Co-op



http://en.wikipedia.org/wiki/Comparison_of_revision_control_software
Friday, December 2, 2011
Criar Repositório

                              $ mkdir myproject
                              $ cd myproject
                              $ git init
                              Initialized empty Git repository in .git/




Friday, December 2, 2011
Adicionar Ficheiro

                               $ vi hello.pl
                               $ git add hello.pl
                               $ git commit -m “initial content”
                              [master (root-commit) c232a1c] initial
                               1 files changed, 3 insertions(+), 0 deletions(-)
                               create mode 100644 hello.pl




Friday, December 2, 2011
Adicionar Ficheiro
                              $ vi hello.pl
                              $ git add hello.pl
                              $ git status
                              # On branch master
                              #
                              # Initial commit
                              #
                              # Changes to be committed:
                              # (use "git rm --cached <file>..." to unstage)
                              #
                              #	

       new file: hello.pl
                              #
                              $ git commit -m “initial content”
                              [master (root-commit) c232a1c] initial
                               1 files changed, 3 insertions(+), 0 deletions(-)
                              create mode 100644 hello.pl
                              $ git status
                              # On branch master
                              nothing to commit (working directory clean)




Friday, December 2, 2011
Ver Histórico


                            $ git log hello.pl
                            commit c232a1cd16885e283e7122ee51ecebc029173e48
                            Author: Nuno Morgadinho <nuno@widgilabs.com>
                            Date: Sun Nov 23 21:43:10 2011 +0000

                            initial content




Friday, December 2, 2011
Criar Branch

                           $ git branch experiencia
                           $ git branch
                            experiencia
                           * master
                           $ git checkout experiencia
                            Switched to branch 'experiencia'




Friday, December 2, 2011
Merge Branch

                            $ git merge experiencia
                            Auto-merging hello.pl
                            CONFLICT (content): Merge conflict in hello.pl
                            Automatic merge failed; fix conflicts and then commit the result.
                            $ git add hello.pl
                            $ git commit -m “resolving conflict”




Friday, December 2, 2011
Git Stash

                           $ git pull
                           Git pull: error: Entry foo not uptodate. Cannot merge
                           $ git stash save
                           Saved “WIP on master: e71813e...”
                           $ git pull
                           $ git stash pop




Friday, December 2, 2011
Friday, December 2, 2011
Friday, December 2, 2011
Friday, December 2, 2011
Instalar o Git
                    • Linux
                     • sudo apt-get install git-core
                    • Mac
                     • http://code.google.com/p/git-osx-installer/
                    • Windows
                     • http://code.google.com/p/msysgit/
Friday, December 2, 2011
Ambiente de
                           Desenvolvimento


                           localmente   staging   produção




Friday, December 2, 2011
Ambiente de
                           Desenvolvimento

                                        commit


                           localmente            staging   produção




Friday, December 2, 2011
Ambiente de
                           Desenvolvimento

                                        commit


                           localmente               staging   produção



                                        co
                                             mm
                                               it




                                                    github




Friday, December 2, 2011
Ambiente de
                           Desenvolvimento

                                        commit


                           localmente               staging   produção



                                        co
                                             mm
                                                      pull



                                               it




                                                    github




Friday, December 2, 2011
Ambiente de
                           Desenvolvimento
                                                    Testes

                                        commit


                           localmente                staging   produção



                                        co
                                             mm
                                                        pull



                                               it




                                                      github




Friday, December 2, 2011
Ambiente de
                           Desenvolvimento

                                                                     Release
                                        commit                pull


                           localmente               staging            produção



                                        co
                                             mm
                                                      pull



                                               it




                                                    github




Friday, December 2, 2011
Exercício I

                    • Criar um projecto no GitHub
                    • Adicionar ficheiros ao repositório
                    • Fazer commit


Friday, December 2, 2011
Exercício II


                    • Criar um branch experimental
                    • Merge


Friday, December 2, 2011
Livros




Friday, December 2, 2011
Links
                           http://git-scm.com/

                           http://peepcode.com/products/git

                           http://peepcode.com/products/git-internals-pdf




Friday, December 2, 2011
Conclusão


                    • Git é rápido, open-source, eficiente e
                           distribuído
                    • Não há desculpa para não se usar um VCS!


Friday, December 2, 2011
Questões?



Friday, December 2, 2011
Obrigado

                           Nuno Morgadinho
                             @morgadin
                     http://www.morgadinho.org

Friday, December 2, 2011

Mais conteúdo relacionado

Mais de Nuno Morgadinho

Democracy in PM (and operations)
Democracy in PM (and operations)Democracy in PM (and operations)
Democracy in PM (and operations)Nuno Morgadinho
 
Está na altura de renovar o site da sua empresa?
Está na altura de renovar o site da sua empresa?Está na altura de renovar o site da sua empresa?
Está na altura de renovar o site da sua empresa?Nuno Morgadinho
 
Os maiores desafios ao criar ou remodelar um website
Os maiores desafios ao criar ou remodelar um websiteOs maiores desafios ao criar ou remodelar um website
Os maiores desafios ao criar ou remodelar um websiteNuno Morgadinho
 
O Preço De Projetos WordPress
O Preço De Projetos WordPressO Preço De Projetos WordPress
O Preço De Projetos WordPressNuno Morgadinho
 
Gutenberg (WidgiLabs Training Sessions)
Gutenberg  (WidgiLabs Training Sessions)Gutenberg  (WidgiLabs Training Sessions)
Gutenberg (WidgiLabs Training Sessions)Nuno Morgadinho
 
De curioso a poeta – a comunidade e a cultura WordPress
De curioso a poeta – a comunidade e a cultura WordPressDe curioso a poeta – a comunidade e a cultura WordPress
De curioso a poeta – a comunidade e a cultura WordPressNuno Morgadinho
 

Mais de Nuno Morgadinho (6)

Democracy in PM (and operations)
Democracy in PM (and operations)Democracy in PM (and operations)
Democracy in PM (and operations)
 
Está na altura de renovar o site da sua empresa?
Está na altura de renovar o site da sua empresa?Está na altura de renovar o site da sua empresa?
Está na altura de renovar o site da sua empresa?
 
Os maiores desafios ao criar ou remodelar um website
Os maiores desafios ao criar ou remodelar um websiteOs maiores desafios ao criar ou remodelar um website
Os maiores desafios ao criar ou remodelar um website
 
O Preço De Projetos WordPress
O Preço De Projetos WordPressO Preço De Projetos WordPress
O Preço De Projetos WordPress
 
Gutenberg (WidgiLabs Training Sessions)
Gutenberg  (WidgiLabs Training Sessions)Gutenberg  (WidgiLabs Training Sessions)
Gutenberg (WidgiLabs Training Sessions)
 
De curioso a poeta – a comunidade e a cultura WordPress
De curioso a poeta – a comunidade e a cultura WordPressDe curioso a poeta – a comunidade e a cultura WordPress
De curioso a poeta – a comunidade e a cultura WordPress
 

Sistemas de Controlo de Versões

  • 1. Sistemas de Controlo de Versões Nuno Morgadinho <nuno@widgilabs.com> Friday, December 2, 2011
  • 2. Sistemas de Controlo de Versões? Friday, December 2, 2011
  • 3. Sistemas de Controlo de Versões (VCS) • software para gerir diferentes versões • Conhecido vulgarmente como: • Version Control System (VCS) • Source Code Manager (SCM) • Revision Control System (RCS) Friday, December 2, 2011
  • 5. Necessidades • trabalhar / colaborar com mais pessoas • guardar um histórico • nunca perder o trabalho • poder voltar atrás se algo correr mal • bug tracking Friday, December 2, 2011
  • 6. O que não é um VCS? Friday, December 2, 2011
  • 7. Não são VCS • Ficheiro .zip, .tar, .tgz, etc. • Dropbox • GMail • Qualquer outra ferramenta de backup Friday, December 2, 2011
  • 8. Como funciona? Repositório Friday, December 2, 2011
  • 9. Como funciona? Repositório Ch ec ko ut Friday, December 2, 2011
  • 10. Como funciona? Repositório Ch ec ko ut modifica Utilizador Friday, December 2, 2011
  • 11. Como funciona? Repositório Repositório Ch ec it ko m ut m co modifica Utilizador Friday, December 2, 2011
  • 12. Centralizado Tiago Ana Repositório Pedro João Friday, December 2, 2011
  • 13. Distribuído Tiago Ana Pedro João Friday, December 2, 2011
  • 15. SVN • Em relação ao CVS: • Mais rápido • Menos informação transmitida • Detecção automática de ficheiros que mudaram de localização ou de nome • Correcção de muitos bugs no CVS http://tartarus.org/~simon/cvs-vs-svn.html Friday, December 2, 2011
  • 16. Sun WorkShop TeamWare Friday, December 2, 2011
  • 17. TeamWare • commits locais • não é preciso estar online • distribuído (peer-to-peer) http://docs.oracle.com/cd/E19957-01/806-3573/underhood.html Friday, December 2, 2011
  • 18. Git http://git-scm.com Friday, December 2, 2011
  • 20. Git - Necessidades • Facilitar o desenvolvimento distribuído • Ser escalável • Rápido e eficiente • Repositórios mais pequenos (por ex. no caso da Mozilla 30x) https://git.wiki.kernel.org/articles/g/i/t/GitSvnComparison_cb82.html Friday, December 2, 2011
  • 21. Git - Necessidades • Integridade e segurança dos dados • Responsabilidade • Imutabilidade • Transações atómicas https://git.wiki.kernel.org/articles/g/i/t/GitSvnComparison_cb82.html Friday, December 2, 2011
  • 22. Git - Necessidades • Suportar, facilitar e encorajar a criação e integração de branches • Repositórios completos • Arquitectura modular e extensível • Software Livre https://git.wiki.kernel.org/articles/g/i/t/GitSvnComparison_cb82.html Friday, December 2, 2011
  • 23. Git • o conteúdo versus o ficheiro • SHA1 versus revision number • sem metadata • branching e merging simplificado http://peepcode.com/products/git-internals-pdf Friday, December 2, 2011
  • 24. Git • tudo é guardado como um objecto • dentro da directoria .git • quatro tipos de objectos: blob tree commit tag http://peepcode.com/products/git-internals-pdf Friday, December 2, 2011
  • 25. blob • o conteúdo de ficheiros é guardado como um blob • sem metadados Friday, December 2, 2011
  • 26. blob blob [content_size] Your content here lorem ipsum lorem ipsum Friday, December 2, 2011
  • 27. tree • para directorias • recursivo • representação guardada em texto Friday, December 2, 2011
  • 28. tree tree [content_size] 100644 blob b5f21a README 100644 blob afe433 Makefile.pl 040000 tree a42cd0 lib Friday, December 2, 2011
  • 29. commit • permite criar o histórico • contem um ponteiro para uma tree • informação sobre o autor e a modificação efectuada Friday, December 2, 2011
  • 30. commit commit [content_size] tree 23edfc author Nuno Morgadinho <nuno@widgilabs.com> committer Nuno Morgadinho <nuno@widgilabs.com> commit without a parent initial revision Friday, December 2, 2011
  • 31. tag • trata-se de um “etiqueta” para um determinado commit • pode ter associada uma descrição • assinada digitalmente via GPG Friday, December 2, 2011
  • 32. tag tag [content_size] object 123fec type commit tag v1 tagger Nuno Morgadinho <nuno@widgilabs.com> 123456789 release 1.0! Friday, December 2, 2011
  • 33. Em Resumo Centralizados Distribuídos CVS TeamWare SVN Git Friday, December 2, 2011
  • 34. Outros Centralizados Distribuídos SCCS TeamWare RCS Git CVS Mercurial SVN Bazaar Friday, December 2, 2011
  • 35. Outros Centralizados Distribuídos SCCS TeamWare RCS Git Livre CVS Mercurial SVN Bazaar BitKeeper IBM Rational Comercial Perforce Code Co-op http://en.wikipedia.org/wiki/Comparison_of_revision_control_software Friday, December 2, 2011
  • 36. Criar Repositório $ mkdir myproject $ cd myproject $ git init Initialized empty Git repository in .git/ Friday, December 2, 2011
  • 37. Adicionar Ficheiro $ vi hello.pl $ git add hello.pl $ git commit -m “initial content” [master (root-commit) c232a1c] initial 1 files changed, 3 insertions(+), 0 deletions(-) create mode 100644 hello.pl Friday, December 2, 2011
  • 38. Adicionar Ficheiro $ vi hello.pl $ git add hello.pl $ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: hello.pl # $ git commit -m “initial content” [master (root-commit) c232a1c] initial 1 files changed, 3 insertions(+), 0 deletions(-) create mode 100644 hello.pl $ git status # On branch master nothing to commit (working directory clean) Friday, December 2, 2011
  • 39. Ver Histórico $ git log hello.pl commit c232a1cd16885e283e7122ee51ecebc029173e48 Author: Nuno Morgadinho <nuno@widgilabs.com> Date: Sun Nov 23 21:43:10 2011 +0000 initial content Friday, December 2, 2011
  • 40. Criar Branch $ git branch experiencia $ git branch experiencia * master $ git checkout experiencia Switched to branch 'experiencia' Friday, December 2, 2011
  • 41. Merge Branch $ git merge experiencia Auto-merging hello.pl CONFLICT (content): Merge conflict in hello.pl Automatic merge failed; fix conflicts and then commit the result. $ git add hello.pl $ git commit -m “resolving conflict” Friday, December 2, 2011
  • 42. Git Stash $ git pull Git pull: error: Entry foo not uptodate. Cannot merge $ git stash save Saved “WIP on master: e71813e...” $ git pull $ git stash pop Friday, December 2, 2011
  • 46. Instalar o Git • Linux • sudo apt-get install git-core • Mac • http://code.google.com/p/git-osx-installer/ • Windows • http://code.google.com/p/msysgit/ Friday, December 2, 2011
  • 47. Ambiente de Desenvolvimento localmente staging produção Friday, December 2, 2011
  • 48. Ambiente de Desenvolvimento commit localmente staging produção Friday, December 2, 2011
  • 49. Ambiente de Desenvolvimento commit localmente staging produção co mm it github Friday, December 2, 2011
  • 50. Ambiente de Desenvolvimento commit localmente staging produção co mm pull it github Friday, December 2, 2011
  • 51. Ambiente de Desenvolvimento Testes commit localmente staging produção co mm pull it github Friday, December 2, 2011
  • 52. Ambiente de Desenvolvimento Release commit pull localmente staging produção co mm pull it github Friday, December 2, 2011
  • 53. Exercício I • Criar um projecto no GitHub • Adicionar ficheiros ao repositório • Fazer commit Friday, December 2, 2011
  • 54. Exercício II • Criar um branch experimental • Merge Friday, December 2, 2011
  • 56. Links http://git-scm.com/ http://peepcode.com/products/git http://peepcode.com/products/git-internals-pdf Friday, December 2, 2011
  • 57. Conclusão • Git é rápido, open-source, eficiente e distribuído • Não há desculpa para não se usar um VCS! Friday, December 2, 2011
  • 59. Obrigado Nuno Morgadinho @morgadin http://www.morgadinho.org Friday, December 2, 2011