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.
Download

SVN - Wiki REDDES