SlideShare una empresa de Scribd logo
1 de 26
Descargar para leer sin conexión
SVN: Controle de revisões com
             subversion
          Thiago Rafael Becker
          thiago.becker@gmail




                              
Histórico

    ●   CollabNet, Inc. (http://www.collab.net),
        Fev. 2000
        –   SourceCast (software de colaboração)
    ●   Desenvolvedores: Karl Fogel, Jim Blandy,
        Ben Collins-Sussman
    ●   Auxiliaram: Greg Stein, Brian Benlendorf,
        Jason Robbins
    ●   “Auto-contido” em Ago. 2001



                                           
Controle de revisão

    ●   Conceitos
        –   Repositório (localização central dos dados
            versionados)
        –   Revisão (situação do repositório em um
            instante do tempo)
        –   Histórico (conjunto de versões)
        –   Módulo (parte de um repositório)




                                             
Repositório

    ●   Local central aonde são guardados os
        arquivos do projeto
    ●   Funciona como um sistema de arquivos
        distribuído
    ●   Mantém histórico de alterações, é
        possível consultar qualquer momento
        deste histórico
    ●   Gravação = commit, leitura = checkout


                                     
Repositório

    ●   No começo, sistemas de arquivos
        –   Problema?




                                     
Repositório

    ●   Problemas?
        –   Uma vez escrito, não existe maneira de
            voltar atrás
        –   Pode ser feito controle manual da revisão,
            mas é trabalhoso
        –   Pode ser feito um controle do histórico de
            cada revisão, mas também é complicado
        –   Muitas ações antes de gravar um arquivo
            desviam a atenção do desenvolvedor



                                             
Repositório

    ●   Solução: Controle automático de
        (versionamento)
        –   Controle automático da revisão, do histórico,
            possibilidade de consultar um projeto em
            qualquer momento de seu desenvolvimento
    ●   Solução mais conhecida: CVS




                                             
CVS

    ●   Concurrent Versions System
    ●   Problemas?
        –   Impossibilidade de renomear arquivos e
            diretórios
             ●   Eles devem ser removidos e depois readicionados
             ●   Perda do histórico com esse método
        –   Não existe versionamento de diretórios




                                                   
CVS

    ●   Problemas?
        –   O versionamento de arquivos apresenta
            problemas
             ●   Problema da renomeação de arquivos citada
                 anteriormente
             ●   Dois arquivos com o mesmo nome no mesmo
                 diretório compartilham o mesmo histórico, mesmo
                 que ambos não tenham relação
             ●   Versionamento por arquivo
             ●   Ou seja, perde histórico quando não deve, e o
                 mantém igualemente quando não deve
    ●   Quem poderá nos defender?
                                                   
Subversion!

    ●   Versionamento de arquivos, diretórios, e
        metadados do repositório
    ●   Operações de cópia copiam o histórico do
        arquivo original para o novo
    ●   Operações de movimentação levam junto
        o histórico do arquivo
    ●   Dois arquivos de mesmo nome, no
        mesmo diretório, tem históricos
        diferentes
    ●   Versionamento por módulo
                                      
Subversion

    ●   Versionamento por módulo
    ●   Commits atômicos
    ●   Versionamento por módulo, não por
        arquivo
    ●   Escolha da camada de transporte
    ●   Diferenciação automática de arquivos
        binários e texto
    ●   Branching e tagging eficientes
    ●   Hackability

                                      
Arquitetura




               
Pradigmas de controle de
revisão

    ●   Lock-modify-unlock
        –   Problemas administrativos
        –   Serialização desnecessária
        –   Falsa sensação de segurança
    ●   Copy-modify-merge
        –   Cria cópias pessoais do repositório
        –   Ao executar o commit, deve ser feito uma
            mescla das alterações realizadas, e resolver
            conflitos com outras alterações



                                             
Revisões

    ●   São números aplicados a um objeto para
        identificar a versão única do objeto
    ●   CVS
        –   Números de revisão são por arquivo
        –   Um número de revisão não significa nada
            para os demais arquivos
        –   Um commit atualiza apenas os números de
            revisão dos arquivos que foram alterados




                                           
Revisões

    ●   SVN
        –   Números de revisão são globais dentro do 
            repositório
        –   Identificam o estado do repositório em um dado 
            instante
        –   Um commit cria um snapshot do repositório
        –   Não consome mais espaço, pois é feita uma cópia 
            simpbólica dos arquivos não alterados




                                               
Ciclo de Trabalho

    ●   “Checkout” de uma cópia de trabalho
    ●   Atualizar uma cópia de trabalho
    ●   Fazer alterações
    ●   Examinar suas alterações
    ●   Mesclar com as alterações dos demais
    ●   “Commit” das alterações



                                      
Ciclo da trabalho

    ●   “Checkout” de uma cópia de trabalho
        svn checkout file:///home/trbecker/UFRGS

    ●   Atualizar uma cópia de trabalho
        svn update [­r revisão] [arquivo]

    ●   Saída da atualização
        U 'foo'   Arquivo foi atualizado
        A 'foo'   Arquivo foi adicionado ao repositório
        D 'foo'   Arquivo foi deletado do repositório
        R 'foo'   Arquivo foi substituído
        G 'foo'   Arquivo foi mesclado (merged)
        C 'foo'   Arquivo está em conflito com o existente na cópia 
                  de trabalho




                                                    
Ciclo de trabalho

    ●   Fazer alterações (por conta do desenvolver)
    ●   Examinar suas alterações
        svn status
        _ L   'foo'   Existe um lock do arquivo no diretório .svn
        M     'foo'   O arquivo tem alterações locais
        _M    'foo'   Existe uma modificação nos atributos do arquivo
        ?     'foo'   Arquivo não gerenciado
        !     'foo'   O arquivo era gerenciado, mas foi deletado
        A +   'foo'   Adicionado com informação de onde veio
        M +   'foo'   Adicionado com histórioco e possui histórico 
                      local
        D     'foo'   Agendado para deleção
        A     'foo'   Agendado para adição




                                                    
Ciclo de trabalho

    ●   Examinar suas alterações
        svn diff [­r revision:revision] [arquivo]

        –   Exibe as alterações detalhadas das 
            mudanças feitas
    ●   Reverte todas as alterações
        svn revert

    ●   Grava os dados novos no repositório
        svn commit



                                                 
Ciclo de trabalho

    ●   Causadores de conflitos são postos em um
        arquivo, como em CVS
    ●   Três arquivos começando com tmp são criados,
        um de cada uma das árvores da mesclagem,
        tornando possível analisar os arquivos originais,
        e usar outras ferramentas de mesclagem
        externas
    ●   SVN não permite que sejam cometidos
        criadores de conflito, ao contrário do CVS


                                            
Resolução de conflitos

    ●   Mesclar manualmente os arquivos
        (inflizmente nem tudo funciona como
        gostariamos :))
    ●   Copiar um dos arquivos tmp por cima de
        um do seu arquivo
    ●   Executar svn revert para reverter as
        alterações anteriores
    ●   Após resolvidos
        –   Execute snv resolve
        –   Delete os arquivos tmp

                                      
Mensagens de log

    ●   Ao cometer novas revisões ao svn, é
        possível adicionar mensagens de log
    ●   Na verdade, é bastante recomendável
    ●   Como fazer
        –   svn commit ­m “mensagem de log”
        –   svn commit ­F arquivo.log
        –   svn commit e escrever o arquivo de log no
            editor, quando ele aparecer




                                            
Branching

    ●   Branch: cópia do repositório para edição
        paralela
    ●   Tags == branches
    ●   Dois modos de operação
        –   No servidor
             ●   svn copy url url
        –   Local
             ●   svn copy trunk branches/trbecker




                                                     
Branching

    ●   Mesclagem
        –   svn merge – mescla árvores
        –   Mesmos dois modos de operação: servidor ou
            local
             Ex: svn merge branches/trbecker trunk
    ●   Resolver conflitos cfme. descrito anteriormente




                                             
Perguntas?



                  
Agradecimentos :)




                         

Más contenido relacionado

La actualidad más candente (20)

Apresentação controle de versão
Apresentação controle de versãoApresentação controle de versão
Apresentação controle de versão
 
CVS - Slides Parte 2 - Administração
CVS - Slides Parte 2 - AdministraçãoCVS - Slides Parte 2 - Administração
CVS - Slides Parte 2 - Administração
 
Intervalo técnico Git/SVN
Intervalo técnico Git/SVNIntervalo técnico Git/SVN
Intervalo técnico Git/SVN
 
Sistemas de controle de versão
Sistemas de controle de versãoSistemas de controle de versão
Sistemas de controle de versão
 
Curso de CVS - Lab 3
Curso de CVS - Lab 3Curso de CVS - Lab 3
Curso de CVS - Lab 3
 
CVS - Slides Parte 3 - Básico
CVS - Slides Parte 3 - BásicoCVS - Slides Parte 3 - Básico
CVS - Slides Parte 3 - Básico
 
Controle de Versão Distribuído com Git básico
Controle de Versão Distribuído com Git básicoControle de Versão Distribuído com Git básico
Controle de Versão Distribuído com Git básico
 
SVN com TortoiseSVN
SVN com TortoiseSVNSVN com TortoiseSVN
SVN com TortoiseSVN
 
Docker
DockerDocker
Docker
 
Ambiente de desenvolvimento com docker e ruby on rails
Ambiente de desenvolvimento com  docker e ruby on railsAmbiente de desenvolvimento com  docker e ruby on rails
Ambiente de desenvolvimento com docker e ruby on rails
 
Crud
CrudCrud
Crud
 
Curso de CVS - Lab 2
Curso de CVS - Lab 2Curso de CVS - Lab 2
Curso de CVS - Lab 2
 
Oficina docker
Oficina dockerOficina docker
Oficina docker
 
Git e Github
Git e GithubGit e Github
Git e Github
 
CVS
CVSCVS
CVS
 
Git e GitHub
Git e GitHubGit e GitHub
Git e GitHub
 
Docker para iniciantes
Docker para iniciantesDocker para iniciantes
Docker para iniciantes
 
SVN Básico
SVN BásicoSVN Básico
SVN Básico
 
Sistemas de controle de versão
Sistemas de controle de versãoSistemas de controle de versão
Sistemas de controle de versão
 
“Revision Control Systems: Subversion (SVN)” por Tiago Rodrigues
“Revision Control Systems: Subversion (SVN)” por Tiago Rodrigues“Revision Control Systems: Subversion (SVN)” por Tiago Rodrigues
“Revision Control Systems: Subversion (SVN)” por Tiago Rodrigues
 

Similar a SVN: Controle de revisões com subversion

Curso de CVS - Parte 3 - Uso Básico
Curso de CVS - Parte 3 - Uso BásicoCurso de CVS - Parte 3 - Uso Básico
Curso de CVS - Parte 3 - Uso BásicoMarden Neubert
 
Curso de CVS - Parte 4 - Avançado
Curso de CVS - Parte 4 - AvançadoCurso de CVS - Parte 4 - Avançado
Curso de CVS - Parte 4 - AvançadoMarden Neubert
 
CVS - Slides Parte 1 - Introdução
CVS - Slides Parte 1 - IntroduçãoCVS - Slides Parte 1 - Introdução
CVS - Slides Parte 1 - IntroduçãoMarden Neubert
 
Introdução ao GitHub e Git
Introdução ao GitHub  e GitIntrodução ao GitHub  e Git
Introdução ao GitHub e GitIgor Steinmacher
 
Git - Controle de Versão Inteligente
Git - Controle de Versão InteligenteGit - Controle de Versão Inteligente
Git - Controle de Versão InteligenteAdriano Rocha
 
CVS - Slides Parte 4 - Avançado
CVS - Slides Parte 4 - AvançadoCVS - Slides Parte 4 - Avançado
CVS - Slides Parte 4 - AvançadoMarden Neubert
 
Subvertendo o codigo PHP com SVN - ENSOL
Subvertendo o codigo PHP com SVN - ENSOLSubvertendo o codigo PHP com SVN - ENSOL
Subvertendo o codigo PHP com SVN - ENSOLRicardo Coelho
 
Subvertendo o código PHP com SVN
Subvertendo o código PHP com SVNSubvertendo o código PHP com SVN
Subvertendo o código PHP com SVNRicardo Coelho
 
Porque todo programador deve utilizar Sistema de Controle de Versão?
Porque todo programador deve utilizar Sistema de Controle de Versão?Porque todo programador deve utilizar Sistema de Controle de Versão?
Porque todo programador deve utilizar Sistema de Controle de Versão?Marco Rosner
 

Similar a SVN: Controle de revisões com subversion (20)

Curso de CVS - Parte 3 - Uso Básico
Curso de CVS - Parte 3 - Uso BásicoCurso de CVS - Parte 3 - Uso Básico
Curso de CVS - Parte 3 - Uso Básico
 
Curso de CVS - Parte 4 - Avançado
Curso de CVS - Parte 4 - AvançadoCurso de CVS - Parte 4 - Avançado
Curso de CVS - Parte 4 - Avançado
 
CVS - Slides Parte 1 - Introdução
CVS - Slides Parte 1 - IntroduçãoCVS - Slides Parte 1 - Introdução
CVS - Slides Parte 1 - Introdução
 
Git para quem vem do SVN
Git para quem vem do SVNGit para quem vem do SVN
Git para quem vem do SVN
 
Git Básico
Git BásicoGit Básico
Git Básico
 
Go git - Presentation @Navita
Go git - Presentation @NavitaGo git - Presentation @Navita
Go git - Presentation @Navita
 
Introdução ao GitHub e Git
Introdução ao GitHub  e GitIntrodução ao GitHub  e Git
Introdução ao GitHub e Git
 
GIT - Hands-On
GIT - Hands-On GIT - Hands-On
GIT - Hands-On
 
Git - Controle de Versão Inteligente
Git - Controle de Versão InteligenteGit - Controle de Versão Inteligente
Git - Controle de Versão Inteligente
 
Primeiros passos - GIT
Primeiros passos - GITPrimeiros passos - GIT
Primeiros passos - GIT
 
CVS - Slides Parte 4 - Avançado
CVS - Slides Parte 4 - AvançadoCVS - Slides Parte 4 - Avançado
CVS - Slides Parte 4 - Avançado
 
Subvertendo o codigo PHP com SVN - ENSOL
Subvertendo o codigo PHP com SVN - ENSOLSubvertendo o codigo PHP com SVN - ENSOL
Subvertendo o codigo PHP com SVN - ENSOL
 
Svn - grupo de estudos sol7
Svn - grupo de estudos sol7Svn - grupo de estudos sol7
Svn - grupo de estudos sol7
 
Controle de versões com o Subversion
Controle de versões com o SubversionControle de versões com o Subversion
Controle de versões com o Subversion
 
Git
GitGit
Git
 
GIT Básico
GIT BásicoGIT Básico
GIT Básico
 
Subvertendo o código PHP com SVN
Subvertendo o código PHP com SVNSubvertendo o código PHP com SVN
Subvertendo o código PHP com SVN
 
Porque todo programador deve utilizar Sistema de Controle de Versão?
Porque todo programador deve utilizar Sistema de Controle de Versão?Porque todo programador deve utilizar Sistema de Controle de Versão?
Porque todo programador deve utilizar Sistema de Controle de Versão?
 
Dojo - SVN
Dojo - SVNDojo - SVN
Dojo - SVN
 
Controle de versão com e git
Controle de versão com e gitControle de versão com e git
Controle de versão com e git
 

Más de Tchelinux

Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...Tchelinux
 
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio GrandeInsegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio GrandeTchelinux
 
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...Tchelinux
 
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...Tchelinux
 
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio GrandeMe formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio GrandeTchelinux
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...Tchelinux
 
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...Tchelinux
 
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...Tchelinux
 
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...Tchelinux
 
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio GrandeConstruindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio GrandeTchelinux
 
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio GrandeBikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio GrandeTchelinux
 
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...Tchelinux
 
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...Tchelinux
 
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...Tchelinux
 
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019Tchelinux
 
Com que ônibus eu vou? Uma gentil introdução ao Python.
Com que ônibus eu vou? Uma gentil introdução ao Python.Com que ônibus eu vou? Uma gentil introdução ao Python.
Com que ônibus eu vou? Uma gentil introdução ao Python.Tchelinux
 
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.Tchelinux
 
Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Tchelinux
 
Desenvolvendo jogos com pygame
Desenvolvendo jogos com pygameDesenvolvendo jogos com pygame
Desenvolvendo jogos com pygameTchelinux
 
Essa câmera faz fotos muito boas, né?
Essa câmera faz fotos muito boas, né?Essa câmera faz fotos muito boas, né?
Essa câmera faz fotos muito boas, né?Tchelinux
 

Más de Tchelinux (20)

Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
 
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio GrandeInsegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
 
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
 
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
 
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio GrandeMe formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
 
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
 
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
 
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
 
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio GrandeConstruindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
 
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio GrandeBikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
 
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
 
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
 
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
 
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
 
Com que ônibus eu vou? Uma gentil introdução ao Python.
Com que ônibus eu vou? Uma gentil introdução ao Python.Com que ônibus eu vou? Uma gentil introdução ao Python.
Com que ônibus eu vou? Uma gentil introdução ao Python.
 
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
 
Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes.
 
Desenvolvendo jogos com pygame
Desenvolvendo jogos com pygameDesenvolvendo jogos com pygame
Desenvolvendo jogos com pygame
 
Essa câmera faz fotos muito boas, né?
Essa câmera faz fotos muito boas, né?Essa câmera faz fotos muito boas, né?
Essa câmera faz fotos muito boas, né?
 

SVN: Controle de revisões com subversion

  • 1. SVN: Controle de revisões com subversion Thiago Rafael Becker thiago.becker@gmail    
  • 2. Histórico ● CollabNet, Inc. (http://www.collab.net), Fev. 2000 – SourceCast (software de colaboração) ● Desenvolvedores: Karl Fogel, Jim Blandy, Ben Collins-Sussman ● Auxiliaram: Greg Stein, Brian Benlendorf, Jason Robbins ● “Auto-contido” em Ago. 2001    
  • 3. Controle de revisão ● Conceitos – Repositório (localização central dos dados versionados) – Revisão (situação do repositório em um instante do tempo) – Histórico (conjunto de versões) – Módulo (parte de um repositório)    
  • 4. Repositório ● Local central aonde são guardados os arquivos do projeto ● Funciona como um sistema de arquivos distribuído ● Mantém histórico de alterações, é possível consultar qualquer momento deste histórico ● Gravação = commit, leitura = checkout    
  • 5. Repositório ● No começo, sistemas de arquivos – Problema?    
  • 6. Repositório ● Problemas? – Uma vez escrito, não existe maneira de voltar atrás – Pode ser feito controle manual da revisão, mas é trabalhoso – Pode ser feito um controle do histórico de cada revisão, mas também é complicado – Muitas ações antes de gravar um arquivo desviam a atenção do desenvolvedor    
  • 7. Repositório ● Solução: Controle automático de (versionamento) – Controle automático da revisão, do histórico, possibilidade de consultar um projeto em qualquer momento de seu desenvolvimento ● Solução mais conhecida: CVS    
  • 8. CVS ● Concurrent Versions System ● Problemas? – Impossibilidade de renomear arquivos e diretórios ● Eles devem ser removidos e depois readicionados ● Perda do histórico com esse método – Não existe versionamento de diretórios    
  • 9. CVS ● Problemas? – O versionamento de arquivos apresenta problemas ● Problema da renomeação de arquivos citada anteriormente ● Dois arquivos com o mesmo nome no mesmo diretório compartilham o mesmo histórico, mesmo que ambos não tenham relação ● Versionamento por arquivo ● Ou seja, perde histórico quando não deve, e o mantém igualemente quando não deve ● Quem poderá nos defender?    
  • 10. Subversion! ● Versionamento de arquivos, diretórios, e metadados do repositório ● Operações de cópia copiam o histórico do arquivo original para o novo ● Operações de movimentação levam junto o histórico do arquivo ● Dois arquivos de mesmo nome, no mesmo diretório, tem históricos diferentes ● Versionamento por módulo    
  • 11. Subversion ● Versionamento por módulo ● Commits atômicos ● Versionamento por módulo, não por arquivo ● Escolha da camada de transporte ● Diferenciação automática de arquivos binários e texto ● Branching e tagging eficientes ● Hackability    
  • 13. Pradigmas de controle de revisão ● Lock-modify-unlock – Problemas administrativos – Serialização desnecessária – Falsa sensação de segurança ● Copy-modify-merge – Cria cópias pessoais do repositório – Ao executar o commit, deve ser feito uma mescla das alterações realizadas, e resolver conflitos com outras alterações    
  • 14. Revisões ● São números aplicados a um objeto para identificar a versão única do objeto ● CVS – Números de revisão são por arquivo – Um número de revisão não significa nada para os demais arquivos – Um commit atualiza apenas os números de revisão dos arquivos que foram alterados    
  • 15. Revisões ● SVN – Números de revisão são globais dentro do  repositório – Identificam o estado do repositório em um dado  instante – Um commit cria um snapshot do repositório – Não consome mais espaço, pois é feita uma cópia  simpbólica dos arquivos não alterados    
  • 16. Ciclo de Trabalho ● “Checkout” de uma cópia de trabalho ● Atualizar uma cópia de trabalho ● Fazer alterações ● Examinar suas alterações ● Mesclar com as alterações dos demais ● “Commit” das alterações    
  • 17. Ciclo da trabalho ● “Checkout” de uma cópia de trabalho svn checkout file:///home/trbecker/UFRGS ● Atualizar uma cópia de trabalho svn update [­r revisão] [arquivo] ● Saída da atualização U 'foo' Arquivo foi atualizado A 'foo' Arquivo foi adicionado ao repositório D 'foo' Arquivo foi deletado do repositório R 'foo' Arquivo foi substituído G 'foo' Arquivo foi mesclado (merged) C 'foo' Arquivo está em conflito com o existente na cópia  de trabalho    
  • 18. Ciclo de trabalho ● Fazer alterações (por conta do desenvolver) ● Examinar suas alterações svn status _ L 'foo' Existe um lock do arquivo no diretório .svn M 'foo' O arquivo tem alterações locais _M 'foo' Existe uma modificação nos atributos do arquivo ? 'foo' Arquivo não gerenciado ! 'foo' O arquivo era gerenciado, mas foi deletado A + 'foo' Adicionado com informação de onde veio M + 'foo' Adicionado com histórioco e possui histórico  local D 'foo' Agendado para deleção A 'foo' Agendado para adição    
  • 19. Ciclo de trabalho ● Examinar suas alterações svn diff [­r revision:revision] [arquivo] – Exibe as alterações detalhadas das  mudanças feitas ● Reverte todas as alterações svn revert ● Grava os dados novos no repositório svn commit    
  • 20. Ciclo de trabalho ● Causadores de conflitos são postos em um arquivo, como em CVS ● Três arquivos começando com tmp são criados, um de cada uma das árvores da mesclagem, tornando possível analisar os arquivos originais, e usar outras ferramentas de mesclagem externas ● SVN não permite que sejam cometidos criadores de conflito, ao contrário do CVS    
  • 21. Resolução de conflitos ● Mesclar manualmente os arquivos (inflizmente nem tudo funciona como gostariamos :)) ● Copiar um dos arquivos tmp por cima de um do seu arquivo ● Executar svn revert para reverter as alterações anteriores ● Após resolvidos – Execute snv resolve – Delete os arquivos tmp    
  • 22. Mensagens de log ● Ao cometer novas revisões ao svn, é possível adicionar mensagens de log ● Na verdade, é bastante recomendável ● Como fazer – svn commit ­m “mensagem de log” – svn commit ­F arquivo.log – svn commit e escrever o arquivo de log no editor, quando ele aparecer    
  • 23. Branching ● Branch: cópia do repositório para edição paralela ● Tags == branches ● Dois modos de operação – No servidor ● svn copy url url – Local ● svn copy trunk branches/trbecker    
  • 24. Branching ● Mesclagem – svn merge – mescla árvores – Mesmos dois modos de operação: servidor ou local Ex: svn merge branches/trbecker trunk ● Resolver conflitos cfme. descrito anteriormente