Seminário de SVN, TRAC e Ferramentas Associadas Subversion Subversion is an open source version control system. Site Oficial http://subversion.tigris.org/ Algumas Características • Versionamento de diretórios ou pastas • Histórico de versão verdadeiro • Efetivações (commit) atômicos • Metadados versionados • Escolha de camada de rede • Bifurcação (branching) e etiquetagem (tagging) eficientes (Alencar, 2008 ) Repositório • Subversion é um sistema centralizado de compartilhamento de informações. • Na sua essência é um repositório, um arquivo central de dados. • O repositório armazena informações na forma de uma árvore, um sistema típico de hierarquia de arquivos e diretórios. • Vários clientes podem se conectar ao repositório, e em seguida, ler ou escrever para esses arquivos. Collins-Sussman, Ben; Fitzpatrick, Brian W.; Pilato, C. Michael. (2009) O problema de arquivos compartilhados Todos os sistemas de controle de versão tem um problema em comum: permitir que usuários compartilhe informações. Mas como impedir que acidentalmente um usuário sobrescreva a informação do outro usuário? É demasiadamente fácil que um usuário acidentalmente sobrescreva as informações do outro usuário. Problema a ser evitado Collins-Sussman, Ben; Fitzpatrick, Brian W.; Pilato, C. Michael. (2009) Lock-Modify-Unlock Muitos sistemas de controle de versão utilizam o modelo lock-modify-unlock para resolver este problema. lock-modify-unlock Primeira Harry deve "bloquear" o arquivo antes de começar a fazer alterações. Se Harry tem bloqueado um arquivo, então Sally não poderá efetuar quaisquer alterações ao mesmo. Se ela tenta bloquear o arquivo, o repositório irá negar o pedido. Tudo o que Sally pode fazer é ler o arquivo, e esperar por Harry até que libere seu bloqueio. Após Harry desbloqueia o arquivo, agora Sally pode bloquear e editar o arquivo. Collins-Sussman, Ben; Fitzpatrick, Brian W.; Pilato, C. Michael. (2009) Copy-Modify-Merge Subversion, CVS e outros sistemas de controle de versão utilizam um modelo CopyModify-Merge como uma alternativa ao bloqueio 1º fase 2º fase O modelo Copy-Modify-Merge pode parecer caótico, mas, na prática, corre muito suavemente. Os usuários podem trabalhar em paralelo, nunca à espera de um outro. E a quantidade de tempo que leva para resolver conflitos é muito menos do que o tempo perdido por um sistema de travamento. Porém existe o problema de comunicação, se a equipe envolvida tem pouco comunicação então os conflitos irão aumentar, nenhum sistema consegue resolver o problema de comunicação. Collins-Sussman, Ben; Fitzpatrick, Brian W.; Pilato, C. Michael. (2009) Command-line Subversion • SVN (comandos para cliente) • SVNLOOK (comandos para examinar diferentes aspectos) • SVNADMIN (comandos para monitoramento e reparos) • SVNSERVER (comandos para acesso do subversion usando network protocol) TortoiseSVN O TortoiseSVN é uma ferramenta gráfica, que se integra ao Windows® Explorer, que facilita o uso do Subversion para usuários do Windows®, uma vez que o Subversion básico é uma ferramenta de comandos em texto puro. Site Oficial http://tortoisesvn.tigris.org/ Comandos 1/8 Para termos uma copia de trabalho ou copia privada do repositório é necessário realizar um check out do projeto em questão. svn checkout svn://reddes.bvsalud.org:33690/example Repare que nesse momento será copiado todos os arquivos do repositório para a pasta local incluindo uma pasta de controle de versão “.svn”. Revision keywords: HEAD A última (ou “mais recente”) revisão no repositório. (svn co svn://path -r HEAD) BASE O número de revisão de um item em uma cópia de trabalho. Se o item tiver sido modificado localmente, a “versão BASE” refere-se à forma como o item estaria sem estas modificações locais. (svn log --revision BASE:HEAD) COMMITED A revisão mais recente anterior, ou igual a, BASE, na qual o item foi modificado. (svn log --revision COMMITTED path) PREV A revisão imediatamente anterior à última revisão na qual o item foi modificado. Tecnicamente, isto se resume a COMMITTED-1. (svn log --revision PREV path) Comandos 2/8 Para atualizarmos a copia local para o servidor utilizamos o seguinte procedimento. • Atualizamos a copia local com a última revisão do repositório executando o seguinte comando: svn update path ou svn update path --revision head • Podemos executar o commit svn commit –m “message” path Para adicionarmos um novo arquivo no subversion • Agendamos um novo arquivo ao subversion utilizando o seguinte comando: svn add path_do_arquivo • Versionamos o arquivo utilizando o comando: svn ci –m “message” path_do_arquivo Comandos 3/8 • Agendamos remover um arquivo no subversion: svn del path_do_arquivo • Podemos executar o commit: svn commit –m “message” path • Visualizar log: svn log path_do_arquivo • Visualizar log informando a revisão: svn log --revision x path_do_arquivo • Verificando diferenças da copia local com o repositorio: svn diff path_do_arquivo • Visualizar diferenças da copia local com uma revisão especifica: svn diff path_do_arquivo--revision x Comandos 4/8 • Desfazer todas as alterações locais: svn revert path • Desfazer todas as alterações locais recursivamente: svn revert --recursive path • Imprimindo informações dos arquivos locais : svn info path Retorno: •Path •Name •URL •Revision •Node Kind •Last Changed Author •Last Changed Revision •Last Changed Date •Text Last Updated •Properties Last Updated •Checksum Comandos 5/8 • Visualizar status da copia local: svn status path Este comando verificará quais arquivos na arvore local foram alterados. Comandos 6/8 • Importar arquivos de um path local para o repositório: svn import –m “message” local_path svn_path • Mostrar autor e revisão (annotate, praise e ann): svn blame local_path • Mostrar autor e revisão especificando a revisão: svn blame --revision x local_path • Resolvendo conflitos. svn resolved local_path Remove os arquivos criados pelo repositório na existência de conflito. Comandos 7/8 • Exportando a arvore de diretórios: svn export svn_path Recupera a última versão do repositório sem os arquivos de controle de versão (.svn). • Exportando a arvore de diretórios informando a revisão svn export svn_path --revision x • Listar diretórios no repositório: svn list svn_path •Listar diretórios no repositorio (ls unix) svn list --versobe svn_path Comandos 8/8 • Ignorando atualização de um arquivo local: svn propset svn:ignore ‘xx.x‘ . No momento do update o arquivo especificado será ignorado para copia local. • Adicionando propriedade de licença para um arquivo: svn propset copyright '(c) 2003 Red-Bean Software‘ path_arquivo Branches e Tags 1/2 • Layout recomendado para repositório • path_projeto/trunk • path_projeto/tags • patch_projeto/branches • Criando a pasta branches: svn mkdir path/branches svn ci –m “message” path Realizando essa comandos é adicionado uma nova pasta que usualmente chamada de branches/xxxx • Copiando os arquivos do trunk e garantido o histórico: svn copy -m "Creating a private branch of /trunk.” path/trunk path/branches/xxx Desta forma o histórico de versionamento do trunk é mantido até a copia do trunk para o branch. Branches e Tags 2/2 Tag é um fotografia do projeto ao longo do tempo. • Criando uma tag: svn copy path/trunk path/tags/release-1.0 -m "Tagging the 1.0 release of the ‘xxx’ project." Lembrando que uma tag e um branch são basicamente a mesma coisa o que diferencia é o fato de as tags não receberem commits Todos os comandos (SVN) 1/2 • • • • • • • • • • • • • • • add (Put files and directories under version control, scheduling them for addition to repository); blame (Output the content of specified files or URLs with revision and author information in-line); cat (Output the contents of the specified files or URLs); checkout co (Check out a working copy from a repository); cleanup (Recursively clean up the working copy, removing locks, resuming unfinished operations, etc); commit ci (Send changes from your working copy to the repository); copy cp (Duplicate something in working copy or repository, remembering history); delete del, remove, rm (Remove files and directories from version control); diff di (Display the differences between two revisions or paths); export (Create an unversioned copy of a tree); help ?, h (Describe the usage of this program or its subcommands); import (Display information about a local or remote item); Info (Print information about PATHs); list ls (Recursively commit a copy of PATH to URL); lock (Lock working copy paths or URLs in the repository, so thatno other user can commit changes to them); Todos os comandos (SVN) 2/2 • • • • • • • • • • • • • • • log (Show the log messages for a set of revision(s) and/or file(s)); merge (Apply the differences between two sources to a working copy path); mkdir (Create a new directory under version control); move mv, rename, ren (Move and/or rename something in working copy or repository); propdel pdel, pd (Remove a property from files, dirs, or revisions); propedit pedit, pe (Edit a property with an external editor); propget pget, pg (Print the value of a property on files, dirs, or revisions); proplist plist, pl (List all properties on files, dirs, or revisions); propset pset, ps (Set the value of a property on files, dirs, or revisions); resolved (Remove 'conflicted' state on working copy files or directories); revert (Restore pristine working copy file (undo most local edits); status stat, st (Print the status of working copy files and directories); switch sw (Update the working copy to a different URL); unlock (Unlock working copy paths or URLs); update up (Bring changes from the repository into the working copy) Todos os comandos (svnlook) • • • • • • • • • • author (Print the author) cat (Print the contents of a file) changed (Print the paths that were changed) date (print the datestamp) diff (print GNU-style diffs of changed files and properties) dirs-changed (Print the directories that were themselves changed (property edits) or whose file children were changed.) history (Print information about the history of a path in the repository (or the root directory if no path is supplied) Info (Print the author, datestamp, log message size, and log message) log (Print the log message) Tree (Print the tree, starting at PATH_IN_REPOS (if supplied, at the root of the tree otherwise), optionally showing node revision ids) Fluxo de Trabalho no subversion • Realizar atualização da cópia local; • Realizar as alterações na cópia local; • Atualizar repositório verificando a existência de conflitos; • Submeter as alterações para o repositório, utilizando mensagens como forma de documentação. • Criar branch para o ambiente do desenvolvedor em situações de muitas mudanças/alterações, evitando “lock” do trunk. Outros sistemas de controle de versão • Git (http://git-scm.com/) Linus Torvalds • Mercurial (http://www.selenic.com/mercurial/wiki/) Sun using for JDK • Bazaar (http://bazaar-vcs.org/) • Perforce (http://www.perforce.com/) • Monotone (http://www.venge.net/monotone/) • Visual SourceSafe (http://msdn.microsoft.com/enus/vstudio/aa718670.aspx) Microsoft Trac Trac é uma ferramenta open source de interface web para controle de projetos. Site Oficial http://subversion.tigris.org/ Trac - BIREME Endereço Trac - BIREME http://reddes.bvsaude.org/projects Endereço Trac - BIREME - Projetos internos http://reddes.bvsaude.org/bireme/ * Projetos internos solicitam senha da rede BIREME Recurso do Trac • Controle de mudanças; • Wiki para documentação colaborativa e referência cruzada entre os elementos do Trac; • Integração com o Subversion (o Trac também funciona como um browser do repositório do Subversion); • Acompanhamento da evolução do desenvolvimento do produto/serviço. Benefícios obtidos com o uso do Trac • Melhoria na qualidade do produto e do processo de desenvolvimento; • Registro, rastreamento e controle das mudanças sofridas pelo produto/serviço durante o seu ciclo de vida; • Integração entre o controle de versão e o controle de mudança; • Melhor documentação do produto/serviço por meio de participação da equipe de desenvolvimento. Wiki-Trac • O Wiki serve como um elemento de documentação colaborativa do produto/serviço e como um repositório central de referências cruzadas entre todos os elementos do Trac. • Veja o guia TracWiki no site do projeto Integração com o Subversion • Trac é integrado ao Subversion e oferece como um de seus recursos principais um browser do repositório do Subversion, permitindo a navegação pela árvore de diretórios e a visualização de diversos elementos do Subversion tais como a estrutura de diretórios, logs de mudanças efetuadas, diferenças entre revisões, enfim, oferecendo aos desenvolvedores e usuários uma excelente interface para o repositório SVN. Manuais • http://svnbook.red-bean.com/nightly/en/svn-book.html • http://svnbook.red-bean.com/ • http://blog.webmarcos.net/arquivos/svn-book-pdf.zip Referências Alencar, Walker de. Padrões e Metodologias: Subversion & TortoiseSVN. 2008. Disponível em: <http://blog.walkeralencar.com/archives/16> Acesso em: 04 Maio 2009. Collins-Sussman, Ben; Fitzpatrick, Brian W.; Pilato, C. Michael. Subversion. Disponível em: <http://svnbook.red-bean.com/> Acesso em 15 Maio 2009.