Sei sulla pagina 1di 211

TortoiseSVN

Cliente de Subversion para Windows Verso 1.6.8

Stefan Kng Lbbe Onken Simon Grande

TortoiseSVN: Cliente de Subversion para Windows: Verso 1.6.8


por Stefan Kng, Lbbe Onken e Simon Grande Editado 2010/03/31 16:00:35 (r19115)

ndice
Prefcio ...................................................................................................................................... xi 1. Audincia ........................................................................................................................ xi 2. Guia de Leitura ................................................................................................................ xi 3. O TortoiseSVN grtis! ................................................................................................... xii 4. Comunidade ................................................................................................................... xii 5. Agradecimentos ............................................................................................................... xii 6. Terminologia utilizada neste documento .............................................................................. xii 1. Introduo ................................................................................................................................ 1 1.1. O que o TortoiseSVN? .................................................................................................. 1 1.2. A histria do TortoiseSVN ............................................................................................... 1 1.3. TortoiseSVN's Features .................................................................................................... 1 1.4. Instalando o TortoiseSVN ................................................................................................ 2 1.4.1. Requesitos de sistema ........................................................................................... 2 1.4.2. Instalao ............................................................................................................ 2 1.4.3. Pacotes de Linguas ............................................................................................... 3 1.4.4. Corretor Ortogrfico ............................................................................................. 3 2. Conceitos Bsicos de Controle de Verses ..................................................................................... 4 2.1. O Repositrio ................................................................................................................. 4 2.2. Modelos de Controle de Verses ....................................................................................... 4 2.2.1. O Probelma de Partilha de Ficheiros ........................................................................ 4 2.2.2. A soluo de Bloquear-Moficar-Desbloquear ............................................................. 5 2.2.3. A soluo de Copiar-Modificar-Integrar .................................................................... 6 2.2.4. What does Subversion Do? .................................................................................... 9 2.3. Subversion em Aco ...................................................................................................... 9 2.3.1. Cpias de trabalho. ............................................................................................... 9 2.3.2. Repository URLs ................................................................................................ 11 2.3.3. Revisions .......................................................................................................... 11 2.3.4. How Working Copies Track the Repository ............................................................. 13 2.4. Summary ..................................................................................................................... 13 3. O Repositrio ......................................................................................................................... 14 3.1. Repository Creation ....................................................................................................... 14 3.1.1. Creating a Repository with the Command Line Client ................................................ 14 3.1.2. Creating The Repository With TortoiseSVN ............................................................ 14 3.1.3. Local Access to the Repository ............................................................................. 15 3.1.4. Accessing a Repository on a Network Share ............................................................ 15 3.1.5. Repository Layout .............................................................................................. 16 3.2. Repository Backup ........................................................................................................ 17 3.3. Server side hook scripts ................................................................................................. 17 3.4. Checkout Links ............................................................................................................. 18 3.5. Accessing the Repository ................................................................................................ 18 3.6. Svnserve Based Server ................................................................................................... 19 3.6.1. Introduo ......................................................................................................... 19 3.6.2. Instalar svnserve ................................................................................................. 19 3.6.3. Executar svnserver .............................................................................................. 19 3.6.4. Basic Authentication with svnserve ........................................................................ 21 3.6.5. Better Security with SASL ................................................................................... 22 3.6.6. Authentication with svn+ssh ................................................................................. 23 3.6.7. Path-based Authorization with svnserve .................................................................. 23 3.7. Apache Based Server ..................................................................................................... 24 3.7.1. Introduo ......................................................................................................... 24 3.7.2. Installing Apache ................................................................................................ 24 3.7.3. Installing Subversion ........................................................................................... 25 3.7.4. Configuration ..................................................................................................... 25 3.7.5. Multiple Repositories .......................................................................................... 27 3.7.6. Path-Based Authorization ..................................................................................... 27

iii

TortoiseSVN

3.7.7. Authentication With a Windows Domain ................................................................ 3.7.8. Multiple Authentication Sources ............................................................................ 3.7.9. Securing the server with SSL ................................................................................ 3.7.10. Using client certificates with virtual SSL hosts ....................................................... 4. Daily Use Guide ..................................................................................................................... 4.1. Comeando .................................................................................................................. 4.1.1. Sobreposio de cones ........................................................................................ 4.1.2. Menus de Contexto ............................................................................................. 4.1.3. Arrastar e Largar ................................................................................................ 4.1.4. Atalhos comuns .................................................................................................. 4.1.5. Autenticao ...................................................................................................... 4.1.6. Maxiizando Janelas ............................................................................................. 4.2. Importando Dados Para Um Repositrio ............................................................................ 4.2.1. Importar ............................................................................................................ 4.2.2. Importar no local ................................................................................................ 4.2.3. Ficheiros Especiais .............................................................................................. 4.3. SVN Exportar Para Uma Cpia de Trabalho ...................................................................... 4.3.1. Profundidade do Checkout ................................................................................... 4.4. Submetendo as tuas alteraes para o Repositrio ............................................................... 4.4.1. A Caixa de Dilogo Submeter ............................................................................... 4.4.2. Listas de Alteraes ............................................................................................ 4.4.3. Excluir itens da lista a Submeter ........................................................................... 4.4.4. Mensagens de Registo de Submeter ....................................................................... 4.4.5. Progresso do Submeter ........................................................................................ 4.5. Actualizar a Tua Cpia de Trabalho Com Alteraes de Outros ............................................. 4.6. Resolvendo Conflitos ..................................................................................................... 4.6.1. Conflitos de Ficheiro ........................................................................................... 4.6.2. Conflitos de rvore ............................................................................................ 4.7. Obter informao de Estado ............................................................................................ 4.7.1. Sobreposio de cones ........................................................................................ 4.7.2. Colunas TortoiseSVN no Explorador do Windows .................................................... 4.7.3. Estado Remoto e Local ........................................................................................ 4.7.4. Vendo diferenas ................................................................................................ 4.8. Listas de Alteraes ...................................................................................................... 4.9. Caixa de Dilogo Registo de Revises .............................................................................. 4.9.1. Invocando a Caixa de Dilogo Registo de Reviso .................................................... 4.9.2. Aces de Registo de Revises ............................................................................. 4.9.3. Obtendo Informao Adicional .............................................................................. 4.9.4. Obtendo mais mensagens de registo ....................................................................... 4.9.5. Reviso Actual da Cpia de Trabalho ..................................................................... 4.9.6. Funcionalidades de Rastreamento de Integrao ....................................................... 4.9.7. Alterando a Mensagem de Registo e Autor .............................................................. 4.9.8. Filtrando Mensagens de Registo ............................................................................ 4.9.9. Informao Estatstica .......................................................................................... 4.9.10. Modo Fora de Linha .......................................................................................... 4.9.11. Refrescar a Vista .............................................................................................. 4.10. Ver Diferenas ............................................................................................................ 4.10.1. Diferenas em ficheiros ...................................................................................... 4.10.2. Opes de Fim-de-Linha e Espaos-Brancos .......................................................... 4.10.3. Comparando Pastas ........................................................................................... 4.10.4. Comparando Imagens usando o TortoiseDiff .......................................................... 4.10.5. Ferramentas de Comparao/Integrao ................................................................. 4.11. Adicionar Novos Ficheiros e Pastas ................................................................................ 4.12. Copiando/Movendo/Renomeando Ficheiros e Pastas .......................................................... 4.13. Ignorando Ficheiros E Pastas ......................................................................................... 4.13.1. Correspondncia de Padres em Listas de Ignorados ................................................ 4.14. Removendo, Movendo e Renomeando ............................................................................. 4.14.1. Removendo ficheiros e pastas ..............................................................................

28 29 30 32 34 34 34 34 36 37 37 38 38 38 40 40 40 41 43 43 45 45 45 47 48 49 50 50 54 54 55 55 57 58 60 61 61 62 66 67 67 68 69 69 73 73 73 74 75 75 77 78 78 79 80 81 82 82

iv

TortoiseSVN

4.14.2. Movendo ficheiros e pastas ................................................................................. 83 4.14.3. Mudando maisculas e minsculas no nome do ficheiro ........................................... 84 4.14.4. Lidando com conflitos de maisculas e minsculas no nome do ficheiro ...................... 84 4.14.5. Reparando Renomeaes de Ficheiros ................................................................... 84 4.14.6. Removendo Ficheiros No Versionados ................................................................ 85 4.15. Desfazer Alteraes ..................................................................................................... 85 4.16. Limpar ....................................................................................................................... 86 4.17. Configuraes de Projecto ............................................................................................. 86 4.17.1. Propriedades Subversion ..................................................................................... 87 4.17.2. Propriedades de Projecto TortoiseSVN .................................................................. 91 4.18. Itens Externos ............................................................................................................. 92 4.18.1. Pastas Externas ................................................................................................. 92 4.18.2. Ficheiros Externos ............................................................................................. 95 4.19. Ramificando/Etiquetando .............................................................................................. 95 4.19.1. Criando um Ramo ou Etiqueta ............................................................................ 95 4.19.2. SVN Exportar ou Trocar... .................................................................................. 97 4.20. Integrar ...................................................................................................................... 98 4.20.1. A Integrar Um Intervalo de Revises .................................................................... 99 4.20.2. Reintegrar um ramo ......................................................................................... 101 4.20.3. A Integrar Duas rvores Diferentes .................................................................... 102 4.20.4. Opes de Integrao ....................................................................................... 103 4.20.5. Rever os Resultados de Integrao ...................................................................... 104 4.20.6. Rastreamento de Integrao ............................................................................... 105 4.20.7. Lidando com Conflitos durante a Integrao ......................................................... 105 4.20.8. Integrar um Ramo Completo ............................................................................. 106 4.20.9. Manuteno do Ramo de Funcionalidade ............................................................. 107 4.21. A bloquear ............................................................................................................... 107 4.21.1. Como Funciona o Sistema de Bloqueio no Subversion ............................................ 108 4.21.2. Obter um Bloquieo .......................................................................................... 108 4.21.3. Libertar um Bloqueio ....................................................................................... 109 4.21.4. Verificar o Estado dos Bloqueio ......................................................................... 110 4.21.5. Tornar os Ficheiros No-Bloqueados S de Leitura ................................................ 110 4.21.6. Os Scripts do Gancho de Bloqueio ..................................................................... 111 4.22. Criar e Applicar Correces ......................................................................................... 111 4.22.1. Criar um Ficheiro de Correco ......................................................................... 111 4.22.2. Aplicar um Ficheiro de Correco ...................................................................... 112 4.23. Quem Alterou Que Linha ............................................................................................ 112 4.23.1. Responsabilidade para Ficheiros ......................................................................... 113 4.23.2. Diferenas de responsabilidade .......................................................................... 115 4.24. O Navegador de Repositrio ........................................................................................ 115 4.25. Grficos de Revises .................................................................................................. 118 4.25.1. Ns do Grfico de Revises .............................................................................. 119 4.25.2. Alterando a Vista ............................................................................................ 119 4.25.3. Utilizar o Grfico ............................................................................................ 121 4.25.4. Refrescar a Vista ............................................................................................. 122 4.25.5. Podar as rvores ............................................................................................. 122 4.26. Exportar uma Cpia de Trabalho do Subversion .............................................................. 122 4.26.1. Remover uma cpia de trabalho do controlo de verses .......................................... 124 4.27. Reposicionar uma cpia de trabalho .............................................................................. 124 4.28. Integrao com Sistemas de identificao de Bugs/Gestores de Problemas ............................ 125 4.28.1. Adicionar Nmeros de Problemas nas Mensagens de Registo ................................... 125 4.28.2. Obter Informaes do Gestor de Problemas .......................................................... 128 4.29. Integrao com visualizadores de repositrio Web-based ................................................... 129 4.30. Preferncias do TortoiseSVN ....................................................................................... 129 4.30.1. Preferncias Gerais .......................................................................................... 130 4.30.2. Preferncias do Grfico de Revises ................................................................... 137 4.30.3. Preferncias de Sobreposio de cones ............................................................... 140 4.30.4. Preferncias de Rede ........................................................................................ 143

TortoiseSVN

4.30.5. Preferncias de Programas Externos .................................................................... 4.30.6. Preferncias de Dados Guardados ....................................................................... 4.30.7. Cache de Registo ............................................................................................ 4.30.8. Scripts de Gancho do Lado do Cliente ................................................................ 4.30.9. Preferncias do TortoiseBlame ........................................................................... 4.30.10. Registry Settings ............................................................................................ 4.30.11. Pastas de Trabalho do Subversion ..................................................................... 4.31. Passo Final ............................................................................................................... 5. O Programa SubWCRev ......................................................................................................... 5.1. A Linha de Comando SubWCRev .................................................................................. 5.2. Substituio de Palavra-Chave ....................................................................................... 5.3. Exemplo de Palavra-Chave ............................................................................................ 5.4. Interface COM ............................................................................................................ 6. Interface IBugtraqProvider ....................................................................................................... 6.1. O interface do IBugtraqProvider ..................................................................................... 6.2. A interface IBugtraqProvider2 ....................................................................................... A. Questes Mais Frequentes (FAQ) ............................................................................................. B. Como Farei Para... ................................................................................................................. B.1. Mover/copiar muitos ficheiros de uma vez s ................................................................... B.2. Forar utilizadores a introduzir uma mensagem de registo .................................................. B.2.1. Script-gancho no servidor .................................................................................. B.2.2. Propriedades do projecto .................................................................................... B.3. Actualizar ficheiros seleccionados a partir do repositrio .................................................... B.4. Reverter (Anular) revises no repositrio ........................................................................ B.4.1. Usar a caixa de dilogo registo de reviso ............................................................. B.4.2. Usa a caixa de dilogo integrar ........................................................................... B.4.3. Usa o svndumpfilter ................................................................................... B.5. Comparar duas revises de um ficheiro ou pasta ............................................................... B.6. Incluir um subprojecto comum ...................................................................................... B.6.1. Usa o svn:externals ........................................................................................... B.6.2. Usar uma cpia de trabalho aninhada. .................................................................. B.6.3. Usa uma localizao relativa .............................................................................. B.7. Criar um atalho para um repositrio ............................................................................... B.8. Ignorar ficheiros que j esto versionados ....................................................................... B.9. Remover uma cpia de trabalho do controlo de verses ...................................................... B.10. Remover uma cpia de trabalho ................................................................................... C. Dicas teis para Administradores ............................................................................................. C.1. Instalar o TortoiseSVN via politicas de grupo .................................................................. C.2. Redireccionar a verificao de actualizao ..................................................................... C.3. Configurar a varivel de ambiente SVN_ASP_DOT_NET_HACK .......................................... C.4. Desactivar entradas do menu de contexto ........................................................................ D. Automatizar o TortoiseSVN .................................................................................................... D.1. Comandos TortoiseSVN ............................................................................................... D.2. Comandos TortoiseIDiff ............................................................................................... E. Referncia Cruzada da Interface de Linha de Comandos ............................................................... E.1. Convenes e Regras Bsicas ........................................................................................ E.2. Comandos TortoiseSVN ............................................................................................... E.2.1. Checkout ......................................................................................................... E.2.2. Actualizar ........................................................................................................ E.2.3. Actualizar para Reviso ..................................................................................... E.2.4. Submeter ......................................................................................................... E.2.5. Comparar ........................................................................................................ E.2.6. Mostrar Registo ................................................................................................ E.2.7. Verificar Modificaes ...................................................................................... E.2.8. Revision Graph ................................................................................................ E.2.9. Repo Browser .................................................................................................. E.2.10. Editar Conflitos .............................................................................................. E.2.11. Resolved .......................................................................................................

144 147 148 151 155 155 157 157 158 158 158 159 160 163 163 164 167 168 168 168 168 168 169 169 169 169 170 170 170 170 171 171 171 171 172 172 173 173 173 174 174 176 176 179 181 181 181 181 181 182 182 182 183 183 183 183 183 183

vi

TortoiseSVN

E.2.12. Alterar nome .................................................................................................. E.2.13. Remover ........................................................................................................ E.2.14. Reverter ........................................................................................................ E.2.15. Limpar .......................................................................................................... E.2.16. Obter "Lock" .................................................................................................. E.2.17. Libertar "Lock" ............................................................................................... E.2.18. Ramo/Etiqueta ................................................................................................ E.2.19. Trocar ........................................................................................................... E.2.20. Integrar ......................................................................................................... E.2.21. Exportar ........................................................................................................ E.2.22. Reposicionar .................................................................................................. E.2.23. Criar Repositrio Aqui ..................................................................................... E.2.24. Adicionar ....................................................................................................... E.2.25. Importar ........................................................................................................ E.2.26. Responsabilizar ............................................................................................... E.2.27. Addicionar list de tems a ignorar .................................................................... E.2.28. Criar Correco .............................................................................................. E.2.29. Aplicar Correco ........................................................................................... F. Pormenores de Implemtao .................................................................................................... F.1. Sobreposio de cones ................................................................................................ G. Proteco de Svnserve com SSH .............................................................................................. G.1. Instalao de um servidor Linux .................................................................................... G.2. Instalao de um servidor Windows ............................................................................... G.3. Utilitrios de client SSH para utilizao com TortoiseSVN ................................................. G.4. Criao de certificados OpenSSH .................................................................................. G.4.1. Criar chaves com ssh-keygen .............................................................................. G.4.2. Criar chaves com PuTTYgen .............................................................................. G.5. Testar com PuTTY ..................................................................................................... G.6. Testar SSH com TortoiseSVN ....................................................................................... G.7. Variantes de Configurao de SSH ................................................................................ Glossrio .................................................................................................................................. ndice Remissivo .......................................................................................................................

184 184 184 184 184 184 184 185 185 185 185 185 185 186 186 186 186 186 187 187 189 189 189 190 190 190 190 190 191 192 193 196

vii

Lista de Figuras
2.1. Um sistema tpico Cliente/Servidor ............................................................................................ 4 2.2. O Problema a Evitar ............................................................................................................... 5 2.3. A soluo de Bloquear-Moficar-Desbloquear ............................................................................... 6 2.4. A soluo de Copiar-Modificar-Integrar ...................................................................................... 7 2.5. ...Copiar-Modificar-Integrar Continuao ..................................................................................... 8 2.6. The Repository's Filesystem .................................................................................................... 10 2.7. O Repositrio ....................................................................................................................... 12 3.1. The TortoiseSVN menu for unversioned folders ......................................................................... 14 4.1. O explorador mostrando os cones sobrepostos ........................................................................... 34 4.2. Menu de Contexto de uma pasta sob controlo de verses. ............................................................. 35 4.3. Explorer file menu for a shortcut in a versioned folder ................................................................. 36 4.4. Menu arrastar com o boto direito para uma pasta sob controlo de verses. ...................................... 37 4.5. Caixa de dilogo de autenticao ............................................................................................. 38 4.6. Caixa de dilogo Importar ...................................................................................................... 39 4.7. The Checkout dialog .............................................................................................................. 41 4.8. A Caixa de Dilogo Submeter ................................................................................................. 43 4.9. A Verificao de Sintaxe na Caixa de Dilogo Submeter .............................................................. 46 4.10. A caixa de dialogo de Progresso, mostrando a submisso em progresso ......................................... 47 4.11. Caixa de dilogo de progresso mostrando uma actualizao finalizada. .......................................... 48 4.12. O explorador mostrando os cones sobrepostos ......................................................................... 54 4.13. Verificar Modificaes ......................................................................................................... 56 4.14. Caixa de dilogo Submeter com Listas de Alteraes ................................................................. 59 4.15. A Caixa de Dilogo Registo de Reviso .................................................................................. 61 4.16. O Painel de Topo da Caixa de Dilogo Registo de Revises com Menu de Contexto ......................... 62 4.17. Menu de Contexto do Painel Superior para 2 revises seleccionadas ............................................. 64 4.18. The Log Dialog Bottom Pane with Context Menu ..................................................................... 65 4.19. A Caixa de Dilogo Registo Mostra Rasto das Revises de Integrao ........................................... 68 4.20. Histograma de Submisses-por-Autor ...................................................................................... 70 4.21. Grfico de queijo Submisses-por-Autor .................................................................................. 71 4.22. Grfico de Submisses-por-data ............................................................................................. 72 4.23. Caixa de dilogo Colocar-se em Fora de Linha ......................................................................... 73 4.24. A Caixa de Dilogo Comparar Revises .................................................................................. 76 4.25. O leitor de diferenas de imagem ........................................................................................... 77 4.26. Menu de contexto do Explorador para ficheiros no versionados .................................................. 78 4.27. Menu arrastar com o boto direito para uma pasta sob controlo de verses. ..................................... 79 4.28. Menu de contexto do Explorador para ficheiros no versionados .................................................. 80 4.29. Menu de contexto do Explorador para ficheiros versionados ........................................................ 82 4.30. Caixa de Dilogo Reverter .................................................................................................... 85 4.31. Pgina de propriedades do explorador, aba do Subversion ........................................................... 87 4.32. Pgina de propriedades do Subversion ..................................................................................... 88 4.33. Adicionando propriedades ..................................................................................................... 89 4.34. A Caixa de Dilogo de Ramificar/Etiquetar .............................................................................. 96 4.35. A Caixa de Dilogo Trocar ................................................................................................... 98 4.36. O Assistente de Integrao - Seleciona o Intervalo de Revises .................................................. 100 4.37. O Assistente de Integrao - Integrao para Reintegrar ............................................................ 102 4.38. O Assistente de Integrao - Integrao de rvores .................................................................. 103 4.39. A Caixa de Dilogo Conflitos de Integrao ........................................................................... 106 4.40. Caixa de Dilogo de reintegrao de Integrao ...................................................................... 107 4.41. A Caixa de Dilogo Bloquear .............................................................................................. 109 4.42. A Caixa de Dilogo Verificar Alteraes ............................................................................... 110 4.43. A caixa de dilogo de Criar Correco .................................................................................. 111 4.44. A Caixa de Dilogo de Anotar/Responsabilizar ....................................................................... 113 4.45. TortoiseBlame ................................................................................................................... 114 4.46. O Navegador de Repositrio ................................................................................................ 116 4.47. O Grfico de Revises ........................................................................................................ 118

viii

TortoiseSVN

4.48. A Caixa de Dilogo Exportar-do-URL ................................................................................... 4.49. The Relocate Dialog ........................................................................................................... 4.50. Caixa de dilogo de exemplo da consulta ao gestor de problemas ................................................ 4.51. A Caixa de Dilogo Preferncias, Pgina Geral ....................................................................... 4.52. A Caixa de Dilogo Preferncias, Pgina Menu de Contexto ...................................................... 4.53. A Caixa de Dilogo Preferncias, Pgina Dilogos 1 ................................................................ 4.54. A Caixa de Dilogo Preferncias, Pgina Dilogos 2 ................................................................ 4.55. A Caixa de Dilogo Preferncias, Pgina de Cores ................................................................... 4.56. A Caixa de Dilogo Preferncias, Pgina Grfico de Revises .................................................... 4.57. A Caixa de Dilogo preferncias,Pgina Cores do Grfico de Revises ........................................ 4.58. A Caixa de Dilogo Preferncias, Pgina Sobreposio de cones ............................................... 4.59. A Caixa de Dilogo preferncias, Pgina Conjunto de cones ..................................................... 4.60. A Caixa de Dilogo Preferncias, Pgina de Rede .................................................................... 4.61. A Caixa de Dilogo Preferncias, Pgina Visualizador de Comparao ........................................ 4.62. A Caixa de Dilogo Preferncias, Caixa de Dilogo Comparar/Integrar Avanados ......................... 4.63. A Caixa de Dilogo, Pgina de Dados Guardados .................................................................... 4.64. A Caixa de Dilogo Preferncias, Pgina Cache de Registo ....................................................... 4.65. A Caixa de Dilogo Preferncias, Estatsticas da Cache de Registo .............................................. 4.66. A Caixa de Dilogo Preferncias, Pgina Scripts de Gancho ...................................................... 4.67. A Caixa de Dilogo Preferncias, Configurar Scripts de Gancho ................................................. 4.68. A Caixa de Dilogo Preferncias, Pgina Integrao com Controlador de Problemas ....................... 4.69. A Caixa de Dilogo Preferncias, Pgina do TortoiseBlame ....................................................... C.1. A Caixa de Dilogo Actualizao ..........................................................................................

123 124 128 130 132 133 135 136 137 138 140 142 143 144 146 147 148 150 151 152 154 155 173

ix

Lista de Tabelas
2.1. Repository Access URLs ........................................................................................................ 11 3.1. Apache httpd.conf Settings ............................................................................................... 26 5.1. Lista de opes de linha de comando disponveis ...................................................................... 158 5.2. Mtodos COM/automao suportados ..................................................................................... 160 C.1. Entradas de menu e seus valores ............................................................................................ 174 D.1. Lista de comandos e opes disponveis ................................................................................. 176 D.2. Lista de opes disponveis .................................................................................................. 179

Prefcio

Trabalhas numa equipa? Has it ever happened that you were working on a file, and someone else was working on the same file at the same time? Did you lose your changes to that file because of that? Have you ever saved a file, and then wanted to revert the changes you made? Have you ever wished you could see what a file looked like some time ago? Have you ever found a bug in your project and wanted to know when that bug got into your files? If you answered yes to one of these questions, then TortoiseSVN is for you! Just read on to find out how TortoiseSVN can help you in your work. It's not that difficult.

1. Audincia
This book is written for computer literate folk who want to use Subversion to manage their data, but are uncomfortable using the command line client to do so. Since TortoiseSVN is a windows shell extension it's assumed that the user is familiar with the windows explorer and knows how to use it.

2. Guia de Leitura
This Prefcio explains a little about the TortoiseSVN project, the community of people who work on it, and the licensing conditions for using it and distributing it. The Captulo 1, Introduo explains what TortoiseSVN is, what it does, where it comes from and the basics for installing it on your PC. In Captulo 2, Conceitos Bsicos de Controle de Verses we give a short introduction to the Subversion revision control system which underlies TortoiseSVN. This is borrowed from the documentation for the Subversion project and explains the different approaches to version control, and how Subversion works. The chapter on Captulo 3, O Repositrio explains how to set up a local repository, which is useful for testing Subversion and TortoiseSVN using a single PC. It also explains a bit about repository administration which is also relevant to repositories located on a server. There is also a section here on how to setup a server if you need one. The Captulo 4, Daily Use Guide is the most important section as it explains all the main features of TortoiseSVN and how to use them. It takes the form of a tutorial, starting with checking out a working copy, modifying it, committing your changes, etc. It then progresses to more advanced topics. Captulo 5, O Programa SubWCRev is a separate program included with TortoiseSVN which can extract the information from your working copy and write it into a file. This is useful for including build information in your projects. The Apndice B, Como Farei Para... section answers some common questions about performing tasks which are not explicitly covered elsewhere. The section on Apndice D, Automatizar o TortoiseSVN shows how the TortoiseSVN GUI dialogs can be called from the command line. This is useful for scripting where you still need user interaction. The Apndice E, Referncia Cruzada da Interface de Linha de Comandos give a correlation between TortoiseSVN commands and their equivalents in the Subversion command line client svn.exe.

xi

Prefcio

3. O TortoiseSVN grtis!
TortoiseSVN is free. You don't have to pay to use it, and you can use it any way you want. It is developed under the GNU General Public License (GPL). TortoiseSVN is an Open Source project. That means you have full read access to the source code of this program. You can browse it on this link http://code.google.com/p/tortoisesvn/source/browse/. You will be prompted to enter username and password. The username is guest, and the password must be left blank. The most recent version (where we're currently working) is located under /trunk/, and the released versions are located under /tags/.

4. Comunidade
Both TortoiseSVN and Subversion are developed by a community of people who are working on those projects. They come from different countries all over the world and work together to create wonderful programs.

5. Agradecimentos
Tim Kemp por ter fundado o projecto TortoiseSVN Stefan Kng for the hard work to get TortoiseSVN to what it is now Lbbe Onken pelos cones maravilhosos, logo, caa ao erro, traduo e gesto das tradues Simon Large for helping with the documentation and bug hunting O livro sobre Subversion pela excelente introduo a Subversion e ao captulo 2 que copiamos aqui O projecto de Estilo da Tigris por algums dos estilos reutilizados nesta documentao Os nossos contribuintes for the patches, bug reports and new ideas, and for helping others by answering questions on our mailing list. Os nossos doadores por muitas horas de prazer com a musica que nos enviaram

6. Terminologia utilizada neste documento


To make reading the docs easier, the names of all the screens and Menus from TortoiseSVN are marked up in a different font. The Log Dialog for instance. A menu choice is indicated with an arrow. TortoiseSVN Show Log means: select Show Log from the TortoiseSVN context menu. Where a local context menu appears within one of the TortoiseSVN dialogs, it is shown like this: Context Menu Save As ... User Interface Buttons are indicated like this: Press OK to continue. User Actions are indicated using a bold font. Alt+A: press the Alt-Key on your keyboard and while holding it down press the A-Key as well. Right-drag: press the right mouse button and while holding it down drag the items to the new location. System output and keyboard input is indicated with a different font as well.

xii

Prefcio

Importante
As notas importantes esto marcadas com um cone.

Dica
Dicas que te facilitam a vida.

Cuidado
Lugares onde preciso cuidado com o que fazes.

Ateno
Where extreme care has to be taken, data corruption or other nasty things may occur if these warnings are ignored.

xiii

Captulo 1. Introduo
O controlo de verses a arte de gerir modificaes na informao. Desde h muito, tem sido uma ferramenta crtica para os programadores que usualmente efectuam pequenas alteraes no software e, desfazem ou confirmam algumas dessas alteraes no dia seguinte. Imaginem uma equipa desses desenvolvedores a trabalhar concorrentemente - e at talvez em simultneo nos mesmos ficheiros! - e podes ver o porqu da necessidade de um bom sistema para gerir o caos potencial.

1.1. O que o TortoiseSVN?


TortoiseSVN is a free open-source client for the Subversion version control system. That is, TortoiseSVN manages files and directories over time. Files are stored in a central repository. The repository is much like an ordinary file server, except that it remembers every change ever made to your files and directories. This allows you to recover older versions of your files and examine the history of how and when your data changed, and who changed it. This is why many people think of Subversion and version control systems in general as a sort of time machine. Alguns sistemas de controlo de verses so tambm sistemas de software configuration management (SCM). Estes sistemas so especificamente desenhados para gerir arvores de cdigo fonte e tm muitas funcionalidades que so especficas ao desenvolvimento de software; como compreender nativamente as linguagens de programao, ou fornecerem ferramentas para construir (build) software. O Subversion no entanto no um desses sistemas; um sistema genrico que pode ser utilizado para gerir qualquer coleco de ficheiros, incluindo os de cdigo fonte.

1.2. A histria do TortoiseSVN


In 2002, Tim Kemp found that Subversion was a very good version control system, but it lacked a good GUI client. The idea for a Subversion client as a Windows shell integration was inspired by the similar client for CVS named TortoiseCVS. Tim studied the source code of TortoiseCVS and used it as a base for TortoiseSVN. He then started the project, registered the domain tortoisesvn.org and put the source code online. During that time, Stefan Kng was looking for a good and free version control system and found Subversion and the source for TortoiseSVN. Since TortoiseSVN was still not ready for use then he joined the project and started programming. Soon he rewrote most of the existing code and started adding commands and features, up to a point where nothing of the original code remained. As Subversion became more stable it attracted more and more users who also started using TortoiseSVN as their Subversion client. The user base grew quickly (and is still growing every day). That's when Lbbe Onken offered to help out with some nice icons and a logo for TortoiseSVN. And he takes care of the website and manages the translation.

1.3. TortoiseSVN's Features


O que torna o TortoiseSVN um bom cliente Subversion? Aqui vai uma pequena lista de funcionalidades: Integrao na "shell" TortoiseSVN integrates seamlessly into the Windows shell (i.e. the explorer). This means you can keep working with the tools you're already familiar with. And you do not have to change into a different application each time you need functions of the version control! And you are not even forced to use the Windows Explorer. TortoiseSVN's context menus work in many other file managers, and in the File/Open dialog which is common to most standard Windows applications. You should, however, bear in mind that TortoiseSVN is intentionally developed as extension for the Windows Explorer. Thus it is possible that in other applications the integration is not as complete and e.g. the icon overlays may not be shown. Soberposio de cones O estado de cada ficheiro e pasta versionada ndicado atravs de pequenos cones sobrepostos. Desta maneira possvel visualizar de imediato o estado da tua cpia de trabalho.

Introduo

Accesso fcil aos comandos do Subversion Toldos os comandos do Subervision esto disponveis atravs do menu de contexto do explorador. O TortoiseSVN adiciona aqui o seu sub-menu. Sendo o TortoiseSVN um cliente do Subversion, gostaramos tambm de mostrar algumas das funcionalidades especficas do Subversion: Versionamento de Pastas O CVS s segue o histrico de ficheiros individuais, mas o Subversion mplementa um sistema virtual de ficheiros versionados que segue as alteraes em todo o sistema de ficheiros ao longo do tempo. Ficheiros e pastas so versionadas. Como resultado, existem comandos reais do lado do cliente de, mover e copiar que actuam em ficheiros e pastas. Submisses atmicas Uma submisso para o repositrio ou executada por completo ou no o de todo. Este comportamento permite aos desenvolvedores construir e submeter alteraes para o repositrio como blocos lgicos. Metadata versionada Cada ficheiro ou pasta possuem um conjunto invisvel de propriedades agarrados a si. Poders ento inventar e armazenar qualquer conjunto arbitrrio de pares chave/valor que desejes. Propriedades so versionadas ao longo do tempo tal como os contedos dos ficheiros. Escolha de camadas de rede O Subversion tem uma noo abstracta do acesso ao repositrio, tornando fcil para as pessoas a implementao de novos mecanismos de rede. O servidor de rede avanado do Subversion um mdulo para o servidor web Apache, que fala uma variante do protocolo HTTP, chamado WebDAV/DeltaV. Isto d ao Subversion uma grande vantagem em estabilidade e interoperabilidade e fornece vrias funcionalidades chave gratuitamente: autenticao, autorizao, compresso em linha e navegao de repositrio, por exemplo. Um processo de servidor Subversion mais pequeno e autnomo tambm providenciado. Este servidor fala um protocolo customizado que pode ser facilmente tunelizado atravs de ssh. Processamento consistente de dados O Subervision exprime as diferenas nos ficheiros usando uma algoritmo de diferencial binrio, que funciona de modo igual tanto para ficheiros de texto (legveis para humanos) e ficheiros binrios (ilegveis para humanos). Ambos os tipos de ficheiros esto armazenados de igual modo, e comprimidos, no repositrio e as diferenas so transmitidas em ambas as direces atravs da rede. Ramificao e etiquetao eficiente O custo de ramificao e etiquetao no precisa de ser proporcional dimenso do projecto. O Subversion cria ramos e etiquetas atravs da simples cpia do projecto utilizando um mecanismo semelhante a um hardlink. Sendo assim, estas operaes necessitam de apenas de uma pequena e constante fraco de tempo , necessitando de muito pouco espao no repositrio. Hackabilidade O Subversion no tem bagagem histrica; est implementado como uma coleco de bibliotecas partilhadas em C com APIs bem definidas. Isto torna o Subversion extremamente manutenvel e usvel por outras aplicaes e linguagens.

1.4. Instalando o TortoiseSVN


1.4.1. Requesitos de sistema
TortoiseSVN runs on Windows 2000 SP2, Windows XP or higher. Windows 98, Windows ME and Windows NT4 are no longer supported since TortoiseSVN 1.2.0, but you can still download the older versions if you really need them. If you encounter any problems during or after installing TortoiseSVN please refer to Apndice A, Questes Mais Frequentes (FAQ) first.

1.4.2. Instalao

Introduo

TortoiseSVN comes with an easy to use installer. Double click on the installer file and follow the instructions. The installer will take care of the rest.

Importante
Necessitas de previlgios de administrador para instalar o TortoiseSVN.

1.4.3. Pacotes de Linguas


O interface grfico do TortoiseSVN tem sido traduzido em muitoas e variadas lnguas, sendo ento possvel descarregar um pacote de lnguas que sirva as tuas necessidades. Tu podes encontrar os pacotes de lnguas no nosso translation status pgina de ponto de situao da traduo [http://tortoisesvn.net/translation_status]. Se no existir um pacote de lingua ainda disponvel porque no juntares-te equipa e submeteres a tua prpria traduo ;-) Cada pacote de lngua est empacotado como um instalador com extenso .exe. Apenas precisas de correr o ficheiro de instalao e seguir as instrues. Da prxima vez que reiniciares o computador, a traduo estar disponvel.

1.4.4. Corretor Ortogrfico


O TortoiseSVN nclui um corretor ortogrfico que permite verificar as messagens de log de submisso. Isto de utilidade especial se a lngua do projecto no a lngua nativa. O verificador ortogrfico usa os mesmos ficheiros de dicionrio que o OpenOffice [http://openoffice.org] e Mozilla [http://mozilla.org]. O instalador instala automticamente os dicionrios de Ingls UK e US. Se quiseres outras lnguas, a opo mais simples instalar um dos pacotes de lnguas do TortoiseSVN. Este ir instalar os ficheiros de dicionrio apropriados bem como o interface local do TortoiseSVN. Da prxima vez que reiniciares o computadoe, o dicionrio estar tambem disponvel. Ou poders instalar os dicionrios manualmente. Se tens o OpenOffice ou Mozilla instalado, podes copiar esses dicionrios, que esto localizados nas pastas de instalao dessas aplicaes. De outro modo, necessitars de descarregar os ficheiros de dicionrio necessrios a partir de http://wiki.services.openoffice.org/wiki/Dictionaries Aps obteres os ficheiros de dicionrio, provavelmente necessitars de renome-los para que os ficheiros s tenham os cdigos de localizao no nome. Exemplo: en_US.aff en_US.dic Ento copia-os apenas para a sub-pasta bin da pasta de instalao do TortoiseSVN. Normalmente esta ser C: \Program Files\TortoiseSVN\bin. No entanto se no quiseres lixo na sub-pasta bin poders colocar os teus ficheiros de correo ortogrfica na pasta C:\Program Files\TortoiseSVN\Languages. Se essa pasta no existe, ters de a criar primeiro. Da prxima vez que iniciares o TortoiseSVN o corrector ortogrfica estar disponvel. Se quiseres instalar mltiplos dicionrios, o TortoiseSVN utiliza estas regras para seleccionar o dicionrio em uso. 1. Verificar o parametro de configurao tsvn:projectlanguage. Ver a seco Seco 4.17, Configuraes de Projecto para mais informaes sobre configurao das propriedades do projecto 2. Se no seleccionada nenhuma lngua para o projecto, ou essa lngua no est instalada, tente por favor a lngua local do Windows. 3. Se a configurao local do Windows no funciona, esperimente a lngua Base, i.e. de_CH (Alemo-Suio) cair por defeito para de_DE (German). 4. Se nenhuma das abordagens anteriores funcionou, ento a lngua por defeito ser o Ingls, que est ncluido na instalao standard.

Captulo 2. Conceitos Bsicos de Controle de Verses


This chapter is a slightly modified version of the same chapter in the Subversion book. An online version of the Subversion book is available here: http://svnbook.red-bean.com/. This chapter is a short, casual introduction to Subversion. If you're new to version control, this chapter is definitely for you. We begin with a discussion of general version control concepts, work our way into the specific ideas behind Subversion, and show some simple examples of Subversion in use. Even though the examples in this chapter show people sharing collections of program source code, keep in mind that Subversion can manage any sort of file collection - it's not limited to helping computer programmers.

2.1. O Repositrio
O Subversion um sistema centralizado para partilha de informao. No seu cerne est o repository

Figura 2.1. Um sistema tpico Cliente/Servidor


So why is this interesting? So far, this sounds like the definition of a typical file server. And indeed, the repository is a kind of file server, but it's not your usual breed. What makes the Subversion repository special is that it remembers every change ever written to it: every change to every file, and even changes to the directory tree itself, such as the addition, deletion, and rearrangement of files and directories. When a client reads data from the repository, it normally sees only the latest version of the filesystem tree. But the client also has the ability to view previous states of the filesystem. For example, a client can ask historical questions like, what did this directory contain last Wednesday?, or who was the last person to change this file, and what changes did they make? These are the sorts of questions that are at the heart of any version control system: systems that are designed to record and track changes to data over time.

2.2. Modelos de Controle de Verses


All version control systems have to solve the same fundamental problem: how will the system allow users to share information, but prevent them from accidentally stepping on each other's feet? It's all too easy for users to accidentally overwrite each other's changes in the repository.

2.2.1. O Probelma de Partilha de Ficheiros


Consider this scenario: suppose we have two co-workers, Harry and Sally. They each decide to edit the same repository file at the same time. If Harry saves his changes to the repository first, then it's possible that (a few

Conceitos Bsicos de Controle de Verses

moments later) Sally could accidentally overwrite them with her own new version of the file. While Harry's version of the file won't be lost forever (because the system remembers every change), any changes Harry made won't be present in Sally's newer version of the file, because she never saw Harry's changes to begin with. Harry's work is still effectively lost - or at least missing from the latest version of the file - and probably by accident. This is definitely a situation we want to avoid!

Figura 2.2. O Problema a Evitar 2.2.2. A soluo de Bloquear-Moficar-Desbloquear


Many version control systems use a lock-modify-unlock model to address this problem, which is a very simple solution. In such a system, the repository allows only one person to change a file at a time. First Harry must lock the file before he can begin making changes to it. Locking a file is a lot like borrowing a book from the library; if Harry has locked a file, then Sally cannot make any changes to it. If she tries to lock the file, the repository will deny the request. All she can do is read the file, and wait for Harry to finish his changes and release his lock. After Harry unlocks the file, his turn is over, and now Sally can take her turn by locking and editing.

Conceitos Bsicos de Controle de Verses

Figura 2.3. A soluo de Bloquear-Moficar-Desbloquear


The problem with the lock-modify-unlock model is that it's a bit restrictive, and often becomes a roadblock for users: Locking may cause administrative problems. Sometimes Harry will lock a file and then forget about it. Meanwhile, because Sally is still waiting to edit the file, her hands are tied. And then Harry goes on vacation. Now Sally has to get an administrator to release Harry's lock. The situation ends up causing a lot of unnecessary delay and wasted time. Locking may cause unnecessary serialization. What if Harry is editing the beginning of a text file, and Sally simply wants to edit the end of the same file? These changes don't overlap at all. They could easily edit the file simultaneously, and no great harm would come, assuming the changes were properly merged together. There's no need for them to take turns in this situation. Locking may create a false sense of security. Pretend that Harry locks and edits file A, while Sally simultaneously locks and edits file B. But suppose that A and B depend on one another, and the changes made to each are semantically incompatible. Suddenly A and B don't work together anymore. The locking system was powerless to prevent the problem - yet it somehow provided a sense of false security. It's easy for Harry and Sally to imagine that by locking files, each is beginning a safe, insulated task, and thus inhibits them from discussing their incompatible changes early on.

2.2.3. A soluo de Copiar-Modificar-Integrar


Subversion, CVS, and other version control systems use a copy-modify-merge model as an alternative to locking. In this model, each user's client reads the repository and creates a personal working copy of the file or project.

Conceitos Bsicos de Controle de Verses

Users then work in parallel, modifying their private copies. Finally, the private copies are merged together into a new, final version. The version control system often assists with the merging, but ultimately a human being is responsible for making it happen correctly. Here's an example. Say that Harry and Sally each create working copies of the same project, copied from the repository. They work concurrently, and make changes to the same file A within their copies. Sally saves her changes to the repository first. When Harry attempts to save his changes later, the repository informs him that his file A is out-of-date. In other words, that file A in the repository has somehow changed since he last copied it. So Harry asks his client to merge any new changes from the repository into his working copy of file A. Chances are that Sally's changes don't overlap with his own; so once he has both sets of changes integrated, he saves his working copy back to the repository.

Figura 2.4. A soluo de Copiar-Modificar-Integrar

Conceitos Bsicos de Controle de Verses

Figura 2.5. ...Copiar-Modificar-Integrar Continuao

But what if Sally's changes do overlap with Harry's changes? What then? This situation is called a conflict, and it's usually not much of a problem. When Harry asks his client to merge the latest repository changes into his working copy, his copy of file A is somehow flagged as being in a state of conflict: he'll be able to see both sets of conflicting changes, and manually choose between them. Note that software can't automatically resolve conflicts; only humans are capable of understanding and making the necessary intelligent choices. Once Harry has manually resolved the overlapping changes (perhaps by discussing the conflict with Sally!), he can safely save the merged file back to the repository. The copy-modify-merge model may sound a bit chaotic, but in practice, it runs extremely smoothly. Users can work in parallel, never waiting for one another. When they work on the same files, it turns out that most of their concurrent changes don't overlap at all; conflicts are infrequent. And the amount of time it takes to resolve conflicts is far less than the time lost by a locking system. In the end, it all comes down to one critical factor: user communication. When users communicate poorly, both syntactic and semantic conflicts increase. No system can force users to communicate perfectly, and no system can detect semantic conflicts. So there's no point in being lulled into a false promise that a locking system will somehow prevent conflicts; in practice, locking seems to inhibit productivity more than anything else. There is one common situation where the lock-modify-unlock model comes out better, and that is where you have unmergeable files. For example if your repository contains some graphic images, and two people change the image at the same time, there is no way for those changes to be merged together. Either Harry or Sally will lose their changes.

Conceitos Bsicos de Controle de Verses

2.2.4. What does Subversion Do?


Subversion uses the copy-modify-merge solution by default, and in many cases this is all you will ever need. However, as of Version 1.2, Subversion also supports file locking, so if you have unmergeable files, or if you are simply forced into a locking policy by management, Subversion will still provide the features you need.

2.3. Subversion em Aco


2.3.1. Cpias de trabalho.
You've already read about working copies; now we'll demonstrate how the Subversion client creates and uses them. A Subversion working copy is an ordinary directory tree on your local system, containing a collection of files. You can edit these files however you wish, and if they're source code files, you can compile your program from them in the usual way. Your working copy is your own private work area: Subversion will never incorporate other people's changes, nor make your own changes available to others, until you explicitly tell it to do so. After you've made some changes to the files in your working copy and verified that they work properly, Subversion provides you with commands to publish your changes to the other people working with you on your project (by writing to the repository). If other people publish their own changes, Subversion provides you with commands to merge those changes into your working directory (by reading from the repository). A working copy also contains some extra files, created and maintained by Subversion, to help it carry out these commands. In particular, each directory in your working copy contains a subdirectory named .svn, also known as the working copy administrative directory. The files in each administrative directory help Subversion recognize which files contain unpublished changes, and which files are out-of-date with respect to others' work. A typical Subversion repository often holds the files (or source code) for several projects; usually, each project is a subdirectory in the repository's filesystem tree. In this arrangement, a user's working copy will usually correspond to a particular subtree of the repository. For example, suppose you have a repository that contains two software projects.

Conceitos Bsicos de Controle de Verses

Figura 2.6. The Repository's Filesystem


In other words, the repository's root directory has two subdirectories: paint and calc. To get a working copy, you must check out some subtree of the repository. (The term check out may sound like it has something to do with locking or reserving resources, but it doesn't; it simply creates a private copy of the project for you). Suppose you make changes to button.c. Since the .svn directory remembers the file's modification date and original contents, Subversion can tell that you've changed the file. However, Subversion does not make your changes public until you explicitly tell it to. The act of publishing your changes is more commonly known as committing (or checking in) changes to the repository. To publish your changes to others, you can use Subversion's commit command. Now your changes to button.c have been committed to the repository; if another user checks out a working copy of /calc, they will see your changes in the latest version of the file. Suppose you have a collaborator, Sally, who checked out a working copy of /calc at the same time you did. When you commit your change to button.c, Sally's working copy is left unchanged; Subversion only modifies working copies at the user's request. To bring her project up to date, Sally can ask Subversion to update her working copy, by using the Subversion update command. This will incorporate your changes into her working copy, as well as any others that have been committed since she checked it out. Note that Sally didn't need to specify which files to update; Subversion uses the information in the .svn directory, and further information in the repository, to decide which files need to be brought up to date.

10

Conceitos Bsicos de Controle de Verses

2.3.2. Repository URLs


Subversion repositories can be accessed through many different methods - on local disk, or through various network protocols. A repository location, however, is always a URL. The URL schema indicates the access method: Schema file:// http:// https:// svn:// svn+ssh:// Access Method Direct repository access on local or network drive. Access via WebDAV protocol to Subversion-aware Apache server. Same as http://, but with SSL encryption. Unauthenticated TCP/IP access via custom protocol to a svnserve server. authenticated, encrypted TCP/IP access via custom protocol to a svnserve server.

Tabela 2.1. Repository Access URLs


For the most part, Subversion's URLs use the standard syntax, allowing for server names and port numbers to be specified as part of the URL. The file:// access method is normally used for local access, although it can be used with UNC paths to a networked host. The URL therefore takes the form file://hostname/path/to/ repos. For the local machine, the hostname portion of the URL is required to be either absent or localhost. For this reason, local paths normally appear with three slashes, file:///path/to/repos. Also, users of the file:// scheme on Windows platforms will need to use an unofficially standard syntax for accessing repositories that are on the same machine, but on a different drive than the client's current working drive. Either of the two following URL path syntaxes will work where X is the drive on which the repository resides:

file:///X:/path/to/repos ... file:///X|/path/to/repos ... Note that a URL uses ordinary slashes even though the native (non-URL) form of a path on Windows uses backslashes. You can safely access a FSFS repository via a network share, but you cannot access a BDB repository in this way.

Ateno
Do not create or access a Berkeley DB repository on a network share. It cannot exist on a remote filesystem. Not even if you have the network drive mapped to a drive letter. If you attempt to use Berkeley DB on a network share, the results are unpredictable - you may see mysterious errors right away, or it may be months before you discover that your repository database is subtly corrupted.

2.3.3. Revisions
A svn commit operation can publish changes to any number of files and directories as a single atomic transaction. In your working copy, you can change files' contents, create, delete, rename and copy files and directories, and then commit the complete set of changes as a unit. In the repository, each commit is treated as an atomic transaction: either all the commits changes take place, or none of them take place. Subversion retains this atomicity in the face of program crashes, system crashes, network problems, and other users' actions. Each time the repository accepts a commit, this creates a new state of the filesystem tree, called a revision. Each revision is assigned a unique natural number, one greater than the number of the previous revision. The initial revision of a freshly created repository is numbered zero, and consists of nothing but an empty root directory.

11

Conceitos Bsicos de Controle de Verses

A nice way to visualize the repository is as a series of trees. Imagine an array of revision numbers, starting at 0, stretching from left to right. Each revision number has a filesystem tree hanging below it, and each tree is a snapshot of the way the repository looked after each commit.

Figura 2.7. O Repositrio


Global Revision Numbers Unlike those of many other version control systems, Subversion's revision numbers apply to entire trees, not individual files. Each revision number selects an entire tree, a particular state of the repository after some committed change. Another way to think about it is that revision N represents the state of the repository filesystem after the Nth commit. When a Subversion user talks about ``revision 5 of foo.c'', they really mean ``foo.c as it appears in revision 5.'' Notice that in general, revisions N and M of a file do not necessarily differ! It's important to note that working copies do not always correspond to any single revision in the repository; they may contain files from several different revisions. For example, suppose you check out a working copy from a repository whose most recent revision is 4:

calc/Makefile:4 integer.c:4 button.c:4 At the moment, this working directory corresponds exactly to revision 4 in the repository. However, suppose you make a change to button.c, and commit that change. Assuming no other commits have taken place, your commit will create revision 5 of the repository, and your working copy will now look like this:

calc/Makefile:4 integer.c:4 button.c:5 Suppose that, at this point, Sally commits a change to integer.c, creating revision 6. If you use svn update to bring your working copy up to date, then it will look like this:

12

Conceitos Bsicos de Controle de Verses

calc/Makefile:6 integer.c:6 button.c:6 Sally's changes to integer.c will appear in your working copy, and your change will still be present in button.c. In this example, the text of Makefile is identical in revisions 4, 5, and 6, but Subversion will mark your working copy of Makefile with revision 6 to indicate that it is still current. So, after you do a clean update at the top of your working copy, it will generally correspond to exactly one revision in the repository.

2.3.4. How Working Copies Track the Repository


For each file in a working directory, Subversion records two essential pieces of information in the .svn/ administrative area: what revision your working file is based on (this is called the file's working revision), and a timestamp recording when the local copy was last updated by the repository. Given this information, by talking to the repository, Subversion can tell which of the following four states a working file is in: Unchanged, and current The file is unchanged in the working directory, and no changes to that file have been committed to the repository since its working revision. A commit of the file will do nothing, and an update of the file will do nothing. Locally changed, and current The file has been changed in the working directory, and no changes to that file have been committed to the repository since its base revision. There are local changes that have not been committed to the repository, thus a commit of the file will succeed in publishing your changes, and an update of the file will do nothing. Unchanged, and out-of-date The file has not been changed in the working directory, but it has been changed in the repository. The file should eventually be updated, to make it current with the public revision. A commit of the file will do nothing, and an update of the file will fold the latest changes into your working copy. Locally changed, and out-of-date The file has been changed both in the working directory, and in the repository. A commit of the file will fail with an out-of-date error. The file should be updated first; an update command will attempt to merge the public changes with the local changes. If Subversion can't complete the merge in a plausible way automatically, it leaves it to the user to resolve the conflict.

2.4. Summary
We've covered a number of fundamental Subversion concepts in this chapter: We've introduced the notions of the central repository, the client working copy, and the array of repository revision trees. We've seen some simple examples of how two collaborators can use Subversion to publish and receive changes from one another, using the 'copy-modify-merge' model. We've talked a bit about the way Subversion tracks and manages information in a working copy.

13

Captulo 3. O Repositrio
No matter which protocol you use to access your repositories, you always need to create at least one repository. This can either be done with the Subversion command line client or with TortoiseSVN. If you haven't created a Subversion repository yet, it's time to do that now.

3.1. Repository Creation


You can create a repository with the FSFS backend or with the older Berkeley Database (BDB) format. The FSFS format is generally faster and easier to administer, and it works on network shares and Windows 98 without problems. The BDB format was once considered more stable simply because it has been in use for longer, but since FSFS has now been in use in the field for several years, that argument is now rather weak. Read Choosing a Data Store [http://svnbook.red-bean.com/en/1.5/svn.reposadmin.planning.html#svn.reposadmin.basics.backends] in the Subversion book for more information.

3.1.1. Creating a Repository with the Command Line Client


1. Create an empty folder with the name SVN (e.g. D:\SVN\), which is used as root for all your repositories. 2. Create another folder MyNewRepository inside D:\SVN\. 3. Open the command prompt (or DOS-Box), change into D:\SVN\ and type

svnadmin create --fs-type bdb MyNewRepository or

svnadmin create --fs-type fsfs MyNewRepository Now you've got a new repository located at D:\SVN\MyNewRepository.

3.1.2. Creating The Repository With TortoiseSVN

Figura 3.1. The TortoiseSVN menu for unversioned folders


1. Open the windows explorer 2. Create a new folder and name it e.g. SVNRepository 3. Right-click on the newly created folder and select TortoiseSVN Create Repository here....

14

O Repositrio

A repository is then created inside the new folder. Don't edit those files yourself!!!. If you get any errors make sure that the folder is empty and not write protected.

Dica
TortoiseSVN no longer offers the option to create BDB repositories, although you can still use the command line client to create them. FSFS repositories are generally easier for you to maintain, and also makes it easier for us to maintain TortoiseSVN due to compatibility issues between the different BDB versions. Future versions of TortoiseSVN will not support file:// access to BDB repositories due to these compatibility issues, although it will of course always support this repository format when accessed via a server through the svn://, http:// or https:// protocols. For this reason, we strongly recommend that any new repository which must be accessed using file:// protocol is created as FSFS. Of course we also recommend that you don't use file:// access at all, apart from local testing purposes. Using a server is more secure and more reliable for all but single-developer use.

3.1.3. Local Access to the Repository


To access your local repository you need the path to that folder. Just remember that Subversion expects all repository paths in the form file:///C:/SVNRepository/. Note the use of forward slashes throughout. To access a repository located on a network share you can either use drive mapping, or you can use the UNC path. For UNC paths, the form is file://ServerName/path/to/repos/. Note that there are only 2 leading slashes here. Prior to SVN 1.2, UNC paths had to be given in the more obscure form file:///\ServerName/path/to/ repos. This form is still supported, but not recommended.

Ateno
Do not create or access a Berkeley DB repository on a network share. It cannot exist on a remote file system. Not even if you have the network drive mapped to a drive letter. If you attempt to use Berkeley DB on a network share, the results are unpredictable - you may see mysterious errors right away, or it may be months before you discover that your repository database is subtly corrupted.

3.1.4. Accessing a Repository on a Network Share


Although in theory it is possible to put a FSFS repository on a network share and have multiple users access it using file:// protocol, this is most definitely not recommended. In fact we would strongly discourage it, and do not support such use. Firstly you are giving every user direct write access to the repository, so any user could accidentally delete the entire repository or make it unusable in some other way. Secondly not all network file sharing protocols support the locking that Subversion requires, so you may find your repository gets corrupted. It may not happen straight away, but one day two users will try to access the repository at the same time. Thirdly the file permissions have to be set just so. You may just about get away with it on a native Windows share, but SAMBA is particularly difficult. file:// access is intended for local, single-user access only, particularly testing and debugging. When you want to share the repository you really need to set up a proper server, and it is not nearly as difficult as you might think. Read Seco 3.5, Accessing the Repository for guidelines on choosing and setting up a server.

15

O Repositrio

3.1.5. Repository Layout


Before you import your data into the repository you should first think about how you want to organize your data. If you use one of the recommended layouts you will later have it much easier. There are some standard, recommended ways to organize a repository. Most people create a trunk directory to hold the main line of development, a branches directory to contain branch copies, and a tags directory to contain tag copies. If a repository holds only one project, then often people create these top-level directories:

/trunk /branches /tags If a repository contains multiple projects, people often index their layout by branch:

/trunk/paint /trunk/calc /branches/paint /branches/calc /tags/paint /tags/calc ...or by project:

/paint/trunk /paint/branches /paint/tags /calc/trunk /calc/branches /calc/tags Indexing by project makes sense if the projects are not closely related and each one is checked out individually. For related projects where you may want to check out all projects in one go, or where the projects are all tied together in a single distribution package, it is often better to index by branch. This way you have only one trunk to checkout, and the relationships between the sub-projects is more easily visible. If you adopt a top level /trunk /tags /branches approach, there is nothing to say that you have to copy the entire trunk for every branch and tag, and in some ways this structure offers the most flexibility. For unrelated projects you may prefer to use separate repositories. When you commit changes, it is the revision number of the whole repository which changes, not the revision number of the project. Having 2 unrelated projects share a repository can mean large gaps in the revision numbers. The Subversion and TortoiseSVN projects appear at the same host address, but are completely separate repositories allowing independent development, and no confusion over build numbers. Of course, you're free to ignore these common layouts. You can create any sort of variation, whatever works best for you or your team. Remember that whatever you choose, it's not a permanent commitment. You can reorganize your repository at any time. Because branches and tags are ordinary directories, TortoiseSVN can move or rename them however you wish. Switching from one layout to another is just a matter of issuing a series of server-side moves; If you don't like the way things are organized in the repository, just juggle the directories around. So if you haven't already created a basic folder structure inside your repository you should do that now. There are two ways to achieve this. If you simply want to create a /trunk /tags /branches structure, you can use the repository browser to create the three folders (in three separate commits). If you want to create a deeper hierarchy then it is simpler to create a folder structure on disk first and import it in a single commit, like this:

16

O Repositrio

1. create a new empty folder on your hard drive 2. create your desired top-level folder structure inside that folder - don't put any files in it yet! 3. import this structure into the repository via a right click on the folder and selecting TortoiseSVN Import... This will import your temp folder into the repository root to create the basic repository layout. Note that the name of the folder you are importing does not appear in the repository, only its contents. For example, create the following folder structure:

C:\Temp\New\trunk C:\Temp\New\branches C:\Temp\New\tags Import C:\Temp\New into the repository root, which will then look like this:

/trunk /branches /tags

3.2. Repository Backup


Whichever type of repository you use, it is vitally important that you maintain regular backups, and that you verify the backup. If the server fails, you may be able to access a recent version of your files, but without the repository all your history is lost forever. The simplest (but not recommended) way is just to copy the repository folder onto the backup medium. However, you have to be absolutely sure that no process is accessing the data. In this context, access means any access at all. A BDB repository is written to even when the operation only appears to require reading, such as getting status. If your repository is accessed at all during the copy, (web browser left open, WebSVN, etc.) the backup will be worthless. The recommended method is to run

svnadmin hotcopy path/to/repository path/to/backup --clean-logs to create a copy of your repository in a safe manner. Then backup the copy. The --clean-logs option is not required, but removes any redundant log files when you backup a BDB repository, which may save some space. The svnadmin tool is installed automatically when you install the Subversion command line client. If you are installing the command line tools on a Windows PC, the best way is to download the Windows installer version. It is compressed more efficiently than the .zip version, so the download is smaller, and it takes care of setting the paths for you. You can download the latest version of the Subversion command line client from http:// subversion.apache.org/getting.html.

3.3. Server side hook scripts


A hook script is a program triggered by some repository event, such as the creation of a new revision or the modification of an unversioned property. Each hook is handed enough information to tell what that event is, what target(s) it's operating on, and the username of the person who triggered the event. Depending on the hook's output or return status, the hook program may continue the action, stop it, or suspend it in some way. Please refer to the chapter on Hook Scripts [http://svnbook.red-bean.com/en/1.5/svn.reposadmin.create.html#svn.reposadmin.create.hooks] in the Subversion Book for full details about the hooks which are implemented. These hook scripts are executed by the server that hosts the repository. TortoiseSVN also allows you to configure client side hook scripts that are executed locally upon certain events. See Seco 4.30.8, Scripts de Gancho do Lado do Cliente for more information.

17

O Repositrio

Sample hook scripts can be found in the hooks directory of the repository. These sample scripts are suitable for Unix/Linux servers but need to be modified if your server is Windows based. The hook can be a batch file or an executable. The sample below shows a batch file which might be used to implement a pre-revprop-change hook.

rem Only allow log messages to be changed. if "%4" == "svn:log" exit 0 echo Property '%4' cannot be changed >&2 exit 1 Note that anything sent to stdout is discarded. if you want a message to appear in the Commit Reject dialog you must send it to stderr. In a batch file this is achieved using >&2

3.4. Checkout Links


If you want to make your Subversion repository available to others you may want to include a link to it from your website. One way to make this more accessible is to include a checkout link for other TortoiseSVN users. When you install TortoiseSVN, it registers a new tsvn: protocol. When a TortoiseSVN user clicks on such a link, the checkout dialog will open automatically with the repository URL already filled in. To include such a link in your own html page, you need to add code which looks something like this:

<a href="tsvn:http://project.domain.org/svn/trunk"> </a> Of course it would look even better if you included a suitable picture. You can use the TortoiseSVN logo [http:// tortoisesvn.tigris.org/images/TortoiseCheckout.png] or you can provide your own image.

<a href="tsvn:http://project.domain.org/svn/trunk"> <img src=TortoiseCheckout.png></a> You can also make the link point to a specific revision, for example

<a href="tsvn:http://project.domain.org/svn/trunk?100"> </a>

3.5. Accessing the Repository


To use TortoiseSVN (or any other Subversion client), you need a place where your repositories are located. You can either store your repositories locally and access them using the file:// protocol or you can place them on a server and access them with the http:// or svn:// protocols. The two server protocols can also be encrypted. You use https:// or svn+ssh://, or you can use svn:// with SASL. If you are using a public hosting service such as Google Code [http://code.google.com/hosting/] or your server has already been setup by someone else then there is nothing else you need to do. Move along to Captulo 4, Daily Use Guide. If you don't have a server and you work alone, or if you are just evaluating Subversion and TortoiseSVN in isolation, then local repositories are probably your best choice. Just create a repository on your own PC as described earlier in Captulo 3, O Repositrio. You can skip the rest of this chapter and go directly to Captulo 4, Daily Use Guide to find out how to start using it. If you were thinking about setting up a multi-user repository on a network share, think again. Read Seco 3.1.4, Accessing a Repository on a Network Share to find out why we think this is a bad idea. Setting up a server is not as hard as it sounds, and will give you better reliability and probably speed too.

18

O Repositrio

The next sections are a step-by-step guide on how you can set up such a server on a Windows machine. Of course you can also set up a server on a Linux machine, but that is beyond the scope of this guide. More detailed information on the Subversion server options, and how to choose the best architecture for your situation, can be found in the Subversion book under Server Configuration [http://svnbook.red-bean.com/en/1.5/svn.serverconfig.html].

3.6. Svnserve Based Server


3.6.1. Introduo
Subversion includes Svnserve - a lightweight stand-alone server which uses a custom protocol over an ordinary TCP/IP connection. It is ideal for smaller installations, or where a full blown Apache server cannot be used. In most cases svnserve is easier to setup and runs faster than the Apache based server, although it doesn't have some of the advanced features. And now that SASL support is included it is easy to secure as well.

3.6.2. Instalar svnserve


1. Get the latest version of Subversion from http://subversion.apache.org/getting.html. Alternatively get a prepackaged installer from CollabNet at http://www.collab.net/downloads/subversion. This installer will setup svnserve as a Windows service, and also includes some of the tools you need if you are going to use SASL for security. 2. If you already have a version of Subversion installed, and svnserve is running, you will need to stop it before continuing. 3. Run the Subversion installer. If you run the installer on your server (recommended) you can skip step 4. 4. Open the windows-explorer, go to the installation directory of Subversion (usually C:\Program Files\Subversion) and in the bin directory, find the files svnserve.exe, intl3_svn.dll, libapr.dll, libapriconv.dll, libapriutil.dll, libdb*.dll, libeay32.dll and ssleay32.dll - copy these files, or just copy all of the bin directory, into a directory on your server e.g. c:\svnserve

3.6.3. Executar svnserver


Now that svnserve is installed, you need it running on your server. The simplest approach is to run the following from a DOS shell or create a windows shortcut:

svnserve.exe --daemon svnserve will now start waiting for incoming requests on port 3690. The --daemon switch tells svnserve to run as a daemon process, so it will always exist until it is manually terminated. If you have not yet created a repository, follow the instructions given with the Apache server setup Seco 3.7.4, Configuration. To test that svnserve is working, use TortoiseSVN Repo-Browser to view a repository. Assuming your repository is located in c:\repos\TestRepo, and your server is called localhost, enter:

svn://localhost/repos/TestRepo when prompted by the repo browser. You can also increase security and save time entering URLs with svnserve by using the --root switch to set the root location and restrict access to a specified directory on the server:

19

O Repositrio

svnserve.exe --daemon --root drive:\path\to\repository\root Using the previous test as a guide, svnserve would now run as:

svnserve.exe --daemon --root c:\repos And in TortoiseSVN our repo-browser URL is now shortened to:

svn://localhost/TestRepo Note that the --root switch is also needed if your repository is located on a different partition or drive than the location of svnserve on your server. Svnserve will service any number of repositories. Just locate them somewhere below the root folder you just defined, and access them using a URL relative to that root.

Ateno
Do not create or access a Berkeley DB repository on a network share. It cannot exist on a remote filesystem. Not even if you have the network drive mapped to a drive letter. If you attempt to use Berkeley DB on a network share, the results are unpredictable - you may see mysterious errors right away, or it may be months before you discover that your repository database is subtly corrupted.

3.6.3.1. Executar svnserve como um Servio


Running svnserve as a user is usually not the best way. It means always having a user logged in on your server, and remembering to restart it after a reboot. A better way is to run svnserve as a windows service. Starting with Subversion 1.4, svnserve can be installed as a native windows service. To install svnserve as a native windows service, execute the following command all on one line to create a service which is automatically started when windows starts.

sc create svnserve binpath= "c:\svnserve\svnserve.exe --service --root c:\repos" displayname= "Subversion" depend= tcpip start= auto If any of the paths include spaces, you have to use (escaped) quotes around the path, like this:

sc create svnserve binpath= " \"C:\Program Files\Subversion\bin\svnserve.exe\" --service --root c:\repos" displayname= "Subversion" depend= tcpip start= auto You can also add a description after creating the service. This will show up in the Windows Services Manager.

sc description svnserve "Subversion server (svnserve)" Note the rather unusual command line format used by sc. In the key= value pairs there must be no space between the key and the = but there must be a space before the value.

Dica
Microsoft now recommend services to be run as under either the Local Service or Network Service account. Refer to The Services and Service Accounts Security Planning Guide [http://

20

O Repositrio

www.microsoft.com/technet/security/topics/serversecurity/serviceaccount/default.mspx]. To create the service under the Local Service account, append the following to the example above.

obj= "NT AUTHORITY\LocalService" Note that you would have to give the Local Service account appropriate rights to both Subversion and your repositories, as well as any applications which are used by hook scripts. The built-in group for this is called "LOCAL SERVICE". Once you have installed the service, you need to go to the services manager to start it (this time only; it will start automatically when the server reboots). For more detailed information, refer to Windows Service Support for Svnserve [http://svn.collab.net/repos/svn/ trunk/notes/windows-service.txt]. If you installed an earlier version of svnserve using the SVNService wrapper, and you now want to use the native support instead, you will need to unregister the wrapper as a service (remember to stop the service first!). Simply use the command

svnservice -remove to remove the service registry entry.

3.6.4. Basic Authentication with svnserve


The default svnserve setup provides anonymous read-only access. This means that you can use an svn:// URL to checkout and update, or use the repo-browser in TortoiseSVN to view the repository, but you won't be able to commit any changes. To enable write access to a repository, you need to edit the conf/svnserve.conf file in your repository directory. This file controls the configuration of the svnserve daemon, and also contains useful documentation. You can enable anonymous write access by simply setting:

[general] anon-access = write However, you will not know who has made changes to a repository, as the svn:author property will be empty. You will also be unable to control who makes changes to a repository. This is a somewhat risky setup! One way to overcome this is to create a password database:

[general] anon-access = none auth-access = write password-db = userfile Where userfile is a file which exists in the same directory as svnserve.conf. This file can live elsewhere in your file system (useful for when you have multiple repositories which require the same access rights) and may be referenced using an absolute path, or a path relative to the conf directory. If you include a path, it must be written /the/unix/way. Using \ or drive letters will not work. The userfile should have a structure of:

[users] username = password

21

O Repositrio

... This example would deny all access for unauthenticated (anonymous) users, and give read-write access to users listed in userfile.

Dica
If you maintain multiple repositories using the same password database, the use of an authentication realm will make life easier for users, as TortoiseSVN can cache your credentials so that you only have to enter them once. More information can be found in the Subversion book, specifically in the sections Create a 'users' file and realm [http://svnbook.red-bean.com/en/1.5/ svn.serverconfig.svnserve.html#svn.serverconfig.svnserve.auth.users] and Client Credentials Caching [http://svnbook.red-bean.com/en/1.5/ svn.serverconfig.netmodel.html#svn.serverconfig.netmodel.credcache]

3.6.5. Better Security with SASL


3.6.5.1. What is SASL?
The Cyrus Simple Authentication and Security Layer is open source software written by Carnegie Mellon University. It adds generic authentication and encryption capabilities to any network protocol, and as of Subversion 1.5 and later, both the svnserve server and TortoiseSVN client know how to make use of this library. For a more complete discussion of the options available, you should look at the Subversion book in the section Using svnserve with SASL [http://svnbook.red-bean.com/en/1.5/ svn.serverconfig.svnserve.html#svn.serverconfig.svnserve.sasl]. If you are just looking for a simple way to set up secure authentication and encryption on a Windows server, so that your repository can be accessed safely over the big bad Internet, read on.

3.6.5.2. SASL Authentication


To activate specific SASL mechanisms on the server, you'll need to do three things. First, create a [sasl] section in your repository's svnserve.conf file, with this key-value pair:

use-sasl = true Second, create a file called svn.conf in a convenient location - typically in the directory where subversion is installed. Thirdly, create two new registry entries to tell SASL where to find things. Create a registry key named [HKEY_LOCAL_MACHINE\SOFTWARE\Carnegie Mellon\Project Cyrus\SASL Library] and place two new string values inside it: SearchPath set to the directory path containing the sasl*.dll plugins (normally in the Subversion install directory), and ConfFile set to the directory containing the svn.conf file. If you used the CollabNet installer, these registry keys will already have been created for you. Edit the svn.conf file to contain the following:

pwcheck_method: auxprop auxprop_plugin: sasldb mech_list: DIGEST-MD5 sasldb_path: C:\TortoiseSVN\sasldb The last line shows the location of the authentication database, which is a file called sasldb. This could go anywhere, but a convenient choice is the repository parent path. Make sure that the svnserve service has read access to this file.

22

O Repositrio

If svnserve was already running, you will need to restart it to ensure it reads the updated configuration. Now that everything is set up, all you need to do is create some users and passwords. To do this you need the saslpasswd2 program. If you used the CollabNet installer, that program will be in the install directory. Use a command something like this:

saslpasswd2 -c -f C:\TortoiseSVN\sasldb -u realm username The -f switch gives the database location, realm must be the same as the value you defined in your repository's svnserve.conf file, and username is exactly what you expect it to be. Note that the realm is not allowed to contain space characters. You can list the usernames stored in the database using the sasldblistusers2 program.

3.6.5.3. SASL Encryption


To enable or disable different levels of encryption, you can set two values in your repository's svnserve.conf file:

[sasl] use-sasl = true min-encryption = 128 max-encryption = 256 The min-encryption and max-encryption variables control the level of encryption demanded by the server. To disable encryption completely, set both values to 0. To enable simple checksumming of data (i.e., prevent tampering and guarantee data integrity without encryption), set both values to 1. If you wish to allow (but not require) encryption, set the minimum value to 0, and the maximum value to some bit-length. To require encryption unconditionally, set both values to numbers greater than 1. In our previous example, we require clients to do at least 128-bit encryption, but no more than 256-bit encryption.

3.6.6. Authentication with svn+ssh


Another way to authenticate users with a svnserve based server is to use a secure shell (SSH) to tunnel requests through. It is not as simple to set up as SASL, but it may be useful is some cases. With this approach, svnserve is not run as a daemon process, rather, the secure shell starts svnserve for you, running it as the SSH authenticated user. To enable this, you need a secure shell daemon on your server. A basic method for setting up your server is given in Apndice G, Proteco de Svnserve com SSH. You can find other SSH topics within the FAQ by searching for SSH. Further information about svnserve can be found in the Version Control with Subversion [http://svnbook.redbean.com].

3.6.7. Path-based Authorization with svnserve


Starting with Subversion 1.3, svnserve supports the same mod_authz_svn path-based authorization scheme that is available with the Apache server. You need to edit the conf/svnserve.conf file in your repository directory and add a line referring to your authorization file.

[general] authz-db = authz Here, authz is a file you create to define the access permissions. You can use a separate file for each repository, or you can use the same file for several repositories. Read Seco 3.7.6, Path-Based Authorization for a description of the file format.

23

O Repositrio

3.7. Apache Based Server


3.7.1. Introduo
The most flexible of all possible server setups for Subversion is the Apache based one. Although a bit more complicated to set up, it offers benefits that other servers cannot: WebDAV The Apache based Subversion server uses the WebDAV protocol which is supported by many other programs as well. You could e.g. mount such a repository as a Web folder in the Windows explorer and then access it like any other folder in the file system. Browsing The Repository You can point your browser to the URL of your repository and browse the contents of it without having a Subversion client installed. This gives access to your data to a much wider circle of users. Autenticao You can use any authentication mechanism Apache supports, including SSPI and LDAP. Security Since Apache is very stable and secure, you automatically get the same security for your repository. This includes SSL encryption.

3.7.2. Installing Apache


The first thing you need before installing Apache is a computer with Windows 2000, Windows XP+SP1, Windows 2003, Vista or Server 2008.

Ateno
Please note that Windows XP without the service pack 1 will lead to bogus network data and could therefore corrupt your repository! 1. Download the latest version of the Apache web server from http://httpd.apache.org/download.cgi. Make sure that you download the version 2.2.x - the version 1.3.xx won't work! The msi installer for Apache can be found by clicking on other files, then browse to binaries/win32. You may want to choose the msi file apache-2.2.x-win32-x86-openssl-0.9.x.msi (the one that includes OpenSSL). 2. Once you have the Apache2 installer you can double click on it and it will guide you through the installation process. Make sure that you enter the server-URL correctly (if you don't have a DNS name for your server just enter the IP-address). I recommend to install Apache for All Users, on Port 80, as a Service. Note: if you already have IIS or any other program running which listens on port 80 the installation might fail. If that happens, go to the programs directory, \Apache Group\Apache2\conf and locate the file httpd.conf. Edit that file so that Listen 80 is changed to a free port, e.g. Listen 81. Then restart the installation - this time it should finish without problems. 3. Now test if the Apache web server is running correctly by pointing your web browser to http://localhost/ - a preconfigured Website should show up.

Cuidado
If you decide to install Apache as a service, be warned that by default it will run as the local system account. It would be a more secure practice for you to create a separate account for Apache to run as. Make sure that the account on the server that Apache is running as has an explicit entry in the repository directory's access control list (right-click directory | properties | security), with full control. Otherwise, users will not be able to commit their changes.

24

O Repositrio

Even if Apache runs as local system, you still need such an entry (which will be the SYSTEM account in this case). If Apache does not have this permission set up, your users will get Access denied error messages, which show up in the Apache error log as error 500.

3.7.3. Installing Subversion


1. Download the latest version of the Subversion Win32 binaries for Apache. Be sure to get the right version to integrate with your version of Apache, otherwise you will get an obscure error message when you try to restart. If you have Apache 2.2.x go to http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100. 2. Run the Subversion installer and follow the instructions. If the Subversion installer recognized that you've installed Apache, then you're almost done. If it couldn't find an Apache server then you have to do some additional steps. 3. Using the windows explorer, go to the installation directory of Subversion (usually c:\program files\Subversion) and find the files /httpd/mod_dav_svn.so and mod_authz_svn.so. Copy these files to the Apache modules directory (usually c:\program files\apache group \apache2\modules ). 4. Copy the file /bin/libdb*.dll and /bin/intl3_svn.dll from the Subversion installation directory to the Apache bin directory. 5. Edit Apache's configuration file (usually C:\Program Files\Apache Group\Apache2\conf \httpd.conf) with a text editor such as Notepad and make the following changes: Uncomment (remove the '#' mark) the following lines:

#LoadModule dav_fs_module modules/mod_dav_fs.so #LoadModule dav_module modules/mod_dav.so Add the following two lines to the end of the LoadModule section.

LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so

3.7.4. Configuration
Now you have set up Apache and Subversion, but Apache doesn't know how to handle Subversion clients like TortoiseSVN yet. To get Apache to know which URL will be used for Subversion repositories you have to edit the Apache configuration file (usually located in c:\program files\apache group\apache2\conf \httpd.conf) with any text editor you like (e.g. Notepad): 1. At the end of the config file add the following lines:

<Location /svn> DAV svn SVNListParentPath on SVNParentPath D:\SVN #SVNIndexXSLT "/svnindex.xsl" AuthType Basic AuthName "Subversion repositories" AuthUserFile passwd #AuthzSVNAccessFile svnaccessfile Require valid-user

25

O Repositrio

</Location> This configures Apache so that all your Subversion repositories are physically located below D:\SVN. The repositories are served to the outside world from the URL: http://MyServer/svn/ . Access is restricted to known users/passwords listed in the passwd file. 2. To create the passwd file, open the command prompt (DOS-Box) again, change to the apache2 folder (usually c:\program files\apache group\apache2) and create the file by entering

bin\htpasswd -c passwd <username> This will create a file with the name passwd which is used for authentication. Additional users can be added with

bin\htpasswd passwd <username> 3. Restart the Apache service again. 4. Point your browser to http://MyServer/svn/MyNewRepository (where MyNewRepository is the name of the Subversion repository you created before). If all went well you should be prompted for a username and password, then you can see the contents of your repository. A short explanation of what you just entered: Setting <Location /svn> DAV svn SVNListParentPath on SVNParentPath D:\SVN SVNIndexXSLT "/svnindex.xsl" AuthType Basic Explanation means that the Subversion repositories are available from the URL http://MyServer/svn/ tells Apache which module will be responsible to serve that URL - in this case the Subversion module. For Subversion version 1.3 and higher, this directive enables listing all the available repositories under SVNParentPath. tells Subversion to look for repositories below D:\SVN Used to make the browsing with a web browser prettier. is to activate basic authentication, i.e. Username/password

AuthName "Subversion repositori- is used as an information whenever an authentication dialog pops up to es" tell the user what the authentication is for AuthUserFile passwd AuthzSVNAccessFile Require valid-user specifies which password file to use for authentication Location of the Access file for paths inside a Subversion repository specifies that only users who entered a correct username/password are allowed to access the URL

Tabela 3.1. Apache httpd.conf Settings


But that's just an example. There are many, many more possibilities of what you can do with the Apache web server. If you want your repository to have read access for everyone but write access only for specific users you can change the line

Require valid-user to

26

O Repositrio

<LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> Using a passwd file limits and grants access to all of your repositories as a unit. If you want more control over which users have access to each folder inside a repository you can uncomment the line

#AuthzSVNAccessFile svnaccessfile and create a Subversion access file. Apache will make sure that only valid users are able to access your / svn location, and will then pass the username to Subversion's AuthzSVNAccessFile module so that it can enforce more granular access based upon rules listed in the Subversion access file. Note that paths are specified either as repos:path or simply path. If you don't specify a particular repository, that access rule will apply to all repositories under SVNParentPath. The format of the authorization-policy file used by mod_authz_svn is described in Seco 3.7.6, Path-Based Authorization To make browsing the repository with a web browser 'prettier', uncomment the line

#SVNIndexXSLT "/svnindex.xsl" and put the files svnindex.xsl, svnindex.css and menucheckout.ico in your document root directory (usually C:/Program Files/Apache Group/Apache2/htdocs). The directory is set with the DocumentRoot directive in your Apache config file. You can get those three files directly from our source repository at http://tortoisesvn.googlecode.com/svn/trunk/ contrib/svnindex. (Seco 3, O TortoiseSVN grtis! explains how to access the TortoiseSVN source repository). The XSL file from the TortoiseSVN repository has a nice gimmick: if you browse the repository with your web browser, then every folder in your repository has an icon on the right shown. If you click on that icon, the TortoiseSVN checkout dialog is started for this URL.

3.7.5. Multiple Repositories


If you used the SVNParentPath directive then you don't have to change the Apache config file every time you add a new Subversion repository. Simply create the new repository under the same location as the first repository and you're done! In my company I have direct access to that specific folder on the server via SMB (normal windows file access). So I just create a new folder there, run the TortoiseSVN command TortoiseSVN Create repository here... and a new project has a home... If you are using Subversion 1.3 or later, you can use the SVNListParentPath on directive to allow Apache to produce a listing of all available projects if you point your browser at the parent path rather than at a specific repository.

3.7.6. Path-Based Authorization


The mod_authz_svn module permits fine-grained control of access permissions based on user names and repository paths. This is available with the Apache server, and as of Subversion 1.3 it is available with svnserve as well. An example file would look like this:

[groups] admin = john, kate devteam1 = john, rachel, sally devteam2 = kate, peter, mark

27

O Repositrio

docs = bob, jane, mike training = zak # Default access rule for ALL repositories # Everyone can read, admins can write, Dan German is excluded. [/] * = r @admin = rw dangerman = # Allow developers complete access to their project repos [proj1:/] @devteam1 = rw [proj2:/] @devteam2 = rw [bigproj:/] @devteam1 = rw @devteam2 = rw trevor = rw # Give the doc people write access to all the docs folders [/trunk/doc] @docs = rw # Give trainees write access in the training repository only [TrainingRepos:/] @training = rw Note that checking every path can be an expensive operation, particularly in the case of the revision log. The server checks every changed path in each revision and checks it for readability, which can be time-consuming on revisions which affect large numbers of files. Authentication and authorization are separate processes. If a user wants to gain access to a repository path, she has to meet both, the usual authentication requirements and the authorization requirements of the access file.

3.7.7. Authentication With a Windows Domain


As you might have noticed you need to make a username/password entry in the passwd file for each user separately. And if (for security reasons) you want your users to periodically change their passwords you have to make the change manually. But there's a solution for that problem - at least if you're accessing the repository from inside a LAN with a windows domain controller: mod_auth_sspi! The original SSPI module was offered by Syneapps including source code. But the development for it has been stopped. But don't despair, the community has picked it up and improved it. It has a new home on SourceForge [http://sourceforge.net/projects/mod-auth-sspi/]. Download the module which matches your apache version, then copy the file mod_auth_sspi.so into the Apache modules folder. Edit the Apache config file: add the line LoadModule sspi_auth_module modules/mod_auth_sspi.so to the LoadModule section. Make sure you insert this line before the line LoadModule auth_module modules/mod_auth.so To make the Subversion location use this type of authentication you have to change the line AuthType Basic

28

O Repositrio

to

AuthType SSPI also you need to add

SSPIAuth On SSPIAuthoritative On SSPIDomain <domaincontroller> SSPIOmitDomain on SSPIUsernameCase lower SSPIPerRequestAuth on SSPIOfferBasic On within the <Location /svn> block. If you don't have a domain controller, leave the name of the domain control as <domaincontroller>. Note that if you are authenticating using SSPI, then you don't need the AuthUserFile line to define a password file any more. Apache authenticates your username and password against your windows domain instead. You will need to update the users list in your svnaccessfile to reference DOMAIN\username as well.

Importante
The SSPI authentication is only enabled for SSL secured connections (https). If you're only using normal http connections to your server, it won't work. To enable SSL on your server, see the chapter: Seco 3.7.9, Securing the server with SSL

Dica
Subversion AuthzSVNAccessFile files are case sensitive in regard to user names (JUser is different from juser). In Microsoft's world, Windows domains and user names are not case sensitive. Even so, some network administrators like to create user accounts in CamelCase (e.g. JUser). This difference can bite you when using SSPI authentication as the windows domain and user names are passed to Subversion in the same case as the user types them in at the prompt. Internet Explorer often passes the username to Apache automatically using whatever case the account was created with. The end result is that you may need at least two entries in your AuthzSVNAccessFile for each user -- a lowercase entry and an entry in the same case that Internet Explorer passes to Apache. You will also need to train your users to also type in their credentials using lower case when accessing repositories via TortoiseSVN. Apache's Error and Access logs are your best friend in deciphering problems such as these as they will help you determine the username string passed onto Subversion's AuthzSVNAccessFile module. You may need to experiment with the exact format of the user string in the svnaccessfile (e.g. DOMAIN\user vs. DOMAIN//user) in order to get everything working.

3.7.8. Multiple Authentication Sources


It is also possible to have more than one authentication source for your Subversion repository. To do this, you need to make each authentication type non-authoritative, so that Apache will check multiple sources for a matching username/password.

29

O Repositrio

A common scenario is to use both Windows domain authentication and a passwd file, so that you can provide SVN access to users who don't have a Windows domain login. To enable both Windows domain and passwd file authentication, add the following entries within the <Location> block of your Apache config file:

AuthBasicAuthoritative Off SSPIAuthoritative Off Here is an example of the full Apache configuration for combined Windows domain and passwd file authentication:

<Location /svn> DAV svn SVNListParentPath on SVNParentPath D:\SVN AuthName "Subversion repositories" AuthzSVNAccessFile svnaccessfile.txt # NT Domain Logins. AuthType SSPI SSPIAuth On SSPIAuthoritative Off SSPIDomain <domaincontroller> SSPIOfferBasic On # Htpasswd Logins. AuthType Basic AuthBasicAuthoritative Off AuthUserFile passwd Require valid-user </Location>

3.7.9. Securing the server with SSL


Even though Apache 2.2.x has OpenSSL support, it is not activated by default. You need to activate this manually. 1. In the apache config file, uncomment the lines:

#LoadModule ssl_module modules/mod_ssl.so and at the bottom

#Include conf/extra/httpd-ssl.conf then change the line (on one line)

SSLMutex "file:C:/Program Files/Apache Software Foundation/\ Apache2.2/logs/ssl_mutex" to

30

O Repositrio

SSLMutex default 2. Next you need to create an SSL certificate. To do that open a command prompt (DOS-Box) and change to the Apache folder (e.g. C:\program files\apache group\apache2) and type the following command:

bin\openssl req -config conf\openssl.cnf -new -out my-server.csr You will be asked for a passphrase. Please don't use simple words but whole sentences, e.g. a part of a poem. The longer the phrase the better. Also you have to enter the URL of your server. All other questions are optional but we recommend you fill those in too. Normally the privkey.pem file is created automatically, but if it isn't you need to type this command to generate it:

bin\openssl genrsa -out conf\privkey.pem 2048 Next type the commands

bin\openssl rsa -in conf\privkey.pem -out conf\server.key and (on one line)

bin\openssl req -new -key conf\server.key -out conf\server.csr \ -config conf\openssl.cnf and then (on one line)

bin\openssl x509 -in conf\server.csr -out conf\server.crt -req -signkey conf\server.key -days 4000 This will create a certificate which will expire in 4000 days. And finally enter (on one line):

bin\openssl x509 -in conf\server.cert -out conf\server.der.crt -outform DER These commands created some files in the Apache conf folder (server.der.crt, server.csr, server.key, .rnd, privkey.pem, server.cert). 3. Restart the Apache service. 4. Point your browser to https://servername/svn/project ...

SSL and Internet Explorer


If you're securing your server with SSL and use authentication against a windows domain you will encounter that browsing the repository with the Internet Explorer doesn't work anymore. Don't worry - this is only the Internet Explorer not able to authenticate. Other browsers don't have that problem and TortoiseSVN and any other Subversion client are still able to authenticate. If you still want to use IE to browse the repository you can either: define a separate <Location /path> directive in the Apache config file, and add the SSPIBasicPreferred On. This will allow IE to authenticate again, but other browsers and Subversion won't be able to authenticate against that location.

31

O Repositrio

Offer browsing with unencrypted authentication (without SSL) too. Strangely IE doesn't have any problems with authenticating if the connection is not secured with SSL. In the SSL "standard" setup there's often the following statement in Apache's virtual SSL host:

SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 There are (were?) good reasons for this configuration, see http://www.modssl.org/docs/2.8/ ssl_faq.html#ToC49 But if you want NTLM authentication you have to use keepalive. If You uncomment the whole SetEnvIf you should be able to authenticate IE with windows authentication over SSL against the Apache on Win32 with included mod_auth_sspi.

Forcing SSL access


When you've set up SSL to make your repository more secure, you might want to disable the normal access via non-SSL (http) and only allow https access. To do this, you have to add another directive to the Subversion <Location> block: SSLRequireSSL. An example <Location> block would look like this:

<Location /svn> DAV svn SVNParentPath D:\SVN SSLRequireSSL AuthType Basic AuthName "Subversion repositories" AuthUserFile passwd #AuthzSVNAccessFile svnaccessfile Require valid-user </Location>

3.7.10. Using client certificates with virtual SSL hosts


Sent to the TortoiseSVN mailing list by Nigel Green. Thanks! In some server configurations you may need to setup a single server containing 2 virtual SSL hosts: The first one for public web access, with no requirement for a client certificate. The second one to be secure with a required client certificate, running a Subversion server. Adding an SSLVerifyClient Optional directive to the per-server section of the Apache configuration (i.e. outside of any VirtualHost and Directory blocks) forces Apache to request a client Certificate in the initial SSL handshake. Due to a bug in mod_ssl it is essential that the certificate is requested at this point as it does not work if the SSL connection is re-negotiated. The solution is to add the following directive to the virtual host directory that you want to lock down for Subversion:

SSLRequire %{SSL_CLIENT_VERIFY} eq "SUCCESS" This directive grants access to the directory only if a client certificate was received and verified successfully. To summarise, the relevant lines of the Apache configuration are:

32

O Repositrio

SSLVerifyClient Optional ### Virtual host configuration for the PUBLIC host ### (not requiring a certificate) <VirtualHost 127.0.0.1:443> <Directory "pathtopublicfileroot"> </Directory> </VirtualHost> ### Virtual host configuration for SUBVERSION ### (requiring a client certificate) <VirtualHost 127.0.0.1:443> <Directory "subversion host root path"> SSLRequire %{SSL_CLIENT_VERIFY} eq "SUCCESS" </Directory> <Location /svn> DAV svn SVNParentPath /pathtorepository </Location> </VirtualHost>

33

Captulo 4. Daily Use Guide


Este documento descreve a utilizao diria do cliente TortoiseSVN. No uma introduo aos sistemas de controlo de verses nem uma introduo ao Subversion (SVN), mais um local a que podes recorrer quando tens uma ideia do que pretendes mas no te lembras como o fazer. Se necessitas de uma introduo ao controlo de verses com o Subversion, ento ns recomendamos a leitura do fantstico livro: Version Control with Subversion [http://svnbook.red-bean.com/]. Este documento tambm estar continuamente em actualizao, tal como o Tortoise e o Subversion. Se encontrares algumas falhas, relata-os por favor s mailing lists para que possamos actualizar a documentao. Alguns dos screenshots no Guia de Uso Dirio (GUD) podero no reflectir a verso corrente do software. Perdoem-nos por esse facto, pois estamos a trabalhar no TortoiseSVN no nossos tempos livres. De modo a conseguir o mximo proveito do Guia de Uso Dirio: Devers ter o TortoiseSVN j instalado. Devers estar familiarizado com os sistemas de controlo de verses. Devers conhecer os fundamentos do Subversion. Devers ter o servidor configurado e/ou ter acesso a um repositrio do Subversion.

4.1. Comeando
4.1.1. Sobreposio de cones

Figura 4.1. O explorador mostrando os cones sobrepostos


Uma das funcionalidades mais visveis do TortoiseSVN so os cones sobrepostos que aparecem nos ficheiros na tua cpia de trabalho. Estes do-te uma vista geral dos ficheiros que foram modificados. Consultar Seco 4.7.1, Sobreposio de cones para saber mais sobre o que cada cone sobreposto representa.

4.1.2. Menus de Contexto

34

Daily Use Guide

Figura 4.2. Menu de Contexto de uma pasta sob controlo de verses.


Todos os comandos do TortoiseSVN so invocados a partir do menu de contexto no explorador do Windows. A maioria esto directamente visveis quando clicas com o boto direito numa pasta ou ficheiro. A lista de comandos disponveis dependem do caso de se tratar de uma pasta ou um ficheiro, ou se o ficheiro pai se encontra sob controlo de verses, ou no. Podes tambm ver o menu do TortoiseSVN como uma parte do menu ficheiro do Explorador.

Dica
Alguns comandos que so utilizados muito raramente, esto disponiveis apenas no menu de contexto extendido. Para mostrar o menu de contexto extendido, manter premida a tecla Shift enquanto clicas com o boto direito do rato. Em alguns casos vers vrias entradas TortoiseSVN, o que no representa um bug!

35

Daily Use Guide

Figura 4.3. Explorer file menu for a shortcut in a versioned folder


Neste exemplo est um atalho no versionado dentro de uma pasta versionada, e no menu ficheiro do Explorador esto trs entradas para o TortoiseSVN. Uma para a pasta, outra para o atalho em si e a terceira para o objecto para o qual o atalho aponta. Para ajudar a distinguir entre eles, os cones tm um indicador no canto inferior direito, para distinguir se a entrada de menu para um ficheiro, pasta ou atalho para mltiplos itens seleccionados. Se usas o Windows 2000 vers que os menus de contexto sero mostrados como texto simples, sem os menus de cones mostrados acima. Estamos conscientes de que em verses anteriores isto estava a funcionar, mas a Microsoft alterou a forma como os seus handlers de cones funcionam no Vista, forando-nos a utilizar um mtodo diferente de visualizao que infelizmente j no funcionam para o Windows 2000.

4.1.3. Arrastar e Largar

36

Daily Use Guide

Figura 4.4. Menu arrastar com o boto direito para uma pasta sob controlo de verses.
Outros comandos esto disponveis como opes de arrasto quando arrastas com o boto direito ficheiros ou pastas para uma nova localizao dentro da cpia de trabalho, ou quando arrastas com o boto direito um ficheiro no versionado ou uma pasta para outra pasta sob o controlo de verses.

4.1.4. Atalhos comuns


Algumas operaes comuns tm atalhos no Windows, mas no aparecem em botes ou menus. Se no consegues descobrir como fazer alguma coisa bvia, como refrescar uma vista, v aqui. F1 Ajuda, claro. F5 Refrescar a vista corrente. Esta provavelmente o comando de tecla nica mais til. Por exemplo ... No Explorador, os cones sobrepostos da tua cpia de trabalho sero actualizados (refrescados). Na caixa de dilogo submeter, a cpia de trabalho ser reanalisada de modo a verificar o que precisa de ser submetido. Na caixa de dilogo Mensagens de Registo, o repositrio ser contactado de novo para verificar as alteraes mais recentes. Ctrl-A Seleccionar todos. Poder ser utilizado em caso de receberes uma mensagem de erro quiseres copiar e colar para um email. Usa Ctrl-A para seleccionar a mensagem de erro e... Ctrl-C ... Copiar o texto seleccionado.

4.1.5. Autenticao
Se o repositrio a que tentas aceder est protegido por palavra-passe, uma caixa de dilogo de autenticao ir surgir.

37

Daily Use Guide

Figura 4.5. Caixa de dilogo de autenticao


Introduzir o teu nome de utilizador e palavra-passe. A caixa de verificao ir fazer com que o TortoiseSVN guarde as credenciais na pasta por defeito do Subversion: %APPDATA%\Subversion\auth em trs subpastas: svn.simple contains credentials for basic authentication (username/password). svn.ssl.server contm os certificados SSL de servidor. svn.username contm as credenciais para autenticao apenas por utilizador (sem necessidade de palavra-passe). Se quiseres limpar a cache de autenticao para todos os servidores, poders faze-lo a partir da pgina Saved Data da caixa de dilogo de definies do TortoiseSVN. Esse boto ir limpar todos os dados de autenticao guardados nas pastas auth do Subversion, tal como quaisquer dados de autenticao guardados no registo por verses anteriores do TortoiseSVN. Ver Seco 4.30.6, Preferncias de Dados Guardados. Algumas pessoas gostam que os dados de autenticao sejam apagados quando terminam a sesso no Windows, ou quando desligam o computador. A maneira de obter isso atravs do uso de um script que apague a pasta %APPDATA%\Subversion\auth, ou seja

@echo off rmdir /s /q "%APPDATA%\Subversion\auth" Poders obter uma descrio de como instalar tal script em windows-help-central.com [http://www.windows-helpcentral.com/windows-shutdown-script.html]. Para mais informaes em como configurar o teu servidor em autenticao e controlo de acessos, consulta Seco 3.5, Accessing the Repository

4.1.6. Maxiizando Janelas


Muitas das caixas de dilogos do TortoiseSVN tm muita informao para visualizar, pelo que normalmente til maximizar s a altura ou largura, em vez de maximizar para preencher o ecran. Como convenincia existem atalhos para este caso no boto Maximizar. Utilizar o boto do meio do rato para maximizar verticalmente e o do direito do rato para maximizar horizontalmente

4.2. Importando Dados Para Um Repositrio


4.2.1. Importar
If you are importing into an existing repository which already contains some projects, then the repository structure will already have been decided. If are importing data into a new repository then it is worth taking the time to think about how it will be organised. Read Seco 3.1.5, Repository Layout for further advice.

38

Daily Use Guide

Esta seco descreve o comando import do Subversion, que desenhado para importar uma hierarquia de pastas para um repositrio de uma vez s. Apesar de executar o trabalho, possui no entanto algumas limitaes: No existe modo de seleccionar ficheiros e pastas a incluir, tal como utilizar as configuraes do padro global para ignorar arquivos. A pasta importada no se torna uma cpia de trabalho. Ters de efectuar um SVN exportar para copiar os ficheiros de volta do servidor. fcil importar a pasta de nvel errado para o repositrio. Por essas razes recomendamos que no use em definitivo o comando import, mas antes, siga o mtodo de dois passos descrito em Seco 4.2.2, Importar no local. Mas como ests aqui, eis como funciona o import bsico... Antes de importares o teu projecto para o repositrio devers: 1. Remover todos os ficheiros que no so precisos para construir o projecto (ficheiros temporrios, ficheiros gerados pelo compilador, por exemplo, *.obj, binrios compilados, ...) 2. Organizar os ficheiros em pastas e subpastas. Apesar de ser possvel renomear/remover os ficheiros mais tarde, altamente recomendado estruturar correctamente o teu projecto antes de o importar! Agora seleccionar a pasta de topo da estrutura de pastas do teu projecto no windows explorer e, clica c/ o boto direito para abrir o menu de contexto. Selecciona o comando TortoiseSVN Importar... que mostrar a caixa de dilogo:

Figura 4.6. Caixa de dilogo Importar


Nesta caixa de dilogo ters de introduzir o URL da localizao do repositrio, no qual queres importar o teu projecto. importante ter a noo que a pasta local, que ests a importar, no aparecer ela prpria no repositrio, s o seu contedo. Por exemplo, se tens uma estrutura:

C:\Projects\Widget\source C:\Projects\Widget\doc C:\Projects\Widget\images

39

Daily Use Guide

e importas C:\Projects\Widget em http://mydomain.com/svn/trunk, ento poders ter a supresa de descobrir que as tuas subpastas vo direitas para trunk em vez de estarem na subpasta Widget. Ters de especificar a subpasta como parte do URL, http://mydomain.com/svn/trunk/Widget-X. De notar que o comando importar ir criar as subpastas automaticamente no repositrio, caso elas no existam. A mensagem de importar utilizada como mensagem de registo. Por defeito, ficheiros e pastas que correspondem aos padres globais para ignorar arquivos no so importados. Para substituir este comportamento, poders usar a caixa de verificao Incluir arquivos ignorados. Consultar em Seco 4.30.1, Preferncias Gerais, para mais informaes em como introduzir um padro de arquivos a ignorar. Assim que premires OK TortoiseSVN importa a arvore de pastas completa, ncluindo todos ficheiros, para o repositrio. O projecto est agora armazenado, sob controlo de verses, no repositrio. Note-se que a pasta que importaste NO est sob controlo de verses. Para obter uma cpia de trabalhocom controle de verses, necessitars de efectuar um SVN Exportar da verso que acabaste de importar. Ou l, para descobrir como importar uma pasta no local.

4.2.2. Importar no local


Assumindo que j tens um repositrio e queres adicionar uma pasta sua estrutura, segue estes passos: 1. Usa o navegador de repositrio para criar uma nova pasta de projecto, directamente no repositrio. 2. SVN exporta a nova pasta acima da pasta que queres importar. Irs receber um aviso que a pasta local no est vazia. Agora tens uma pasta de topo versionada com contedo no versionado. 3. Usa TortoiseSVN Adicionarmenuitem> nesta pasta versionada para adicionar algum ou todo o seu contesvn:ignore em pastas e fazer qualquer outra alteraSubmete a pasta de topo,e ter

4.2.3. Ficheiros Especiais


s vezes necessrio ter um ficheiro sob o controlo de verses que contm dados especficos, isto , tens um ficheiro que cada desenvolvedor/utilizador necessita modificar para satisfazer o seu/sua configurao. Mas o versionamento de tal ficheiro difcil porque, cada utilizador iria, a todo o momento, submeter as suas alteraes ao repositrio. Em alguns casos sugerimos o uso de ficheiros template. Cria um ficheiro que contm os dados que os teus desenvolvedores precisam, adiciona este ficheiro ao controlo de verses e deixa os desenvolvedores exportar este ficheiro. Ento, cada desenvolvedor tem que fazer uma cpia desse ficheiro e renomear essa cpia. Aps isto, modificar a cpia j no um problema. Como um exemplo, podes olhar para o script de construo do TortoiseSVN. Ele chama um ficheiro chamado TortoiseVars.bat que no existe no repositrio, s o ficheiro TortoiseVars.tmpl. O TortoiseVars.tmpl um ficheiro template que cada desenvolvedor tem de criar uma cpia de, e renome-lo para TortoiseVars.bat. No interior desse ficheiro, adicionmos comentrios para que os utilizadores vejam quais as linhas que tm de editar e mudar de acordo com a sua configurao, de forma a faze-la funcionar. Ento, para no perturbar os utilizadores, ns adicionmos tambm o ficheiro TortoiseVars.bat lista de arquivos a ignorar do sua pasta me, i.e colocmos esse ficheiro na propriedade svn:ignore. Deste modo no aparecer como ficheiro no versionado a cada submisso.

4.3. SVN Exportar Para Uma Cpia de Trabalho


Para obter uma cpia de trabalho necessitas de efectuar primeiro um SVN Exportar de um repositrio. Seleccionar uma pasta no explorador do windows onde queres colocar a tua cpia de trabalho. Clicar com o boto direito para aparecer o menu de contexto, e selecciona o comando TortoiseSVN SVN Exportar..., que mostrar a seguinte caixa de dilogo:

40

Daily Use Guide

Figura 4.7. The Checkout dialog


Se introduzires um nome de pasta que ainda no existe, uma pasta com esse nome ser criada.

4.3.1. Profundidade do Checkout


Podes escolher a profundidade que queres SVN Exportar, o que te permite especificar a profundidaded da recursividade nas pastas filho. Se quiseres apenas algumas seces de uma grande rvore, podes fazer SVN Exportar apenas da pasta de topo e depois actualizar recursivamente pastas seleccionadas. Totalmente recursiva Efectuar checkout a rvore inteira, incluindo todas as pastas filho e subpastas. filhos directos, incluindo pastas Efectuar checkout a pasta especficada, incluindo todos os ficheiros e pastas filho, mas no povoar as pastas filho. S ficheiros filho Efectuar checkout a pasta especficada, incluindo todos os ficheiros mas no efectuar checkout qualquer pasta filho. S este item Efectuar checkout s a pasta. No povoa-la com ficheiros ou pastas filho. Cpia de trabalho Reter a profundidade especificada na cpia de trabalho. Esta opo no usada na caixa de dilogo do SVN exportar, mas a opo por defeito para todas as outras caixas de dilogo que tm a configurao de profundidade. Excluir Usado para reduzir a cpia de trabalho, depois de a pasta j ter sido povoada. Esta opo s est disponvel na caixa de dilogo Actualizar para a reviso. Se SVN exportares para uma cpia de trabalho parcial (i.e, escolhendo outra opo para alm da totalmente recursiva relativamente profundidade de exportao), poders resgatar subpastas adicionais, utilizando o navegador do repositrio (Seco 4.24, O Navegador de Repositrio) ou a caixa de dilogo verificar modificaes (Seco 4.7.3, Estado Remoto e Local).

41

Daily Use Guide

No navegador de repositrio, clicar com o boto direito na pasta SVN exportada e usar o TortoiseSVN Navegador de Repositrio para mostrar o navegador de repositrio. Seleccionar a subpasta que gostarias de adicionar tua cpia de trabalho e utilizar, Context menu Actualizar item para reviso.... Esse menu s ser visvel, se o item seleccionado ainda no existir na tua cpia de trabalho mas o item pai j exista. Na caixa de dilogo verificar alteraes, clicar primeiro no boto Verificar repositrio. A caixa de dilogo mostrar todos os ficheiros e pastas que esto no repositrio, mas no foram exportadas como, adicionada remotamente. Clicar com o boto direito na pasta(s) que gostarias de adicionar tua cpia de trabalho e, usa Menu de contexto Actualizar. Esta funcionalidade muito til quando s queres SVN exportar partes de uma rvore grande, mas desejas a convenincia de actualizar uma s cpia de trabalho. Supem que tens uma grande rvore rvore que tem as subpastas Project01 at Project99, e s queres SVN exportar Project03, Project25 e Project76/SubProj. Utiliza estes passos: 1. SVN exportar a pasta pai com a profundidade S este item. Agora tens uma pasta de topo vazia. 2. Seleccionar a nova pasta e usar TortoiseSVN Navegador de repositrio para visualizar o contedo do repositrio. 3. Clicar com o boto direito no Project03 e Menu contexto Actualizar item para reviso.... Mantm as configuraes por defeito e clica em OK. Agora tens essa pasta totalmente povoada. Repetir o mesmo processo para o Project25. 4. Navegar para o Project76/SubProj e fazer o mesmo. Desta vez verifica que a pasta Project76 no tem contedo excepo do SubProj, que por s est totalmente povoada. O Subversion criou as pastas intermedirias por ti, mas sem as povoar.

Modificando a profundidade da cpia de trabalho


Uma vez que tenhas SVN exportado uma cpia de trabalho, com uma profundidade particular, poders modificar a mesma mais tarde para obter maior ou menor contedo utilizando Context menu Actualizar item para reviso....

Usando um servidor mais antigo


Servidores anteriores verso 1.5, no compreendem o pedido de profundidade da cpia de trabalho no lidando com eficincia com os pedidos. O comando continuar a funcionar, mas um servidor antigo poder enviar todos os dados, deixando o cliente filtrar o que no precisa o que poder gerar muito trfico de rede. Se possvel devers actualizar o teu servidor para a verso 1.5. Se o projecto contiver referncias a projectos externos, que no pretendas SVN exportar ao mesmo tempo, usa a caixa de verificao Omitir externos

Importante
Se Omitir externos est verificada, ou se desejas aumentar o valor de profundidade, tens de efectuar actualizaes cpia de trabalho utilizando TortoiseSVN Actualizar para reviso... em vez de TortoiseSVN Actualizar. A actualizao padro ir incluir todos os externos e manter a profundidade existente. recomendado que SVN exportes s at parcela trunk da rvore de pastas. Se especificares o caminho pai da arvore de pastas no URL poders acabar com um disco rgido cheiro, visto que, ters uma cpia inteira da rvore do repositrio inclindo cada ramo e etiqueta do teu projecto!

42

Daily Use Guide

Exportando
Por vezes querers criar uma cpia local sem nenhumas das pastas .svn, i.e. criar uma tarball zipada do teu cdigo fonte. L Seco 4.26, Exportar uma Cpia de Trabalho do Subversion para descobrires como o fazer.

4.4. Submetendo as tuas alteraes para o Repositrio


Enviar as alteraes que fizeste, na tua cpia de trabalho, conhecida como submeter as alteraes. Mas antes de as submeteres, tens de ter a certeza que a tua cpia de trabalho se encontra actualizada. Poders usar directamente TortoiseSVN Actualizar ou usar primeiro TortoiseSVN Verificar alteraes, para ver que ficheiros foram alterados localmente ou no servidor.

4.4.1. A Caixa de Dilogo Submeter


Se a tua cpia de trabalho se encontra actualizada e no existem conflitos, ento ests em condies para submeter as tuas alteraes. Seleccionar os ficheiros e/ou pastas que queres submeter e, TortoiseSVN Submeter....

Figura 4.8. A Caixa de Dilogo Submeter

43

Daily Use Guide

A caixa de dilogo submeter mostra-te cada ficheiro alterado, incluindo os adicionados, apagados e no versionados. Se no queres que um ficheiro alterado seja submetido, limpa a caixa de verificao desse ficheiro. Se quiseres adicionar um ficheiro no versionado, ento verifica esse ficheiro, para o adicionar submisso. Itens que foram comutados para um repositrio diferente so tambm indicados com o uso do marcador (s). Poders ter comutado algo enquanto trabalhavas num ramo, e esquecido de comutar de novo para o trunk. Isto um sinal de aviso!

Submeter ficheiros ou pastas?


Quando submetes ficheiros, a caixa de dilogo de submeter mostrar s os ficheiros seleccionados. Quando submetes uma pasta, a caixa de dilogo submeter ir seleccionar os ficheiros alterados automaticamente. Se te esqueceres de um novo ficheiro criado ao submeter a pasta, ele ser encontrado. Submetendo a pasta no significa que todos os ficheiros sero marcados como alterados; Apenas significa que ser feito mais trabalho por ti, facilitando-te a vida. Se alteraste ficheiros que foram includos a partir de um repositrio diferente, usando svn:externals, essas alteraes no podero ser includas na mesma submisso atmica. Um smbolo de aviso, por baixo do ficheiro, dir-te- se isto aconteceu. Uma etiqueta de dica explicar que esses ficheiros externos tm de ser submetidos separadamente.

Muitos ficheiro no versionados na caixa de submisso


Se sentires que a caixa de dilogo de submisso mostra muitos ficheiros no versionados (e.g. gerados pelo compilador ou backups do editor), existem vrias maneiras para lidar com esta situao. Poders: Adicionar o ficheiro (ou uma extenso de carcter de substituio) lista de ficheiros a excluir, na pgina de configuraes. Isto ir afectar todas as cpias de trabalho que tens. Adicionar o ficheiro lista svn:ignore usando TortoiseSVN Apaga e adiciona lista de ignorados. Isto s afectar a pasta onde foi alterada a propriedade svn:ignore. Usando a Caixa de Dilogo de Propriedades SVN, poders alterar a propriedade svn:ignore para a pasta. Ler Seco 4.13, Ignorando Ficheiros E Pastas para mais informao. O Duplo clique na caixa de dilogo submeter, em qualquer ficheiro alterado, ir lanar a ferramenta externa diff para mostrar as tuas alteraes. O menu de contexto ir dar-te mais opes, como pode ser visto no screenshot. Poders tambm arrastar ficheiros daqui para outra aplicao, como um editor de texto ou um IDE. Poders seleccionar ou desseleccionar items clicando na caixa de verificao esquerda do item. Para pastas poders usar Shift-Seleccionar para tornar essa aco recursiva. As colunas mostradas no painel de fundo so customizveis. Se clicares com o boto direito em qualquer cabealho de coluna vers um menu de contexto, que te permitir seleccionar quais as colunas que sero mostradas. Poders tambm alterar a largura da coluna utilizando um indicador de arrasto, que aparecer quando moveres o rato sobre os limites da coluna. Estas customizaes so conservadas para que as vejas os mesmos cabealhos da prxima vez. Por defeito ao submeteres as tuas alteraes, so libertados automaticamente quaisquer bloqueios que tiveres sobre ficheiros aps o sucesso da submisso. Se desejares mater esses bloqueios tem a certeza que a caixa de verificao Manter bloqueios. Por defeito o estado dessa caixa de verificao retirada a partir da opo no_unlock, no ficheiro de configurao do Subversion. Ler Seco 4.30.1, Preferncias Gerais para mais informaes em como editar o ficheiro de configurao do Subversion.

Arrastar e Largar
Podes arrastar ficheiros de qualquer provenincia para a caixa de dilogo Submeter desde que, as cpias de trabalho estejam exportadas a partir do mesmo repositrio. Por exemplo, tu podes ter uma

44

Daily Use Guide

gigantesca cpia de trabalho, com vrias janelas de explorador abertas para visualizar distantes pastas na hierarquia. Se desejas evitar submeter a partir da pasta de topo (com uma pesquisa lenta da pasta em procura por alteraes), podes abrir a caixa de dilogo de submeter para uma pasta e arrastar itens de outras janelas, para os assim incluir na mesma submisso atmica. Podes arrastar, para a caixa de dilogo de submeter, ficheiros no versionados que residem na cpia de trabalho e eles sero adicionados automaticamente ao SVN.

Reparando Alteraes de Nome Externas


Por vezes, alterado o nome de alguns ficheiros fora do Subversion e, eles so mostrados na lista de ficheiros como um em falta e outro ficheiro no versionado. Para evitar perder o histrico necessitas de notificar o Subversion a cerca da ligao. Simplesmente selecciona o de nome antigo(em falta) e o de novo nome (no versionado) e para emparelhar os dois ficheiros como uma alterao de nome usa Context Menu Reparar Movimento

4.4.2. Listas de Alteraes


A caixa de dilogo de submisso suporta a funcionalidade listas de alteraes, para ajudar a agrupar ficheiros. Sabes mais acerca desta funcionalidade em Seco 4.8, Listas de Alteraes.

4.4.3. Excluir itens da lista a Submeter


Por vezes, tens ficheiros versionados que so alterados frequentemente mas que no desejas submeter. Por vezes isso indica uma falha no processo de construo - porque so estes ficheiros versionados? devias ter usado ficheiros template? Mas por vezes inevitvel. A razo clssica a mudana, pelo IDE, da marca temporal do ficheiro de projecto, de cada vez que o constris. O ficheiro de projecto tem de ser versionado pois inclui todas as configuraes de construo, mas no entanto no precisa de ser submetido s porque a sua marca temporal foi alterada. Para ajudar em casos estranhos como este, temos reservada uma lista de alteraes chamada ignore-on-commit. Qualquer ficheiro adicionado a esta lista de alteraes ser automaticamente no seleccionada na caixa de dilogo de submisso. Poders ainda submeter as alteraes mas, ters de as seleccionar manualmente na caixa de dilogo de submisso.

4.4.4. Mensagens de Registo de Submeter


Tem a certeza de, inserir uma mensagem de registo que descreve as alteraes que vais submeter. Isto ir-te- ajudar a visualizar o que aconteceu e quando, enquanto navegas atravs das mensagens de registo do projecto, numa data posterior. A mensagem pode longa ou breve, conforme o desejares; muitos projectos tm guias para o que dever ser includo, a linguagem a usar, e por vezes at um formato rgido. Podes aplicar um formato simples s tuas mensagens de registo, usando uma conveno similar usada nos emails. Para aplicar estilo ao texto usar; *text* para negrito, _text_ para sublinhado, e ^text^ para itlico.

45

Daily Use Guide

Figura 4.9. A Verificao de Sintaxe na Caixa de Dilogo Submeter


O TortoiseSVN inclui um verificador de sintaxe que te ajuda a conseguir obter mensagens de registo bem escritas. Este ir sobressair qualquer palavra mal escrita. Usa o menu de contexto para aceder s correces sugeridas. claro que ele no conhece todos os termos tcnicos que utilizas, podendo aparecer como erros termos correctamente escritos. No te preocupes, poders os adicionar ao teu dicionrio pessoal, usando o menu de contexto. A janela de mensagem de registo tambm inclui a funcionalidade de auto concluso de nomes de ficheiros e funes. Esta funcionalidade usa expresses regulares para extrair os nomes de funes e classes, a partir dos ficheiros (de texto) que ests a submeter tal como os nomes dos ficheiros em si. Se a palavra que ests a escrever condiz com qualquer entrada na lista (depois de escreveres pelo menos 3 caracteres, ou premido Ctrl +Space), uma lista de termos aparecer para te permitir seleccionar o nome completo. As expresses regulares fornecidas com o TortoiseSVN esto armazenadas na pasta bin da instalao do TortoiseSVN. Podes tambm definir as tuas prprias regexes e armazena-las em %APPDATA%\TortoiseSVN\autolist.txt. Est claro que a tua auto lista privada no ser reescrita quando actualizas a tua instalao do TortoiseSVN. Se no ests familiarizado com expresses regulares, d uma vista de olhos na introduo em http://pt.wikipedia.org/wiki/Expresso_regular [http://en.wikipedia.org/wiki/Regular_expression], e o tutorial e documentao online em http://www.regular-expressions.info/. Podes reutilizar mensagens inseridas previamente. clica apenas em Mensagens recentes para ver a lista de algumas das ltimas mensagens que inseriste, nesta cpia de trabalho. O nmero de mensagens guardadas pode ser customizvel na caixa de dilogo de configurao do TortoiseSVN.

46

Daily Use Guide

Podes limpar todas a mensagens de registo de submisso armazenadas na pgina Dados Guardados de configuraes do TortoiseSVN, ou poders limpar mensagens individuais a partir da caixa de registo Mensagens recentes usando a tecla Delete. Se queres incluir, na mensagem de registo, os caminhos seleccionados, podes usar no controlo de edio o comando Context Menu de Contexto Colar lista de nomes de arquivos. Outra maneira para inserir caminhos na mensagem de registo simplesmente, arrastar os ficheiros da lista de ficheiros para o controlo de edio.

Propriedades de Pastas Especiais


Existem vrias propriedades de pastas especiais que podem ser usadas para dar mais controlo sobre a formatao das mensagens de registo de formatao, e a lngua usada para o mdulo de verificao ortogrfico. Ler Seco 4.17, Configuraes de Projecto para mais informao.

Integrao com Ferramentas de controlo de Problemas


If you have activated the bug tracking system, you can set one or more Issues in the Bug-ID / Issue-Nr: text box. Multiple issues should be comma separated. Alternatively, if you are using regex-based bug tracking support, just add your issue references as part of the log message. Learn more in Seco 4.28, Integrao com Sistemas de identificao de Bugs/Gestores de Problemas.

4.4.5. Progresso do Submeter


Aps premir o OK, aparece a caixa de dilogo que mostra o progresso da submisso.

Figura 4.10. A caixa de dialogo de Progresso, mostrando a submisso em progresso


A caixa de dilogo de progresso usa um cdigo de cores para evidenciar as aces de submisso Azul Submetendo uma alterao. Roxo Submetendo uma nova adio. Vermelho escuro Submetendo uma substituio ou apagamento. Preto Todos os outros itens.

47

Daily Use Guide

Este o esquema de cores por defeito, mas podes alterar essas cores usando a caixa de dilogo configuraes. Ler Seco 4.30.1.4, Preferncias de cor do TortoiseSVN para mais informao.

4.5. Actualizar a Tua Cpia de Trabalho Com Alteraes de Outros

Figura 4.11. Caixa de dilogo de progresso mostrando uma actualizao finalizada.


Periodicamente, devers garantir que as alteraes feitas por outros so incorporadas na tua cpia de trabalho local. O processo de obter as alteraes do servidor para a cpia local conhecido como actualizando. Actualizao pode ser feita em ficheiros isolados, um conjunto de ficheiros seleccionados, recursivamente numa estrutura de hierarquia de pastas. Para actualizar selecciona os ficheiros e/ou pastas que desejas, clica com o boto direito e selecciona TortoiseSVN Actualizar no menu de contexto do explorador. Uma janela aparecer mostrando o progresso da actualizao, enquanto ela decorre. As alteraes feitas por outros sero fundidas com os teus ficheiros, mantendo quaisquer alteraes que tenhas feito nos mesmos. O repositrio no afectado pela actualizao. A caixa de dilogo de progresso usa um cdigo de cores para evidnciar diferentes aces de actualizao Roxo Novo item adicionado tua CT. Vermelho escuro Item redundante apagado da tua CT, ou um item em falta substitudo na tua CT. Verde Alteraes do repositrio fundidas com sucesso, com tuas alteraes locais. Vermelho brilhante Alteraes do repositrio fundidas com as alteraes locais, resultando em conflitos que necessrio resolver. Preto Item no alterado, na tua CT, actualizado com uma nova verso do repositrio. Este o esquema de cores por defeito, mas podes alterar essas cores usando a caixa de dilogo configuraes. Ler Seco 4.30.1.4, Preferncias de cor do TortoiseSVN para mais informao. Se tiveres alguns conflitos durante uma actualizao (o que pode acontecer se outros alterarem as mesmas linhas nos mesmos ficheiros que tu alteraste, e essas alteraes no condizerem), ento a caixa de dilogo mostra esses conflitos a vermelho. Podes efectuar clicar duplo clique nessas linhas para iniciar a ferramenta externa de fuso, para resolver esses conflitos. Quando a actualizao est concluda a caixa de dilogo de progresso mostra, debaixo da lista de ficheiros, o resumo do nmeros de itens actualizados, adicionados, apagados, em conflito, etc. Esta informao de sumrio pode ser copiada para o clipboard usando Ctrl+C.

48

Daily Use Guide

O comando de Actualizao padro no tem opes e apenas actualiza a tua cpia de trabalho para a reviso HEAD do repositrio, que o caso de utilizao mais comum. Se quiseres mais controlo sobre o processo de actualizao devers usar em alternativa TortoiseSVN Atualizar para reviso.... Este te permite actualizar a tua cpia de trabalho para uma reviso especfica, e no s para a mais recente. Supem que a tua cpia de trabalho est na reviso 100, mas tu queres que reflicta o estado que tinha na reviso 50 - ento simplesmente actualiza para a reviso 50. Na mesma caixa de dilogo tambm podes escolher a profundidade a que deve ser actualizada a pasta corrente. Os termos usados esto descritos em Seco 4.3.1, Profundidade do Checkout. A profundidade por defeito Cpia de trabalho, que preserva a configurao de profundidade existente. Podes tambm escolher se deves ignorar qualquer projecto externo, na actualizao (i.e. projectos referenciados usando svn:externals).

Cuidado
Se actualizas um ficheiro ou uma pasta para uma reviso especfica no devers efectuar alteraes nos mesmos. Obters mensagens de erro desactualizado quando tentares submete-las! Se quiseres desfazer as alteraes efectuadas num ficheiro ou comear de novo a partir de uma reviso anterior, podes rebobinar para uma reviso anterior a partir da caixa de dilogo de registo de revises. D uma vista de olhos em Seco B.4, Reverter (Anular) revises no repositrio para mais instrues e mtodos alternativos. Atualizar para reviso pode ocasionalmente ser til para ver qual o aspecto que tinha o teu projecto num ponto anterior da sua histria. Mas na generalidade, actualizar ficheiros individuais para uma verso anterior no uma boa ideia, pelo que deixa a tua cpia de trabalho num estado inconsistente. Se o ficheiro que ests a actualizar mudou de nome, poders constatar que o mesmo desaparece da tua cpia de trabalho porque, nenhum ficheiro com esse nome existia na reviso anterior. Deves tambm constatar que o item mostrar uma sobreposio verde normal, pelo que ser indistinguvel dos ficheiros que esto actualizados. Se queres simplesmente uma cpia local de uma verso antiga de um ficheiro melhor utilizar, a partir da caixa de dilogo do registo, o comando Menu ContextoGuardar reviso em...

Mltiplos Ficheiros/Pastas
Se seleccionares mltiplos ficheiro e pastas no explorador e ento seleccionares Actualizar, todos esses ficheiros/pastas so actualizados um por um. O TortoiseSVN garante que todos os ficheiros/pastas que so do mesmo repositrio so actualizados exactamente para a mesma reviso! Mesmo que entre essas actualizaes outra submisso ocorra.

Ficheiro Local J Existe


Por vezes quando tentas actualizar, a actualizao falha com a mensagem que diz que j existe um ficheiro local com o mesmo nome. Isto tipicamente ocorre quando o Subversion tenta SVN exportar um ficheiro versionado recentemente e, descobre que um ficheiro, no versionado, com o mesmo nome j existe na pasta de trabalho. O Subversion nunca reescreve um ficheiro no versionado pode conter algo importante em que ests a trabalhar e que por coincidncia, tem o mesmo nome que outro programador utilizou para o seu ficheiro submetido recentemente. Se obtiveres esta mensagem de erro, a soluo simplesmente renomear o ficheiro local no versionado. Aps a concluso da actualizao podes verificar se o ficheiro renomeado ainda necessrio. Se continuares a obter mensagens de erro, usa ento TortoiseSVN Verificar alteraes para listares todos os ficheiros com problemas. Desta maneira poders trat-los todos de uma vez s.

4.6. Resolvendo Conflitos


De vez quando irs obter um conflito quando actualizares/fundires os teus ficheiros a partir do repositrio, ou quando trocares a tua cpia de trabalho para um URL diferente. Existem dois tipos de conflitos:

49

Daily Use Guide

conflitos de ficheiro Um conflito de ficheiro ocorre quando dois (ou mais) programadores alteraram o mesmo punhado de linhas do ficheiro. conflitos de rvore Um conflito de rvore ocorre quando um programador move/renomeia/apaga um ficheiro ou pasta, que outro programador tambm moveu/renomeou/apagou ou apenas modificou.

4.6.1. Conflitos de Ficheiro


A file conflict occurs when two or more developers have changed the same few lines of a file. As Subversion knows nothing of your project, it leaves resolving the conflicts to the developers. Whenever a conflict is reported, you should open the file in question, and search for lines starting with the string <<<<<<<. The conflicting area is marked like this:

<<<<<<< filename your changes ======= code merged from repository >>>>>>> revision

Also, for every conflicted file Subversion places three additional files in your directory: filename.ext.mine This is the file that was theEste o teu ficheiro como existia na cpia de trabalho antes de a teres actualizado - Isto , sem marcadores de conflito. Este ficheiro tem as tuas ltimas alteraes a mais nada. filename.ext.rOLDREV Este o ficheiro que foi a reviso BASE antes de actualizares a cpia de trabalho. Isto , o ficheiro que tu SVN exportaste antes de efectuares as tuas ltimas alteraes. filename.ext.rNEWREV Este o ficheiro que o teu cliente Subversion acabou de receber do servidor, quando actualizaste a tua cpia de trabalho. Este ficheiro corresponde reviso HEAD do repositrio. Podes ento lanar uma ferramenta externa de fuso/editor de conflitos com TortoiseSVN Editar Conflitos ou podes usar qualquer outro editor para resolver o conflito manualmente. Deves decidir a aparncia do cdigo, efectuar as alteraes necessrias e guardar o ficheiro. Posteriormente executa o comando TortoiseSVN Resolvido e submete as tuas modificaes para o repositrio. Toma nota que o comando Resolvido, na realidade, no resolve o conflito. Apenas remove os ficheiros filename.ext.mine and filename.ext.r*, para te permitir submeter as tuas alteraes. Se tens conflitos com os teus ficheiros binrios, o Subversion no tenta fundir os ficheiros. O ficheiro local permanece intocvel (exactamente como o alteraste) e obtens os ficheiros filename.ext.r*. Se queres descartar as tuas alteraes e manter a verso do repositrio, usa o comando Reverter. Se queres manter a tua verso e reescrever a verso do repositrio, usa o comando Resolvido e submete a tua verso. Podes usar o comando Resolvido para ficheiros mltiplos, se clicares na pasta pai e seleccionares TortoiseSVN Resolvido... Isto ir mostrar a caixa de dilogo listando todos os ficheiros em conflito nessa pasta, e podes seleccionar quais queres marcar como resolvidos.

4.6.2. Conflitos de rvore


Um conflito de rvore ocorre quando, um programador moveu/renomeou/apagou um ficheiro ou pasta que outro programador tambm moveu/renomeou/apagou ou apenas modificou. Existem muitas e variadas situaes que podem gerar um conflito de rvore, e todas elas requerem diferentes passos para a sua resoluo.

50

Daily Use Guide

Quando no Subversion, um ficheiro apagado localmente esse ficheiro tambm apagado no sistema de ficheiros local e, mesmo que este seja parte de um conflito de rvore no poder mostrar um cone de conflito sobreposto, e tu no poders clicar nele com o boto direito do rato para resolver o conflito. Usa ento a caixa de dilogo Verificar alteraes para aceder opo Editar conflito. O TortoiseSVN pode ajudar a encontrar o stio correcto para fundir as alteraes mas, poder ser necessrio trabalho adicional para resolver os conflitos. Lembra-te que aps a actualizao a reviso BASE de trabalho ir conter sempre a reviso de cada item como estava no repositrio, na altura da actualizao. Se reverteres uma alterao aps a actualizao esta voltar ao estado do repositrio e no, verso que estava quando comeaste a efectuar as tuas alteraes locais.

4.6.2.1. Apagar localmente, editar aps actualizar


1. O programador A modifica Foo.c e submete-o para o repositrio 2. O programador B simultaneamente move na sua cpia de trabalho Foo.c para Bar.c, ou simplesmente apagou Foo.c, ou a sua pasta pai. Uma actualizao na cpia de trabalho do programador B resulta num conflito de rvore: Foo.c foi apagado da cpia de trabalho, mas foi marcado como um conflito de rvore. Se o conflito resultou de, uma mudana de nome em vez de um apagar ento, o Bar.c marcado como adicionado mas no contm as modificaes do programador A. O programador B tem de escolher se vai manter as alteraes do Programador A. No caso de uma mudana no nome do ficheiro, ele pode fundir as alteraes com o Foo.c no ficheiro renomeado Bar.c. Para simples apagamentos de ficheiros e pastas, ele pode escolher manter o item com as alteraes do Programador A e descartar o item apagado. Ou, ao colocar o conflito como resolvido, sem efectuar mais nenhuma aco, descarta efectivamente as alteraes do Programador A. A caixa de dilogo de edio de conflitos oferece-se para fundir as alteraes, se conseguir encontrar o ficheiro original do renomeado Bar.c. Dependendo onde a actualizao foi invocada, poder no ser possvel encontrar o ficheiro fonte.

4.6.2.2. Edio local, apagar aps actualizar


1. O Programador A move Foo.c para Bar.c e submete-o para o repositrio. 2. O Programador B modifica na sua cpia de trabalho Foo.c. Ou em caso de mover uma pasta... 1. O Programador A move a pasta pai FooFolder para BarFolder e submete-o para o repositrio. 2. O Programador B modifica na sua cpia de trabalho Foo.c. Uma actualizao da cpia de trabalho pelo programador B, resulta num conflito de rvore. Para um conflito de ficheiro simples: Bar.c adicionado cpia de trabalho como um ficheiro normal. Foo.c marcado como adicionado (com histria) e adquire um conflito de rvore. Para um conflito de pasta: BarFolder adicionado cpia de trabalho como uma pasta normal. FooFolder marcado como adicionado (com histria) e adquire um conflito de rvore.

51

Daily Use Guide

Foo.c marcado como modificado. O programador B agora tem de decidir se quer manter a reorganizao do programador A e fundir as suas alteraes no ficheiro correspondente na nova estrutura, ou simplesmente reverter as alteraes de A e manter o ficheiro local. Para fundir as suas alteraes locais com a remodelao, o Programador B deve em primeiro lugar descobrir o ficheiro para o qual Foo.c foi renomeado/movido no repositrio. Isso pode ser feito usando a caixa de dilogo de registo. As alteraes devem ento ser fundidas manualmente j que no existe actualmente nenhum mtodo para automatizar ou mesmo simplificar este processo. Uma vez que as alteraes tenham sido portadas, o caminho em conflito fica redundante e pode ser apagado. Neste caso usa o boto Remover na caixa de dilogo de edio de conflito para efectuar a limpeza e, marcar o conflito como resolvido. Se o programador B entende que as alteraes de A esto erradas, ento deve escolher o boto Manter na caixa de dilogo de conflito. Isso marca o ficheiro/pasta em conflito como resolvido, mas as alteraes de A necessitam de ser removidas mo. Mais uma vez a caixa de dilogo de registo ir ajudar a verificar o que foi movido.

4.6.2.3. Apagar localmente, apagar aps actualizar


1. O Programador A move Foo.c para Bar.c e submete-o para o repositrio. 2. O Programador B move Foo.c para Bix.c Uma actualizao na cpia de trabalho do programador B resulta num conflito de rvore: Bix.c marcado como adicionado com histria. Bar.c adicionado cpia de trabalho com o estado 'normal'. Foo.c marcado como apagado e adquire um conflito de rvore. Para resolver este conflito, o Programador B tem de descobrir para que nome o ficheiro em conflito Foo.c renomeado/movido no repositrio. Isso pode ser feito recorrendo caixa de dilogo de registo. Ento o programador B tem de decidir qual o novo nome de ficheiro do ficheiro Foo.c deve manter - o criado pelo programador A ou o nome criado pelo prprio. Depois de o programador B ter resolvido o conflito manualmente, o conflito de rvore tem de ser marcado como resolvido, com o boto na caixa de dilogo editor de conflito.

4.6.2.4. Desaparecido localmente, editar aps fuso


1. O Programador A trabalhando no trunk modifica ento Foo.c e submete-o para o repositrio. 2. O Programador B trabalhando no ramo move Foo.c para Bar.c e submete-o para o repositrio. A fuso das alteraes no trunk do programador A para o ramo, da cpia de trabalho, do programador B resulta num conflito de rvore: Bar.c j est na cpia de trabalho com o estado 'normal'. Foo.c marcado como desparecido, com um conflito de rvore. Para resolver este conflito, o Programador B tem de marcar o ficheiro como resolvido na caixa de dilogo do editor de conflito, que ir remove-lo da lista de conflitos. Ele ento tem de decidir se copia o ficheiro desaparecido Foo.c do repositrio para a cpia de trabalho, se funde as alteraes do Programador A no ficheiro Foo.c no renomeado Bar.c ou se ignora as alteraes ao marcar o conflito como resolvido e no fazendo mais nada. Tem em ateno que se copias o ficheiro desaparecido do repositrio e depois marcas como resolvido, a tua copia ser removida novamente. Tens de resolver primeiro o conflito.

52

Daily Use Guide

4.6.2.5. Edio local, apagar aps fuso


1. O Programador A trabalhando no trunk move o Foo.c para Bar.c e submete-o para o repositrio 2. O Programador B trabalhando no ramo modifica o Foo.c e submete-o para o repositrio. Existe um caso equivalente para o movimento de pastas, mas no ainda detectado no Subversion 1.6 ... 1. O Programador A trabalhando no trunk move a pasta pai FooFolder para BarFolder e submete-o para o repositrio. 2. O Programador B trabalhando num ramo modifica Foo.c na sua cpia de trabalho A fuso das alteraes no trunk do programador A para o ramo, da cpia de trabalho, do programador B resulta num conflito de rvore: Bar.c marcado como adicionado. Foo.c marcado como modificado com um conflito de rvore. O programador B agora tem de decidir se quer manter a reorganizao do programador A e fundir as suas alteraes no ficheiro correspondente na nova estrutura, ou simplesmente reverter as alteraes de A e manter o ficheiro local. Para fundir as suas alteraes locais com a remodelao, o Programador B deve em primeiro lugar descobrir para que ficheiro o ficheiro em conflito Foo.c foi renomeado/movido no repositrio. Isto pode ser feito usando a caixa de dilogo do registo para a fonte da fuso. O editor de conflito apenas mostra o registo para a cpia de trabalho e no conhece qual o caminho que foi utilizado na fuso, pelo que ters de o descobrir por ti. As alteraes tm ento ser fundidas mo, visto no existir nenhuma maneira de automatizar ou mesmo simplificar este processo. Uma vez que as alteraes tiverem sido portadas, o caminho em conflito ser redundante e pode ser apagado. Neste caso usa o boto Remover na caixa de dilogo editor de conflito, para limpar e marcar o conflito como resolvido. Se o Programador B decide que as alteraes do A esto erradas, dever ento escolher o boto Manter na caixa de dilogo editor de conflito. Isto marca o ficheiro/pasta em conflito como resolvido, mas as alteraes do Programador A necessitam de ser removidas mo. De novo a caixa de dilogo registo, para a fonte da fuso ajuda a encontrar o rasto ao que foi movido.

4.6.2.6. Apagamento local, apagar aps fuso


1. O Programador A trabalhando no trunk move o Foo.c para Bar.c e submete-o para o repositrio 2. O Programador B trabalhando num ramo move o Foo.c para Bix.c e submete-o para o repositrio A fuso das alteraes no trunk do programador A para o ramo, da cpia de trabalho, do programador B resulta num conflito de rvore: Bix.c marcado com o estado normal (no modificado). Bar.c marcado como adicionado com histria. Foo.c marcado como desaparecido e adquire um conflito de rvore. Para resolver este conflito o Programador B tem de descobrir para que ficheiro o ficheiro em conflito Foo.c foi renomeado/movido no repositrio. Isto pode ser feito usando a caixa de dilogo registo na fonte da fuso. O editor de conflito apenas mostra o registo para a cpia de trabalho, e no tem conhecimento qual o caminho que foi usado na fuso, ento tens de descobri-lo por ti. Ento o programador B tem de decidir qual o novo nome de ficheiro do ficheiro Foo.c deve manter - o criado pelo programador A ou o nome criado pelo prprio. Depois de o programador B ter resolvido o conflito manualmente, o conflito de rvore tem de ser marcado como resolvido, com o boto na caixa de dilogo editor de conflito.

53

Daily Use Guide

4.7. Obter informao de Estado


Enquanto ests a trabalhar na tua cpia de trabalho necessitas com frequncia de saber que ficheiros alteraste/adicionastes/removeste, ou mesmo que ficheiros foram alterados e submetidos por outros.

4.7.1. Sobreposio de cones

Figura 4.12. O explorador mostrando os cones sobrepostos


Agora que SVN exportaste uma cpia de trabalho de um repositrio Subversion, podes ver que os teus ficheiros com os cones alterados no explorador do Windows. Esta uma das razes porque o TortoiseSVN to popular. O TortoiseSVN adiciona a chamada sobreposio de cone a cada ficheiro e que se sobrepem ao cone original do mesmo. Dependendo do estado Subversion do ficheiro a sobreposio do cone ser diferente.

Uma cpia de trabalho exportada de fresco possui uma marca de verificao verde como sobreposio. Isto significa que o estado Subversion normal.

Assim que inicias a edio do ficheiro, o estado altera-se para modificado e o cone de sobreposio muda para um ponto de exclamao vermelho. Desse modo podes facilmente ver que ficheiros foram alterados desde a ltima vez que actualizaste a tua cpia de trabalho e necessitam ser submetidos.

Se durante uma actualizao ocorre um conflito o cone de sobreposio altera-se para um ponto de exclamao amarelo.

Se colocaste a propriedade svn:needs-lock num ficheiro, o Subversion marca esse ficheiro como apenas-deleitura at obteres um bloqueio nesse mesmo ficheiro. Ficheiros como esses tm essa sobreposio para indicar que tens de obter um bloqueio antes de editares esse ficheiro.

Se mantiveres um bloqueio num ficheiro e o estado Subversion normal, esta sobreposio de cone lembra-te que deves libertar o bloqueio se no o ests a usar, para permitir que outros possam submeter as suas alteraes para o ficheiro.

54

Daily Use Guide

Este cone mostra que alguns ficheiros ou pastas no interior da pasta corrente foram escalonados para serem apagados do controlo de verses ou que, um ficheiro sob o controlo de verses est desaparecido na pasta.

O sinal se soma diz-te que um ficheiro ou pasta foi escalonado para ser adicionado ao controlo de verses.

O sinal de barra diz que um ficheiro ou pasta ignorado para efeitos de controlo de verso. Esta sobreposio opcional.

Este cone mostra os ficheiros e pastas que no esto sob controle de verses, mas no foram ignorados. Esta sobreposio opcional. De facto, podes descobrir que nem todos esses cones so usados no teu sistema. Isto ocorre porque o nmero de sobreposies permitidas pelo Windows muito limitada e, se estiveres a utilizar uma verso antiga do TortoiseCVS, no existem suficientes slots para sobreposies disponveis. O TortoiseSVN tenta ser um Bom Cidado (TM) e limita o seu uso se sobreposies para tambm dar a oportunidade a outras aplicaes. Agora que existem por a mais clientes Tortoise (TortoiseCVS, TortoiseHG, ...) o limite de cones torna-se um verdadeiro problema. Para dar a volta a isto, o projecto TortoiseSVN introduziu um conjunto de cones comuns e partilhados, carregados como uma DLL, que pode ser usada por todos os clientes Tortoise. Verifica no teu fornecedor de cliente para veres se isto j foi integrado :-) Para uma descrio de como as sobreposies de cones correspondem aos estados do Subversion e outros detalhes tecnicos, l Seco F.1, Sobreposio de cones.

4.7.2. Colunas TortoiseSVN no Explorador do Windows


A mesma informao que est disponvel a partir das sobreposies dos cones (e muito mais) pode ser visualizada, como colunas adicionais, na vista de detalhes do Explorador do Windows. Simplesmente clica com o boto direito em um dos cabealhos de uma coluna, escolhe Mais... a partir do menu de contexto. Uma caixa de dilogo ir aparecer, e poders especificar as colunas e a sua ordem que sero mostradas na Vista Detalhada. Rolar para baixo at aparecer entradas a comear por SVN. Marcar as que gostarias de visualizar e fecha a caixa de dilogo pressionando OK. As colunas sero anexadas direita das que mostradas correntemente. Podes reordena-las por arrasto e largar, para que satisfaam as tuas necessidades.

Importante
As colunas adicionais no Explorador do Windows no esto disponveis no Vista, visto que a Microsoft decidiu no permitir mais esse tipo de colunas para todos os ficheiros, mas s para tipos de ficheiros especficos.

Dica
Se queres que a disposio corrente seja visualizada em todas as tuas cpias de trabalho, deves querer usa-la como a tua vista por defeito.

4.7.3. Estado Remoto e Local

55

Daily Use Guide

Figura 4.13. Verificar Modificaes


normalmente muito til conhecer que ficheiros foram alterados e tambm quais os ficheiros que foram alterados e submetidos por outros. Isto onde o comando TortoiseSVN Verificar alteraes... vem mo. Esta caixa de dilogo ir mostrar-te cada ficheiro que foi alterado de algum modo na tua cpia de trabalho, tal como qualquer ficheiro no versionado que l tiveres. Se clicares em Verificar repositrio podes ento tambm procurar por alteraes no repositrio. Desse modo podes verificar, antes de uma actualizao, se existe um possvel conflito. Podes tambm actualizar ficheiros seleccionados do repositrio, sem actualizar a pasta inteira. Por defeito o boto Verificar repositrio s procura o estado remoto com a profundidade de exportao da cpia de trabalho. Se queres ver todos os ficheiros e pastas no repositrio, mesmos aqueles que no SVN exportaste, ento tens de premir continuamente a tecla Shift enquanto clicas no boto Verificar repositrio. A caixa de dilogo usa cdigo de cores para evidenciar o estado. Azul Itens modificados localmente. Roxo Itens adicionados. Itens que foram adicionados com histria tm um sinal + na coluna Estado do texto, e uma etiqueta mostra de onde foi o item copiado. Vermelho escuro Itens apagados ou desaparecidos. Verde Itens modificados localmente e no repositrio. As alteraes sero fundidas aquando da actualizao. Vermelho brilhante Itens modificados localmente e apagados no repositrio, ou modificados no repositrio e apagados localmente. Estes iro produzir conflitos na actualizao. Preto Itens no modificados e no versionados.

56

Daily Use Guide

Este o esquema de cores por defeito, mas podes alterar essas cores usando a caixa de dilogo configuraes. Ler Seco 4.30.1.4, Preferncias de cor do TortoiseSVN para mais informao. Itens que foram comutados para um repositrio diferente so tambm indicados com o uso do marcador (s). Poders ter comutado algo enquanto trabalhavas num ramo, e esquecido de comutar de novo para o trunk. Isto um sinal de aviso! A partir do menu de contexto da caixa de dilogo podes ver uma comparao das alteraes. Marca as alteraes locais que tu fizeste usando Context Menu Comparar com a Base. Marca as alteraes no repositrio feitas por outros usando Menu Contexto Mostrar diferenas como uma comparao unificada. Podes tambm reverter alteraes em ficheiro individuais. Se apagaste um ficheiro acidentalmente, ir aparecer como Desaparecido e podes usar Reverter para o recuperar. Ficheiros no versionados e ignorados podem ser enviados daqui para o cesto de reciclagem usando Menu Contexto Remover. Se quiseres remover permanentemente os ficheiros ( ignorando o cesto de reciclagem) mantm premido a tecla Shift enquanto clicas no Remover. Se quiseres examinar um ficheiro em detalhe, podes arrasta-lo para outra aplicao como um editor de texto ou um IDE. As colunas so costumizveis. Se clicares com o boto direito em qualquer cabealho de coluna vers um menu de contexto, que te permitir seleccionar quais as colunas a mostrar. Podes tambm alterar a largura da coluna usando o manpulo de arrasto que aparece quando moves o rato sobre o limite da coluna. Estas customizaes so preservados para que vejas os mesmos cabealhos da prxima vez. Se tiveres a trabalhar ao mesmo tempo em vrias tarefas, no relacionadas, podes tambm agrupar os ficheiros em listas de alteraes. Ler Seco 4.4.2, Listas de Alteraes para mais informao. No fundo da caixa de dilogo podes ver um sumrio do intervalo de revises do repositrio em uso na tua cpia de trabalho. Essas so as revises submetidas, no as revises de actualizadas; Estas representam o intervalo de revises onde esses ficheiros foram submetidas por ltimo, e no as revises a que foram actualizadas. De notarque o intervalo de revises mostrada s se aplica aos itens mostrados, e no, totalidade da cpia de trabalho. Se queres ver essa informao para a totalidade da cpia de trabalho, deves verificar a caixa de verificao No modificado.

Dica
Se queres uma vista ampla da tua cpia de trabalho, i.e. mostrando todos os ficheiros e pastas em qualquer nvel da hierarquia de pastas, ento a caixa de dilogo Verificar alteraes a maneira mais fcil para o atingir. Verifica apenas a caixa de verificao No modificado para mostrar todos os ficheiros na tua cpia de trabalho.

Reparando Alteraes de Nome Externas


Por vezes, alterado o nome de alguns ficheiros fora do Subversion e, eles so mostrados na lista de ficheiros como um em falta e outro ficheiro no versionado. Para evitar perder o histrico necessitas de notificar o Subversion a cerca da ligao. Simplesmente selecciona o de nome antigo(em falta) e o de novo nome (no versionado) e para emparelhar os dois ficheiros como uma alterao de nome usa Context Menu Reparar Movimento

4.7.4. Vendo diferenas


Muitas vezes tu queres ver os teus ficheiros por dentro para observar o que alteraste. Podes conseguir isso ao seleccionar o ficheiro que foi alterado e, seleccionando Comparar a partir do menu de contexto do TortoiseSVN. Isso arranca o visualizador de comparaes externo, que ento ir comparar o ficheiro corrente com a cpia pura (reviso BASE), que foi armazenada depois da ltima exportao SVN ou actualizao.

57

Daily Use Guide

Dica
Mesmo quando fora da cpia de trabalho ou, quando tens multiplas verses do ficheiro presentes, podes no entanto ainda mostrar comparaes: Selecciona dois ficheiros que queres comparar no explorador (e.g. usando o Ctrl e o rato) e escolhe Comparar a partir do menu de contexto do TortoiseSVN. O ficheiro clicado por ltimo (o que tem o focus, i.e. o rectangulo picotado) ser considerado o mais recente.

4.8. Listas de Alteraes


Num mundo ideal, apenas trabalharias numa nica coisa de cada vez, e a tua cpia de trabalho contm s um conjunto de mudanas lgicas. OK, devolta realidade. Costuma acontecer que tens de trabalhar em vrias, e no relacionadas, tarefas ao mesmo tempo, e quando olhas para a caixa de dilogo de submisso, todas as alteraes esto misturadas. A funcionalidade da lista de alteraes ajuda a agrupar os ficheiros, tornando mais fcil ver o que ests a fazer. Est claro que isto s funciona se as alteraes no se sobrepuserem. Se duas tarefas diferentes afectarem o mesmo ficheiro, no existe maneira de separar as alteraes.

Importante
A funcionalidade de lista de alteraes no TortoiseSVN, est s disponvel no Windows XP e superior, visto depender the uma capacidade da consola que no est presente no Windows 2000. Desculpa, mas o Win2k realmente velho, mas por favor no faas queixas. Podes ver ver as listas de alteraes em vrios locais, mas os mais importantes so a caixa de dilogo submeter e a caixa de dilogo verificar alteraes. Vamos comear pela caixa de dilogo verificar alteraes, depois de teres trabalhado em vrias funcionalidades e muitos ficheiros. Quando primeiro abres a caixa de dilogo, todos os ficheiros alterados so listados em conjunto. Supem que queres organizar as coisas e agrupa-las de acordo com a funcionalidade. Selecciona um ou mais ficheiros e usa Context Menu Move para a lista de alteraes para adicionar um item lista de alteraes. Inicialmente no haver lista de alteraes, ento a primeira vez que fizeres esta operao, irs criar uma nova lista de alteraes. D-lhe um nome que descreva qual o objectivo do seu uso e clica OK. A caixa de dilogo ir-se- alterar para mostrar grupos de itens. Uma vez que tenhas criado uma lista de alteraes, podes arrastar e largar itens para dentro dela, a partir de outra lista de alteraes ou a partir do Explorador do Windows. Arrastando do Explorador pode ser til, pois permite-te adicionar itens lista de alteraes antes do ficheiro ser modificado. Podes fazer isso a partir da caixa de dilogo verificar-alteraes, mas apenas ao mostrar todos os ficheiros no modificados

58

Daily Use Guide

Figura 4.14. Caixa de dilogo Submeter com Listas de Alteraes


Na caixa de dilogo submeter podes ver esses mesmos ficheiros agrupados por listas de alteraes. parte de dar uma indicao visual imediata dos grupos, podes tambm usar os cabealhos dos grupos para seleccionar quais os ficheiros a submeter. No XP h um menu de contexto quando clicas com o boto direito num cabealho de grupo, que te d a escolha para marcar ou desmarcar todas as entradas de grupo. No Vista, no entanto, o menu de contexto no necessrio. Clica no cabealho de grupo para seleccionar todas as entradas, depois marca uma das entradas seleccionadas para os marcar a todos. O TortoiseSVN reserva um nome de lista de alteraes para o seu prprio uso, de nome ignore-on-commit. Esta usada para sinalizar ficheiros versionados que quase nunca queres submeter, mesmo que tenham alteraes. Esta funcionalidade descrita em Seco 4.4.3, Excluir itens da lista a Submeter. Quando submetes ficheiros pertencentes a uma lista de alteraes, deves esperar que no seja mais necessrio estar associado a uma lista. Ento por defeito, os ficheiros so removidos automaticamente ao submete-los. Se pretendes manter um ficheiro na sua lista de alteraes, usa a caixa de verificao Manter listas de alteraes no fundo da caixa de dilogo submeter.

59

Daily Use Guide

Dica
Listas de alteraes so puramente uma funcionalidade local de cliente. Criar e remover lista de alteraes no afectar o repositrio, nem a cpia de trabalho de outros. Elas so simplesmente uma forma conveniente para organizares os teus ficheiros.

4.9. Caixa de Dilogo Registo de Revises


Para cada alterao que fazes e submetes, deves providenciar uma mensagem de registo para essa alterao Dessa maneira, podes mais tarde descobrir as alteraes que efectuaste e o porqu, e ters um registo detalhado para o teu processo de desenvolvimento. A Caixa de Dilogo de Registo de Revises recupera todas as mensagens de registo e mostra-tas. A visualizao dividida em 3 painis. O painel de topo mostra a lista de revises onde as alteraes ao ficheiro/pasta foram submetidas. Este sumrio inclu a data e tempo, a pessoa que submeteu a reviso e o incio da mensagem de registo. Linhas mostradas a azul indicam que algo foi copiado para esta linha de desenvolvimento (se calhar de um ramo). O painel do meio mostra a totalidade da mensagem de registo para a reviso seleccionada. O painel inferior mostra a lista de todos os ficheiros e pastas que foram alterados, como parte da reviso seleccionada. Mas faz mais que isso - providencia comandos de menu de contexto, que podes usar para obter ainda mais informao sobre a histria do projecto.

60

Daily Use Guide

4.9.1. Invocando a Caixa de Dilogo Registo de Reviso

Figura 4.15. A Caixa de Dilogo Registo de Reviso


Existem vrios locais a partir dos quais podes mostrar a caixa de dilogo de Registo: A partir do submenu de contexto TortoiseSVN A partir da pgina de propriedades A partir da caixa de dilogo de Progresso, aps o fim de uma actualizao. Ento a caixa de dilogo de registo s mostrar as revises que foram alteradas, desde o tua ltima actualizao Se o repositrio no est disponvel, vers a caixa de dilogo Queres ficar fora de linha? descrita em Seco 4.9.10, Modo Fora de Linha.

4.9.2. Aces de Registo de Revises


O painel de topo tem uma coluna Aces contendo cones que sumarizam o que foi feito na reviso. Existem quatro diferentes cones, cada mostrada na sua coluna.

Se uma reviso modificou um ficheiro ou pasta, o cone modificado mostrado na primeira coluna.

Se a reviso adicionou um ficheiro ou pasta, o cone adicionado mostrado na segunda coluna.

Se a reviso removeu um ficheiro ou pasta, o cone removido mostrado na terceira coluna.

61

Daily Use Guide

Se a reviso substituiu um ficheiro ou pasta, o cone substituido mostrado na quarta coluna.

4.9.3. Obtendo Informao Adicional

Figura 4.16. O Painel de Topo da Caixa de Dilogo Registo de Revises com Menu de Contexto
O painel de topo da caixa de dilogo de registo tem um menu de contexto que te permite aceder a muito mais informao. Algumas dessas entradas do menu s aparecem quando o registo mostrado para um ficheiro, e outras s quando o registo mostrado para uma pasta. Comparar com a cpia de trabalho Compara a reviso seleccionada com a tua cpia de trabalho. A ferramenta, por defeito, de Comparao o TortoiseMerge que fornecido com o TortoiseSVN. Se a caixa de dilogo de registo for para uma pasta, ento ir mostrar-te uma lista de ficheiros alterados e permitir-te- rever as alteraes feitas a cada ficheiro individualmente. Compara e responsabiliza com a BASE de trabalho Responsabiliza a reviso seleccionada e o ficheiro na tua BASE de trabalho, e compara os relatrios de responsabilidade usando a ferramenta de comparao visual. Ler Seco 4.23.2, Diferenas de responsabilidade para mais detalhes. (s ficheiros). Mostrar diferenas como uma comparao unificada V as alteraes feias na reviso seleccionada como uma comparao unificada (formato de correco GNU). Isto s mostra as diferenas com algumas linhas de contexto. mais difcil de ler que uma comparao visual de ficheiros, mas ir mostrar todas as alteraes do ficheiro num formato compacto. Compara com a reviso prvia Compara a reviso seleccionada com a reviso prvia. Isto funciona de maneira similar comparao com a cpia de trabalho. Para pastas, esta opo mostrar primeiro a caixa de dilogo de ficheiros alterados, permitindo-te seleccionar os ficheiros a comparar.

62

Daily Use Guide

Compara e responsabiliza com a reviso anterior Mostra a caixa de dilogo de ficheiros alterados, permitindo-te seleccionar os ficheiros. Responsabiliza a reviso seleccionada e a reviso prvia, e compara os resultados usando a ferramenta de comparao. (s pastas). Guardar reviso em... Guarda a reviso seleccionada para um ficheiro, para que tenhas uma reviso antiga de esse ficheiro (s ficheiros). Abrir / Abrir com... Abrir o ficheiro seleccionado com o programa de leitura por defeito, para esse tipo de ficheiro, ou um programa tua escolha. (s ficheiros). Responsabilizar... Responsabiliza o ficheiro at reviso seleccionada (s ficheiros). Navegar repositrio Abre o navegador do repositrio, para examinar o ficheiro ou pasta seleccionada no repositrio, como era na reviso seleccionada. Criar ramo/etiqueta a partir da reviso Cria um ramo ou etiqueta a partir da reviso seleccionada. Isot util i.e. te esqueceres de criar uma etiqueta, e j submetes-te algumas alteraes que no eram supostas ir naquela entrega. Actualiza um item para uma reviso Actualiza a tua cpia de trabalho para a reviso seleccionada. til se queres que a tua cpia de trabalho que reflicta um tempo passado, ou se ainda houve submisses posteriores para o repositrio e tu queres actualizar a tua cpia de trabalho, um passo de cada vez. melhor actualizar toda a pasta na tua cpia de trabalho, no s um ficheiro, ou de outro modo a tua cpia ficaria inconsistente. Se queres desfazer permanentemente para uma reviso anterior, usa em substituio Reverter para esta reviso. Reverter para esta reviso Reverter para uma reviso anterior. Se efectuaste vrias alteraes e ento decides que queres realmente voltar para trs, para o estado em que estavam as coisas na reviso N, este o comando que precisas. As alteraes so desfeitas na tua cpia de trabalho, e este comando no afectar o repositrio at submeteres as alteraes. Tomar ateno que isto ir desfazer todas as alteraes efectuadas depois da reviso seleccionada, substituindo os ficheiros/pastas com uma reviso anterior. Se a tua cpia de trabalho est num estado no alterado, depois de efectuares esta operao, a tua cpia de trabalho ir-se- mostrar como alterada. Se j tens alteraes locais, este comando ir integrar as alteraes desfeitas na tua cpia de trabalho. O que est acontecer internamente que, o Subversion efectua uma integrao inversa de todas as alteraes feitas na reviso seleccionada, desfazendo o efeito de submisses prvias. Se depois de efectuares esta aco decides que queres desfazer o desfeito, e obteres a tua cpia de trabalho de volta para o seu estado no alterado, deves usar TortoiseSVN Reverter, a partir do Explorador do Windows, que ir descartar as modificaes locais efectuadas por esta aco de integrao inversa. Se queres simplesmente ver como um ficheiro ou pasta eram numa reviso anterior, usa em alternativa Actualizar para reviso ou Salvar reviso como.... Reverter alteraes desta reviso Desfazer alteraes que foram feitas na reviso seleccionada. As alteraes so desfeitas na tua cpia de trabalho, isto , esta operao no afecta de modo algum o repositrio! De notar que isto ir desfazer s as alteraes feitas nesta reviso; no substitui a tua cpia de trabalho com o ficheiro completo como estava nessa reviso. Isto muito til para desfazer uma alterao anterior, quando uma outra alterao no relacionada foi feita depois.

63

Daily Use Guide

Se a tua cpia de trabalho est num estado no alterado, depois de efectuares esta operao, a tua cpia de trabalho ir-se- mostrar como alterada. Se j tens alteraes locais, este comando ir integrar as alteraes desfeitas na tua cpia de trabalho. O que est a acontecer internamente que, o Subversion executa uma integrao inversa dessa nica reviso, desfazendo o seu efeito numa submisso anterior. Podes desfazer o desfeito como descrito acima em Reverter para esta reviso. Integrar reviso para... Integrar a reviso/revises seleccionada(s) numa cpia de trabalho diferente. Uma caixa de dilogo de seleco de pasta permite-te escolher a cpia de trabalho para onde integrar, mas depois disso no h caixa de dilogo de confirmao, nem a oportunidade para experimentar uma integrao de teste. uma boa ideia integrar para uma cpia de trabalho no modificada, para que possas reverter as alteraes caso no resulte! Isto uma funcionalidade til se queres integrar revises seleccionadas de um ramo para outro. Checkout... Fazer um SVN exportar de fresco, da pasta seleccionada na reviso seleccionada. Ir mostrar uma caixa de dilogo de modo a confirmares o URL e a reviso, e seleccionar uma localizao para o SVN exportar. Exportar... Exportar o ficheiro/pasta seleccionada na reviso seleccionada. Ir aparecer uma caixa de dilogo para confirmares o URL e a reviso, e seleccionares a localizao para exportar. Editar mensagem de autor/registo Edit the log message or author attached to a previous commit. Read Seco 4.9.7, Alterando a Mensagem de Registo e Autor to find out how this works. Mostrar propriedades de reviso V e edita qualquer propriedade de reviso, no apenas a mensagem de registo e o autor. Consulte Seco 4.9.7, Alterando a Mensagem de Registo e Autor. Copiar para o clipboard Copia os detalhes do registo das revises seleccionadas para o clipboard. Isto ir copiar o nmero de reviso, autor, data, mensagem de registo e a lista de itens alterados para cada reviso. Pesquisar mensagens de registo... Pesquisar mensagens de registo com o texto que inseriste. feita a pesquisa das mensagens de registo que inseriste e tambm o sumrio de aces criada pelo Subversion (mostrado no painel inferior). A pesquisa no sensvel altura da letra.

Figura 4.17. Menu de Contexto do Painel Superior para 2 revises seleccionadas


Se seleccionares duas revises de uma vez (usando o modificador usual Ctrl), o menu de contexto muda e disponibiliza menos opes: Comparar revises Comparar duas revises seleccionadas usando uma ferramenta de comparao visual. A Ferramenta-de Comparao por defeito, o TortoiseMeerge que fornecida com o TortoiseSVN.

64

Daily Use Guide

Se seleccionares esta opco para uma pasta, uma caixa de dilogo posterior aparecer listando os ficheiros alterados e, oferecendo-te ainda mais opes de comparao. L mais sobre a caixa de dilogo Comparar Revises em Seco 4.10.3, Comparando Pastas. Responsabilizar revises Responsabiliza as duas revises e compara os relatrios de responsabilidade usando a ferramenta de comparao visual. Para mais detalhes l Seco 4.23.2, Diferenas de responsabilidade. Mostrar diferenas como comparao unificada V as diferenas entre as duas revises seleccionadas como um ficheiro de comparao unificada. Isto funciona para ficheiros e pastas. Copiar para o clipboard Copiar as mensagens de registo para o clipboard como descrito acima. Pesquisar mensagens de registo... Pesquisar mensagens de registo como descrito acima. Se seleccionares duas ou mais revises (usando os modificadores usuais Ctrl ou Shift), o menu de contexto ir incluir uma entrada para reverter todas as alteraes que foram feitas nas revises seleccionadas. Esta a maneira mais fcil para rebobinar um grupo de revises de uma vez s. Podes tambm escolher integrar as revises seleccionadas noutra cpia de trabalho, como descrito acima. Se todas as revises seleccionadas tm o mesmo autor, podes editar o autor de todas essas revises de uma vez s.

Figura 4.18. The Log Dialog Bottom Pane with Context Menu
O painel inferior da caixa de dilogo Registo tambm tem um menu de contexto, que te permite Mostrar alteraes Show changes made in the selected revision for the selected file. This context menu is only available for files shown as modified. Responsabilizar alteraes Responsabilizar a reviso seleccionada e a reviso prvia para o ficheiro seleccionado, e compara os relatrios de responsabilidade usando uma ferramenta de comparao visual. Para mais detalhes ler Seco 4.23.2, Diferenas de responsabilidade. Mostrar como comparao unificada Mostrar as alteraes do ficheiro no formato comparao unificada. Este menu de contexto est s disponvel para ficheiros visiveis como modificado. Abrir / Abrir com... Abrir o ficheiro seleccionado com o leitor por defeito para esse tipo de ficheiro ou, com um programa tua escolha.

65

Daily Use Guide

Responsabilizar... Abre a caixa de dilogo Responsabilizar, permitindo-te responsabilizar at reviso seleccionada. Reverter alteraes desta reviso Reverter as alteraes feitas no ficheiro seleccionado nesta reviso. Mostrar propriedades Ver as propriedades Subversion para o item seleccionado. Mostrar registo Mostra o registo de reviso para o nico ficheiro seleccionado. Obter registos de integrao Mostrar o registo de reviso para o nico ficheiro seleccionado, incluindo as alteraes integradas. Descobre mais em Seco 4.9.6, Funcionalidades de Rastreamento de Integrao. Guardar reviso em... Guardar a reviso seleccionada num ficheiro para que tenhas uma verso antiga do mesmo.

Dica
Deves ter notado que por vezes referimo-nos s alteraes e outras vezes a diferenas. Qual a diferena? O Subversion usa nmeros de reviso para significar 2 coisas diferentes. A reviso, de modo geral, representa o estado do repositrio num dado ponto no tempo, mas pode tambm ser usado para representar o conjunto de alteraes que criou a reviso, e.g. Feito em r1234 significa que as alteraes submetidas na r1234 implementa a funcionalidade X. Para tornar mais claro qual o sentido que est a ser utilizado, usamos dois termos diferentes. Se seleccionares duas revises N e M, o menu de contexto ir oferecer a visualizao da diferena entre essas duas revises. Em termos Subversion isto diff -r M:N. Se seleccionares uma s reviso N, o menu de contexto ir oferecer a visualizao das alteraes feitas nessa reviso. Em termos Subversion isto diff -r N-1:N ou diff -c N. O painel inferior mostra os ficheiros alterados em todas as revises seleccionadas, ento o menu de contexto ir oferecer sempre a visualizao de alteraes.

4.9.4. Obtendo mais mensagens de registo


A caixa de dilogo de Registo no mostra sempre todas as alteraes jamais feitas por um nmero de razes: Para um grande repositrio podero existir centenas ou mesmo milhares de alteraes e, ir busca-las a todas pode demorar muito tempo. Normalmente s estars interessado nas alteraes mais recentes. Por defeito, o nmero de mensagens de registo trazidas est limitada s 100, mas no entanto podes alterar esse valor no TortoiseSVN Preferncias (Seco 4.30.1.2, Preferncias das Caixas de Dilogo TortoiseSVN 1), Quando a caixa Parar ao copiar/alterar o nome est verificada, o Mostrar Registo ir parar no ponto onde o ficheiro ou pasta seleccionada foi copiado de outro ponto do repositrio. Isto pode ser til ao olhar para ramos (ou etiquetas), j que pra na raiz desse ramo, e d uma rpida indicao das alteraes feitas s nesse ramo. Normalmente tu querers deixar esta opo no verificada. O TortoiseSVN lembra-se do estado da caixa de verificao, respeitando desse modo a tua preferncia. Quando a caixa de dilogo Mostrar Registo invocada de dentro da caixa de dilogo de Integrar, esta caixa sempre verificada por defeito. Isto porque, integrar na maioria das vezes olhar para as alteraes em ramos e voltar para trs, e ir alm da raiz do ramo no far sentido nessa situao.

66

Daily Use Guide

De notar que o Subversion actualmente implementa o renomear com o par copiar/apagar, ento renomear um ficheiro ou pasta ir provocar, que a visualizao do registo pare se esta opo est verificada. Se queres ver mais mensagens de registo, clica Prximos 100 para trazer as prximas 100 mensagens de registo. Podes repetir este procedimento quantas vezes necessitares. Prximo a este boto est um boto multifunes que lembra a ltima opo para que o usaste. Clica na seta, para ver as outras opes disponveis. Usa Mostrar Intervalo... se queres ver um intervalo de revises especfica. A caixa de dilogo ir ento pedir-te para introduzir a reviso de incio e fim. Usa Mostrar Tudo se queres ver todas as mensagens de registo a partir da reviso HEAD de volta at reviso 1.

4.9.5. Reviso Actual da Cpia de Trabalho


Porque a caixa de dilogo de registo te mostra o registo a partir da HEAD, e no da reviso corrente da cpia de trabalho, acontece frequentemente que so mostradas mensagens de registo para contedo que ainda no foi actualizado, na tua cpia de trabalho. Para ajudar a tornar isto mais claro, a mensagem de submisso que corresponde reviso que tens na tua cpia de trabalho, mostrada a negrito. When you show the log for a folder the revision highlighted is the highest revision found anywhere within that folder, which requires a crawl of the working copy. This can be a slow operation for large working copies, and the log messages are not displayed until the crawl completes. If you want to disable or limit this feature you need to set a registry key HKCU\Software\TortoiseSVN\RecursiveLogRev as described in Seco 4.30.10, Registry Settings.

4.9.6. Funcionalidades de Rastreamento de Integrao


O Subversion 1.5 e superior mantm o registo das integraes recorrendo ao uso de propriedades. Isto permite-te obter um histrico mais detalhado das alteraes integradas. Por exemplo, se desenvolveres uma nova funcionalidade num ramo e a seguir integras esse ramo de volta para o trunk, a funcionalidade desenvolvida ir ser mostrada no registo do trunk, como uma nica submisso para a integrao, mesmo que tenha havido 1000 submisses durante o desenvolvimento do ramo.

67

Daily Use Guide

Figura 4.19. A Caixa de Dilogo Registo Mostra Rasto das Revises de Integrao
Se quiseres ver o detalhe de quais revises que foram integradas como parte dessa submisso, usa a caixa de verificao Incluir revises integradas. Isto ir outra vez buscar as mensagens de registo, mas tambm ir colocar entrefolhas as mensagens de registo das revises que foram submetidas. Revises integradas so mostradas a cinzento, porque representam alteraes feitas numa parte diferente da rvore. claro que integrar nunca simples! Durante o desenvolvimento da funcionalidade no ramo, iro provavelmente ocorrer integraes ocasionais de volta para o trunk, de modo a manter o ramo em sincronismo com a linha de cdigo principal.

4.9.7. Alterando a Mensagem de Registo e Autor


As propriedades de reviso so completamente diferentes das propriedades do Subversion de cada item. Revprops so itens descritivos que so associados a um nmero de reviso especfico no repositrio, como as mensagens de registo, data de submisso e autor da submisso (autor). Por vezes poders querer modificar a mensagem de registo que anteriormente introduziste, talvez porque contm o erro de ortografia, ou queres melhorar a mensagem, ou muda-la por outras razes. Ou queres alterar o autor da submisso porque de esqueces-te de activar a autenticao, ou... O Subversion deixa-te alterar as propriedades da reviso em qualquer altura que desejes. Mas como essas alteraes no podem ser desfeitas (essas alteraes no so versionadas) essa funcionalidade est desactivada por defeito. Para activar esta funcionalidade devers configurar o gancho pre-revprop-change. Consultar o respectivo captulo no Hook Scripts [http://svnbook.red-bean.com/en/1.5/svn.reposadmin.create.html#svn.reposadmin.create.hooks] no livro do Subversion para detalhes em como o fazer. Ler Seco 3.3, Server side hook scripts para encontrares mais notas sobre como implementar ganchos numa mquina Windows.

68

Daily Use Guide

Uma vez que tenhas configurado o teu servidor com os ganchos pretendidos, podes mudar o autor e a mensagem de registo ( ou qualquer outra revprop) de qualquer reviso, usando o menu de contexto do painel de topo da caixa de dilogo Registo. Podes tambm editar a mensagem de registo usando o menu de contexto no painel do meio.

Ateno
Porque as propriedades de reviso do Subversion no so versionadas, fazer alteraes a tais propriedades (por exemplo, a propriedade da mensagem de submisso svn:log) ir re-escrever o seu valor para sempre.

4.9.8. Filtrando Mensagens de Registo


Se queres restringir as mensagens de registo, para mostrar s as que ests interessado em vez de percorreres uma lista de centenas, podes usar os controlos de filtros no topo da caixa de dilogo Registo. Os controlos de incio e fim de data permite-te restringir a visualizao a um intervalo de datas. A caixa de pesquisa permite-te mostrar s mensagens que contm uma frase particular. Click on the search icon to select which information you want to search in, and to choose regex mode. Normally you will only need a simple text search, but if you need to more flexible search terms, you can use regular expressions. If you hover the mouse over the box, a tooltip will give hints on how to use the regex functions. You can also find online documentation and a tutorial at http://www.regular-expressions.info/. The filter works by checking whether your filter string matches the log entries, and then only those entries which match the filter string are shown. To make the filter show all log entries that do not match the filter string, start the string with an exclamation mark ('!'). For example, a filter string !username will only show those entries which were not committed by username. De salientar que esses filtros actuam nas mensagens j adquiridas. Eles no controlam o descarregamento de mensagens do repositrio. You can also filter the path names in the bottom pane using the Hide unrelated changed paths checkbox. Related paths are those which contain the path used to display the log. If you fetch the log for a folder, that means anything in that folder or below it. For a file it means just that one file. The checkbox is tristate: you can show all paths, grey out the unrelated ones, or hide the unrelated paths completely. Por vezes as tuas prticas de trabalho iram requerer que as tuas mensagens de registo sigam um formato particular, o que significa que o texto que descreve as alteraes no visvel no sumrio abreviado mostrado no painel de topo. A propriedade tsvn:logsummary pode ser utilizada para extrair uma parte da mensagem de registo para ser mostrada no painel de topo. Ler Seco 4.17.2, Propriedades de Projecto TortoiseSVN para descobrir como usar esta propriedade.

Registos No Formatados do Navegador de Repositrio


Porque a formatao depende do acesso s propriedades do subversion, tu s vers os seus resultados quando obtiveres uma cpia de trabalho SVN exportada. Buscar remotamente propriedades uma operao lenta, pelo que no vers esta funcionalidade em aco a partir do navegador de repositrio.

4.9.9. Informao Estatstica


O boto Estatsticas abre uma caixa que, mostra alguma informao interessante sobre as revises mostradas na caixa de dilogo Registo. Essa mostra quantos autores estiveram a trabalhar, quantas submisses eles fizeram, o progresso por semana e muito mais. Agora podes ver por alto que trabalhou mais arduamente e quem esteve na balda ;-)

4.9.9.1. Pgina de Estatsticas


Esta pgina d-te todos os nmeros que tenhas em mente em particular, o perodo e o nmero de revises cobertas e alguns valores min/max/mdia.

69

Daily Use Guide

4.9.9.2. Pgina de Submisses por Autor

Figura 4.20. Histograma de Submisses-por-Autor


Este grfico mostra quais os autores que tm estado activos no projecto como um simples histograma, histograma empilhado ou grfico de queijo.

70

Daily Use Guide

Figura 4.21. Grfico de queijo Submisses-por-Autor


onde h alguns grandes autores e muitos pequenos contribuidores, o nmero de pequenos segmentos pode tornar o grfico mais difcil de ler. O controlo deslizante no fundo permite-te colocar um limite (como precentagem do total de submisses) abaixo do qual, qualquer actividade agrupado na categoria Outros.

71

Daily Use Guide

4.9.9.3. Pgina de Submisses por data

Figura 4.22. Grfico de Submisses-por-data


Esta pgina d-te uma representao grfica da actividade do projecto em termos de, nmero de submisses e autor. Isto d alguma ideia de quando um projecto est a ser trabalhado, quem esteve a trabalhar a que altura. Quando existem vrios autores irs obter muitas linhas no grfico. Existem duas vistas disponveis aqui: normal, onde a actividade de cada autor relativa linha base e, empilhada, onde a actividade de cada autor relativa linha de baixo. A ltima opo evita o cruzamento de linhas que pode tornar o grfico mais fcil de ler, mas menos fcil para ver a produo de um determinado autor. Por defeito, a analise sensvel a maisculas e minsculas, pelo que os utilizadores PeterEgan e PeteRegan so tratados como autores diferentes. No entanto, em muitos casos, os nomes de utilizadores no so sensveis a maisculas e minsculas, e so por vezes introduzidos inconsistentemente, pelo que poders querer que o DavidMorgan e o davidmorgan sejam tratados como a mesma pessoa. Usar a caixa de verificao Autores sensveis a maisculas e minsculas para controlar como este caso tratado. Ter em ateno que as estatsticas cobrem o mesmo perodo que a caixa de dilogo Registo. Se esta s mostra uma reviso ento as estatsticas no te diro muito.

72

Daily Use Guide

4.9.10. Modo Fora de Linha

Figura 4.23. Caixa de dilogo Colocar-se em Fora de Linha


Se o servidor no est disponvel e tens a cache de registo activada, podes usar a caixa de dilogo e o navegador de revises no modo fora de linha. Usando dados da cache que te permite continuar a trabalhar, apesar de a informao no estar actualizada ou mesmo completa. Aqui tens trs opces: Fora-de-linha por agora Completa a operao corrente no modo fora-de-linha mas, repetir a tentativa de acesso ao repositrio da prxima vez que forem requeridos dados do registo. Fora-de-linha permanentemente Permanecer em modo fora-de-linha at um pedido de verificao ao repositrio for especificamente requerido. Consultar Seco 4.9.11, Refrescar a Vista. Cancelar Se no queres continuar com a operao com dados possivelmente obsoletos, basta cancelar. A caixa de verificao Tornar isto por defeito previne esta caixa de dilogo de reaparecer, e escolhe sempre a opo que escolheres a seguir. Podes ainda mudar (ou remover) a opo por defeito, aps a teres efectuado, a partir de TortoiseSVN Preferncias.

4.9.11. Refrescar a Vista


Se queres verificar o servidor novamente por novas mensagens de registo, podes simplesmente refrescar a vista usando F5. Se tiveres a usar a cache de registo (disponvel por defeito), esta ir verificar o repositrio por novas mensagens e trazer s as novas. Se a cache de registo estava em modo fora-de-linha esta ir tambm tentar voltar a estar em linha. Se est a utilizar a cache de registo e pensas que o contedo da mensagem ou o autor tenha mudado, podes usar Shift-F5 ou Ctrl-F5 para rebuscar as mensagens mostradas a partir do servidor e actualizar a cache de registo. De notar que isto s afecta as mensagens mostradas correntemente, e no invalida a totalidade da cache para esse repositrio.

4.10. Ver Diferenas


Um dos requisitos mais comuns no desenvolvimento de projectos poder ver o que foi alterado. Tu podes querer ver as diferenas entre duas revises do mesmo ficheiro, ou as diferenas entre dois ficheiros diferentes. O TortoiseSVN fornece uma ferramenta incorporada para ver as diferenas de ficheiros de texto, chamada TortoiseMerge.

73

Daily Use Guide

Para ver as diferenas de ficheiros de imagem o TortoiseSVN tambm tem uma ferramenta, chamada TortoiseIDiff. claro que se quiseres, podes usar o teu programa de comparao favorito.

4.10.1. Diferenas em ficheiros


Alteraes locais Se pretendes ver que alteraes tu efectuastes na tua cpia de trabalho, usa apenas o menu de contexto do explorador e selecciona TortoiseSVN Comparar. Diferenas para outro ramo/etiqueta Se pretendes ver o que foi alterado no trunk (se ests a trabalhar num ramo) ou num ramo especfico (se ests a trabalhar no trunk), podes usar o menu de contexto do explorador. Apenas mantm a tecla Shift enquanto clicas com o boto direito no ficheiro. Ento selecciona TortoiseSVN Comparar com URL. Na caixa de dilogo seguinte, especifica o URL no repositrio com o qual queres comparar o teu ficheiro. Tambm podes usar o navegador de repositrio e, seleccionar duas rvores para comparar, talvez duas etiquetas, ou um ramo/etiqueta com o trunk. O menu de contexto a permite-te compar-las usando Comparar revises. Ler mais em Seco 4.10.3, Comparando Pastas. Diferenas de uma reviso anterior Se pretendes ver a diferena entre uma reviso particular e a tua cpia de trabalho, usa a caixa de dilogo Registo de Revises e seleccionar a reviso de interesse, ento seleccionar a partir do menu de contexto Compara com cpia de trabalho. Se pretendes ver as diferenas entre a ltima reviso submetida e a tua cpia de trabalho, assumindo que a tua cpia de trabalho no foi modificada, clica apenas com o boto direito no ficheiro. E selecciona TortoiseSVN Comparar com reviso anterior. Ento ser executada uma comparao entra reviso antes da ltima submisso (como registada na tua cpia de trabalho) e a BASE de trabalho. Isto mostra a ltima alterao feita nesse ficheiro para o levar ao estado em que se encontra correntemente na tua cpia de trabalho. No ir mostrar alteraes mais recentes que a tua cpia de trabalho. Diferenas entre duas revises prvias Se pretendes ver as diferenas entre duas revises prvias, que j esto submetidas, usa a caixa de dilogo Registo de Revises e seleccionar as duas revises qye queres comprar (usando o modificador usual Ctrl). Ento selecciona a partir do menu de contexto Comparar revises. Se fizeste isto a partir do registo de reviso de uma pasta, a caixa de dilogo Arquivos Alterados aparecer mostrando a lista de ficheiros alterados nessa pasta. Ler mais em Seco 4.10.3, Comparando Pastas. Todas as alteraes feitas numa submisso Se pretendes ver as alteraes feitas em todos os ficheiros numa reviso particular numa vista nica, podes usar o resultado da Comparao-Unificada (formato de remendo GNU). Isto mostra apenas as diferenas com algumas linhas de contexto. mais difcil de ler que uma comparao visual de ficheiros, mas ir mostrar todas as alteraes em conjunto. A partir da caixa de dilogo Registo de Revises selecciona as revises de interesse, e selecciona a partir do menu de contexto Mostrar alteraes como uma comparao unificada. Diferenas entre ficheiros Se pretendes ver as diferenas entre dois ficheiros diferentes, podes faze-lo directamente no explorador seleccionando ambos os ficheirs (usando o modificador usual Ctrl). Ento a partir do menu de contexto do explorador, selecciona TortoiseSVN Comparar. Diferenas entre ficheiro/pasta da CT e um URL Se pretendes ver as diferenas entre um ficheiro na tua cpia de trabalho e um ficheiro em qualquer repositrio do Subversion, podes faze-lo directamente no explorador, sleeccionando o ficheiro e mantendo permido a tecla Shift enquanto clicas com o boto direito para aceder ao menu de contexto. Selecciona TortoiseSVN Comparao com URL. Podes fazer a mesma coisa para uma pasta da cpia de trabalho. O TortoiseMerge mostra essas diferenas da mesma maneira que mostra um ficheiro de remendo - uma lista de ficheiros alterados que podes visualizar, um de cada vez.

74

Daily Use Guide

Diferenas com informao de responsabilidade Se pretendes ver no s as diferenas, mas tambm ver o autor, reviso e data dessa alterao, podes combinar os relatrios de comparao e responsabilizao a partir da caixa de dilogo registo de revises. Para mais detalhes consulta Seco 4.23.2, Diferenas de responsabilidade. Diferenas entre pastas As ferramentas embutidas fornecidas com o TortoiseSVN, no suportam a visualizao de diferenas entre hierarquia de pastas. Mas se tiveres uma ferramenta externa que suporte essa funcionalidade, podes usa-la em substituio. Em Seco 4.10.5, Ferramentas de Comparao/Integrao ns falamos sobre algumas que temos usado. Se tens configurada uma ferramenta de comparao de terceiros, podes usar Shift quando seleccionares o comando de Comparao, para usar a ferramenta alternativa. Consulta Seco 4.30.5, Preferncias de Programas Externos para descobrires como configurar outras ferramentas de comparao.

4.10.2. Opes de Fim-de-Linha e Espaos-Brancos


Por vezes no tempo de vida do projecto poders alterar os fim-de-linha de CRLF para LF, ou poders alterar a indentao de uma seco. Infelizmente isto ir marcar um grande nmero de linhas como alteradas, mesmo que no haja alteraes de significado no cdigo. Estas opes te iro ajudar a gerir essas alteraes quando for altura de comparar e aplicar as diferenas. Irs ver essas definies nas caixas de dilogo Integrar e Responsabilizar, tal como nas definies para o TortoiseMerge. Ignorar fins-de-linha exclui alteraes que so exclusivamente devidas a diferenas no estilo de fim-de-linha. Comparar espaos em branco inclui todas as alteraes na indentao e espaos-em-branco em linha, como linhas adicionadas/removidas. Ignorar alteraes em espaos em branco exclui alteraes que so exclusivamente devidas a uma alterao na quantidade e tipo do espao em branco, e.g. alterando a indentao ou alterando tabulaes para espaos. Adicionando espaos em branco onde nenhum existia, ou remover completamente um espao em branco, ser sempre mostrado como uma alterao. Ignorar todos os espaos em branco exclui todas as alteraes relacionadas s com espaos em branco. Naturalmente qualquer linha com contedo alterado ser sempre includa na comparao.

4.10.3. Comparando Pastas

75

Daily Use Guide

Figura 4.24. A Caixa de Dilogo Comparar Revises


Quando seleccionas duas rvores no interior do navegador de repositrio ou quando seleccionas duas revises de uma pasta na caixa de dilogo, podes Context menu Comparar revises. Esta caixa de dilogo mostra a lista de todos os ficheiros que foram alterados, permitindo-te compar-los ou responsabiliza-los individualmente, usando o menu de contexto. Podes exportar uma rvore de alteraes, que til se necessitas de enviar a algum a estrutura da rvore do teu projecto, mas contendo apenas aqueles ficheiros que foram alterados. Esta operao funciona s em ficheiros alterados, pelo que s precisas de seleccionar os ficheiros de interesse - o que normalmente significa todos - e depois Menu de contexto Exportar seleco para.... Sers solicitado a introduzir uma localizao para guardar a rvove de alteraes. Podes tambm exportar a lista de ficheiros alterados para um ficheiro de texto, usando Menu de contexto Guardar lista de ficheiros seleccionados para.... Se queres exportar a lista de ficheiros e tambm as aces (modificada, adicionada,removida), poders faze-lo usando Menu de contexto Copiar seleco para a rea de transferncia. O boto no topo permite-te alterar a direco da comparao. Podes mostrar as alteraes necessrias para ir de A a B, ou se preferires, de B a A. Os botes com os nmeros de reviso podem ser usados para mudar para um intervalo de revises diferentes. Quando alteras o intevalo, a lista de itens, que diferem entre revises, ser actualizada automaticamente. Se a lista de nomes de ficheiros muito extensa podes utilizar a caixa de pesquisa, para assim reduzir a lista para ficheiros cujo nome contm um texto especfico. Ter em ateno que usada uma pesquisa de texto simples, e se queres restringir a lista a ficheiro de fonte de C, devers introduzir .c em vez de *.c.

76

Daily Use Guide

4.10.4. Comparando Imagens usando o TortoiseDiff


Existem muitas ferramentas disponveis para comparar ficheiros de texto, incluindo o nosso TortoiseMerge, mas com frequncia estamos tambm espera de ver como um ficheiro de imagem foi alterado. por isso que crimos o TortoiseIDiff.

Figura 4.25. O leitor de diferenas de imagem


TortoiseSVN Comparar para qualquer formato de imagem comum, ir arrancar o TortoiseIDiff para mostrar diferenas de imagem. Por defeito as imagens so mostradas lado-a-lado, mas em vez de, podes usar o menu Vista ou a barra de ferramentas para comutar para uma vista cima-baixo, ou se preferires podes sobrepor as imagens e fingir que ests a usar uma mesa de luz. Naturalmente que podes aplicar mais ou menos zoom e posicionar a imagem. Podes tambm posicionar a imagem apenas por arrast-la com o boto direito do rato. Se seleccionares a opo Ligar posies das imagens, os controlos de posicionamento (barras e rolar, roda do rato) ficaram ligados. Uma caixa de informao de imagem mostra os detalhes sobre a mesma, como o tamanho em pxeis, resoluo e profundidade de cor. Se esta caixa est a atrapalhar usa View Image Info para a esconder. Podes obter a mesma informao numa etiqueta, se mantiveres o rato sobre a barra de ttulo da imagem. Quando as imagens esto sobrepostas, a intensidade relativa das mesmas (mistura alfa) controlada por um controlo de deslocamento no lado esquerdo. Podes clicar em qualquer ponto do controlo de deslocamento para configurares a mistura directamente, ou podes arrast-lo para alterares a mistura iterativamente. Ctrl+Shift-Rodal para alterar a mistura. O boto por cima do controlo de deslocamento alterna entre as misturas de 0% e 100%, e se efectuares duplo clique no boto, a mistura alterna automaticamente a cada segundo at clicares no boto novamente. Isto pode ser til quando olhamos para pequenas alteraes mltiplas. Por vezes queres ver uma diferena em vez de uma mistura. Poders ter os ficheiros de imagem de duas revises de um placa de circuito impresso e querer ver quais as pistas que foram alteradas. Se desactivares o modo mistura alfa, a diferena ir ser mostrada como uma XOR dos valores de cor dos pxeis. reas inalteradas sero brancas e as alteraes coloridas.

77

Daily Use Guide

4.10.5. Ferramentas de Comparao/Integrao


Se as ferramentas fornecidas no fazem o que precisas, experimenta uma das muitas ferramentas comerciais ou open-source disponveis. Toda a gente tem as suas favoritas e esta lista est longe de estar completa, no entando, aqui esto algumas que poders levar em considerao: WinMerge WinMerge [http://winmerge.sourceforge.net/] uma grande ferramenta de comparao open-source que tambm pode lidar com pastas. Perforce Merge O Perforce um SCR comercial no entanto podes descarregar gratuitamente a ferramenta de comparar/integrar. Mais informaes em Perforce [http://www.perforce.com/perforce/products/merge.html]. KDiff3 KDiff3 uma ferramenta de comparao gratuita que tambm suporta pastas. Podes descarreg-la em here [http://kdiff3.sf.net/]. ExamDiff O ExamDiff padro freeware. Esta ferramenta suporta ficheiros mas no pastas. O ExamDiff Pro shareware e adiciona um nmero de guloseimas que incluem, comparao de pastas e capacidades de edio. Em ambas edies existe suporte para unicode na verso 3.2 e superior. Podes descarreg-las em PrestoSoft [http:// www.prestosoft.com/]. Beyond Compare Semelhante ao ExamDiff Pro, esta uma excelente ferramenta de comparao shareware que suporta comparao de pastas e unicode. Descarrega-a em Scooter Software [http://www.scootersoftware.com/]. Araxis Merge O Araxis Merge uma til ferramenta comercial para comparar e integrar ficheiros e pastas. Executa uma comparao tripartida em integraes e tem links de sincronizao, para uso se alteraste a ordem das funes. Descarrega-a em Araxis [http://www.araxis.com/merge/index.html]. SciTE Este editor de texto inclui colorao de sintaxe para comparaes unificadas, tornando muito fcil a sua leitura. Descarrega-a em Scintilla [http://www.scintilla.org/SciTEDownload.html]. Notepad2 O Notepad2 foi desenhado como substituto para o programa padro Bloco-de-notas, do Windows, sendo baseado no controlo de edio open-source Scintilla. Bem como, sendo bom para ver comparaes unificadas muito melhor que o Bloco-de-notas do Windows para a maioria dos trabalhos. Descarrega-o grtis em here [http://www.flos-freeware.ch/notepad2.html]. Consultar Seco 4.30.5, Preferncias de Programas Externos para mais informaes em como configurar o TortoiseSVN para usar essas ferramentas.

4.11. Adicionar Novos Ficheiros e Pastas

Figura 4.26. Menu de contexto do Explorador para ficheiros no versionados

78

Daily Use Guide

Se criastes novos ficheiros e/ou pastas durante o teu processo de desenvolvimento, ento precisas de adicion-los tambm ao controlo de verses. Selecciona o(s) ficheiro(s) e/ou pasta e usa TortoiseSVN Adicionar... Aps adicionares os ficheiros/pastas ao controlo de verses, o ficheiro aparece com o cone de sobreposio adicionado, o que significa que ters primeiro de submeter a tua cpia de trabalho para tornar esses ficheiros/pastas disponveis a outros programadores. Adicionar um ficheiro/pasta no afecta o repositrio!

Muitas Adies
Podes tambm usar o comando Adicionar em pastas j versionadas. Neste caso, a caixa de dilogo adicionar ir mostrar todos os ficheiros no versionados dentro dessa mesma pasta versionada. Isto ajuda no caso de teres muitos ficheiros novos, e precisares de os adicionares de uma s vez. Para adicionar ficheiros, de fora da tua cpia de trabalho, podes usar o manpulo para arrastar-e-largar: 1. Selecciona os ficheiros que queres adicionar 2. Arrasta-os com o boto direito para a nova localizao dentro da cpia de trabalho 3. Larga o boto direito do rato 4. Selecciona Menu de Contexto SVN Copiar e adicionar arquivos a esta Cpia de Trabalho. Os ficheiros sero ento copiados para a cpia de trabalho e adicionados ao controle de verses. Podes tambm adicionar ficheiros de dentro da cpia de trabalho, simplesmente arrastando com o boto direito e largando-os na caixa de dilogo submeter. Se adiconaste um ficheiro ou pasta por engano, podes desfazer a adio, antes de submeteres, usando TortoiseSVN Desfazer adio....

4.12. Copiando/Movendo/Renomeando Ficheiros e Pastas


Acontece com frequncia que j tens os ficheiros que precisas, noutro projecto no teu repositrio, e que queres simplesmente copi-los. Podias simplesmente copiar os ficheiros e adicion-los como descrito acima, mas isso no te preservaria qualquer histria. E se posteriormente tu corriges um problema nos ficheiros originais, s poders integrar a correco automaticamente se a nova cpia estiver relacionada com o original no Subversion. A maneira mais fcil para copiar ficheiros e pastas, dentro da cpia de trabalho, utilizar o menu de arrasto com o boto direito. Quando tu arrastas-com-boto-direito um ficheiro ou pasta de uma cpia de trabalho para outra, ou mesmo dentro da mesma pasta, aparece o menu de contexto quando libertas o rato.

Figura 4.27. Menu arrastar com o boto direito para uma pasta sob controlo de verses.
Agora, podes copiar o contedo existente e versionado para uma nova localizao, possivelmente renomeando-o ao mesmo tempo.

79

Daily Use Guide

Tu podes tambm copiar ou mover ficheiros versionados dentro da cpia de trabalho, ou mesmo entre duas copias de trabalho, usando o familiar metodo cortar-e-colar. Usar o Copiar ou Colar padro do Windows, para copiar um ou mais itens versionados para a rea de transferencia (clipboard). Se a rea de transferncia contm tais itens versionados, poders ento usar o TortoiseSVN Colar (nota: no o Colar padro do Windows ) para copiar ou mover esses itens, para a nova localizao da cpia de trabalho. Podes copiar ficheiros e pastas da tua cpia de trabalho para outra localizao no repositrio usando TortoiseSVN Ramo/Etiqueta. Consultar Seco 4.19.1, Criando um Ramo ou Etiqueta para mais detalhes. Podes localizar uma verso antiga de um ficheiro ou pasta na caixa de dilogo do registo e, copi-lo para uma nova localizao no repositrio directamente a partir da caixa de dilogo do registo, usando Menu de contexto Criar ramo/etiqueta a partir da reviso. Consultar Seco 4.9.3, Obtendo Informao Adicional para mais detalhes. Podes tambm usar o navegador de repositrio para localizar o contedo que pretendes e, copi-lo para a tua cpia de trabalho directamente do repositrio ou copiar entre duas localizaes, dentro do repositrio. Consultar Seco 4.24, O Navegador de Repositrio para mais detalhes.

No consigo copiar entre repositrios


Whilst you can copy and files and folders within a repository, you cannot copy or move from one repository to another while preserving history using TortoiseSVN. Not even if the repositories live on the same server. All you can do is copy the content in its current state and add it as new content to the second repository. Se tens duvidas que dois URLs, no mesmo servidor, se refiram ao mesmo ou a diferentes repositrios, usa o navegador de repositrio para abrir um URL e descobrir onde est a raiz do repositrio. Se conseguires ver as das localizaes numa janela do navegador de repositrio, ento eles esto no mesmo repositrio.

4.13. Ignorando Ficheiros E Pastas

Figura 4.28. Menu de contexto do Explorador para ficheiros no versionados


Na maioria dos projectos ters ficheiros e pastas que no devero estar sujeitos ao controlo de verses. Esses podero incluir ficheiros criados pelo compilador, *.obj, *.lst, talvez uma pasta de produto usada para armazenar o executvel. Sempre que submetas alteraes o TortoiseSVN mostra os ficheiros no versionados, que enchem a lista de ficheiros na caixa de dilogo submeter. Est claro que podes desligar essa visualizao, mas poders ento te esquecer de adicionar um novo ficheiro fonte. A melhor maneira para evitar esses problemas adicionar os ficheiros derivados lista de ignorados do projecto. Desse modo, eles nunca iro aparecer na caixa de dilogo submeter, mas os ficheiros fonte genuinamente no versionados sero ainda assinalados.

80

Daily Use Guide

Se tu clicares com o boto direito num nico ficheiro no versionado e seleccionares, a partir do menu de contexto, o comando TortoiseSVN Adiconar lista de ignorados, um submenu aparecer permitindo-te seleccionar s aquele ficheiro ou todos com a mesma extenso. Se seleccionares mltiplos ficheiros, no haver submenu e s podes adicionar esses ficheiros/pastas especficos. Se queres remover um ou mais itens da lista de ignorados, clica com o boto direito nesse itens e selecciona TortoiseSVN Remover da lista de ignorados Podes ainda aceder propriedade svn:ignore da pasta. Isso permite-te especificar padres mais gerais usando caracteres de substituio de nome de ficheiros, descritos na seguinte seco. Consultar Seco 4.17, Configuraes de Projecto para mais informaes para configurar propriedades directamente. Por favor, ter em ateno que cada padro para ignorar tem de ser colocado numa linha separada, separ-los por espaos no resulta.

Lista Global de Ignorados


Outra maneira de ignorar ficheiros adicion-los lista global de ignorados. A grande diferena aqui que a lista global de ignorados uma propriedade local. Aplica-se a todos os projectos Subversion, mas apenas no PC local. De modo geral melhor usar a propriedade svn:ignore quando possvel, porque pode ser aplicado a um projecto em especfico e funciona para todos que SVN exportem o projecto. Consultar Seco 4.30.1, Preferncias Gerais para mais detalhes.

Ignorando Itens Versionados


Ficheiros e pastas versionados nunca podem ser ignorados - essa uma funcionalidade do Subversion. Se versionares um ficheiro por engano, l em Seco B.8, Ignorar ficheiros que j esto versionados para instrues em como o desversionar.

4.13.1. Correspondncia de Padres em Listas de Ignorados


O ignorar de padres no Subversion usa a substituio do nome de ficheiro, uma tcnica usada no Unix para especificar ficheiros recorrendo a meta-caracteres e wildcards (caracteres de substituio). Os seguintes caracteres tm significado especial: * Corresponde a qualquer cadeia de caracteres, incluindo a cadeia vazia (sem caracteres). ? Corresponde a qualquer carcter isolado. [...] Corresponde a qualquer um dos caracteres no interior dos parnteses rectos. Dentro dos parnteses rectos, um par de caracteres separados por - corresponde a qualquer carcter lexicalmente entre os dois. Por exemplo [AGm-p] corresponde a qualquer um de A, G, m, n, o ou p. Correspondncia de padres sensvel a maisculas e minsculas, o que pode causar problemas no Windows. Podes forar a insensibilidade a maisculas e minsculas fora, ao emparelhar caracteres, e.g. para ignorar *.tmp, independentemente ao tamanho da letra, podes usar um padro como *.[Tt][Mm][Pp]. Se queres uma definio oficial para substituio de nome de ficheiro, podes encontr-la nas especificaes do IEEE para a linguagem de comando da da linha de comandos (shell) Pattern Matching Notation [http:// www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_13].

No Usar Caminhos na Lista Global de Ignorados


No deves incluir informao de caminhos no teu padro. A correspondncia de padres tem como funo ser utilizado contra nomes de ficheiros e nomes de pastas. Se queres ignorar todos as pastas CVS adiciona apenas CVS lista de ignorados. No h necessidade de especificar CVS */CVS como

81

Daily Use Guide

fazias em verses anteriores. Se queres ignorar todas as pastas tmp quando elas existem dentro da pasta prog, mas no dentro da pasta doc, devers usar em alternativa a propriedade svn:ignore. No h maneira fivel de conseguir isto com recurso a padres globais de ignorados.

4.14. Removendo, Movendo e Renomeando


Ao contrrio do CVS, o Subversion permite renomear e mover ficheiros e pastas. Portanto no submenu TortoiseSVN existem entradas de menu para remover e renomear.

Figura 4.29. Menu de contexto do Explorador para ficheiros versionados 4.14.1. Removendo ficheiros e pastas
Usa TortoiseSVN Remover para remover ficheiros ou pastas do subversion. Quando tu executas TortoiseSVN Remover num ficheiro, este removido imediatamente da tua cpia de trabalho tal como marcado para remoo no repositrio, na prxima submisso. A pasta pai do ficheiro mostra a sobreposio de cone apagado. At tu submeteres a alterao, poders recuperar o ficheiro usando TortoiseSVN Reverter na pasta pai. Quando usas o TortoiseSVN Remover num ficheiro, este permanece na tua cpia de trabalho, mas a sobreposio de cone muda para indicar que est marcado para remoo. At submeteres a alterao poders recuperar a pasta usando o TortoiseSVN Reverter na prpria pasta. Esta diferena de comportamento entre ficheiros e pastas, parte do Subversion e no do TortoiseSVN. Se queres remover um tem do repositrio, mas mant-lo localmente como um ficheiro/pasta no versionado, usa Menu de Contexto Extendido Remover (manter local). Tens de manter premida a tecla Shift enquanto clicas com o boto direito no item, no painel lista do explorador (painel direito), de modo a veres isto no menu de contexto estendido.

82

Daily Use Guide

Se um ficheiro removido via explorador em vez de usar o menu de contexto do TortoiseSVN, a caixa de dilogo submeter mostra esses ficheiros e deixa-te tambm remove-los do controlo de verses antes da submisso. No entanto se actualizares a tua cpia de trabalho, o Subversion ir detectar o ficheiro em falta e substitui-lo pela ltima verso no repositrio. Se precisas de remover um ficheiro sob controlo de verses, usa sempre TortoiseSVN Remover para que o Subversion no tenha que adivinhar o que querias realmente fazer. Se uma pasta removida via explorador em vez de usar o menu de contexto TortoiseSVN, a tua cpia de trabalho ficar quebrada e no poders efectuar submisses. Se actualizares a tua cpia de trabalho, o Subversion ir substituir a pasta em falta pela ltima verso do repositrio, e ento podes apag-la correctamente usando TortoiseSVN Delete.

Recuperando um ficheiro ou pasta removido


Se removeste um ficheiro ou pasta e j submeteste essa operao de remoo para o repositrio, ento o TortoiseSVN Reverter normal no o pode mais recuperar. Mas o ficheiro ou pasta no est totalmente perdido. Se conheces a reviso em que o ficheiro ou pasta foi removido (se no sabes, usa a caixa de dilogo do registo para a encontrares), abre o navegador de repositrio e comuta para essa reviso. Selecciona o ficheiro ou pasta que removeste, clica com o boto direito e selecciona Menu de Contexto Copiar para..., como destino para essa operao de cpia, selecciona o caminho para a tua cpia de trabalho.

4.14.2. Movendo ficheiros e pastas


Se queres fazer um simples renomear no lugar de um ficheiro ou pasta, usa Context Menu Alterar nome... Insere o novo nome para o item e est feito. Se queres mover ficheiros dentro da tua cpia de trabalho, talvez para uma subpasta diferente, usa o manpulo de arrastar-e-largar do boto direito do rato: 1. selecciona os ficheiros ou pastas que queres mover 2. Arrasta-os com o boto direito para a nova localizao dentro da cpia de trabalho 3. Larga o boto direito do rato 4. No menu que surge selecciona Menu de Contexto SVN Mover para aqui iten(s) com controlo de verses

Submeter a pasta pai


Visto que renomeaes e movimentos so executados como uma remoo seguida por uma adio, devers submeter a pasta pai do ficheiro renomeado/movido para que a parte removida do renomeado/movido seja apresentado na caixa de dilogo submeter. Se no submeteres a parte removida do renomeado/movido ir ficar para trs no repositrio, e quando os teus colegas actualizarem, o ficheiro antigo no ser removido. i.e. eles tero ambos, o antigo e as novas cpias. Tu deves submeter a pasta renomeada antes de alterar qualquer dos ficheiros dentro dessa pasta, seno a tua cpia de trabalho pode ficar realmente baralhada. Podes tambm usar o navegador de repositrio para mover itens no mesmo. Consultar Seco 4.24, O Navegador de Repositrio para saberes mais.

No SVN Mover Externos


No devers usar os comandos TortoiseSVN Mover ou Renomear numa pasta que foi criada usando svn:externals. Esta aco teria como causaria a remoo do item externo do seu reposi-

83

Daily Use Guide

trio pai, provavelmente irritando muitas outras pessoas. Se necessitas de mover uma pasta de externos, devers usar um vulgar mover de linha de comando (shell), e ento ajustar as propriedades svn:externals das pastas pai de origem e destino.

4.14.3. Mudando maisculas e minsculas no nome do ficheiro


Efectuando alteraes apenas nas maisculas e minsculas no nome de um ficheiro complicado com o Subversion no Windows, porque durante um curto espao de tempo durante a mudana de nome, ambos os nomes de ficheiros tero de existir. Como o Windows tem um sistema de ficheiros insensvel a maisculas e minsculas, isto no funciona usando o comando Alterar-nome usual. Afortunadamente existem (pelo menos) dois mtodos possveis para renomear um ficheiro sem perder a sua histria de registo. importante renome-lo dentro do Subversion. Apenas renome-lo no explorador ir corromper a tua cpia de trabalho! Soluo A) (recomendada) 1. Submeter as alteraes na tua cpia de trabalho. 2. Renomear o ficheiro directamente no repositrio, de letraMAISCULA para LETRAmaiscula, usando o navegador de repositrio. 3. Actualizar a tua cpia de trabalho. Soluo B) 1. Renomear de letraMAISCULA para letraMAISCULA_ com o comando alterar-nome do submenu do TortoiseSVN. 2. Submeter as alteraes. 3. Renomear de letraMAISCULA_ para letraMAISCULA. 4. Submeter as alteraes.

4.14.4. Lidando com conflitos de maisculas e minsculas no nome do ficheiro


Se o repositrio j contm dois ficheiros com o mesmo nome, diferindo apenas nas misculas e minsculas (e.g. TEST.TXT e test.txt), no conseguirs actualizar ou SVN exportar a pasta pai num cliente Windows. Enquanto o Subversion suporta nomes de ficheiros sensveis a misculas e minsculas, o Windows no. Isto por vezes acontece quando duas pessoas submetem, a partir de cpias de trabalho separadas, ficheiros que por acaso tm o mesmo nome mas com uma diferena de maisculas e minsculas. Pode tambm acontecer quando os ficheiros so submetidos a partir de um sistema, com um sistema de ficheiros sensvel a maisculas e minsculas, como o Linux. Nesse caso tens de decidir qual o que queres manter e remover (ou alterar o nome) do outro no repositrio.

Prevenindo dois ficheiros com o mesmo nome


Existe um gancho de servidor disponvel em: http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/ que previne submisses que resultem em conflitos de maisculas e minsculas.

4.14.5. Reparando Renomeaes de Ficheiros


Por vezes o teu IDE amigvel ir renomear ficheiros por ti como parte de um processo de refactorao, e claro no ir avisar o Subversion. Se tentares submeter as tuas alteraes, o Subversion ir ver o velho ficheiro como

84

Daily Use Guide

desaparecido e o novo como ficheiro no versionado. Poderias apenas adicionar o ficheiro ao controlo de verses, mas assim perderias a sua histria, j que o Subversion no sabe que ambos os ficheiros esto relacionados. Uma melhor maneira ser, notificar o Subversion de que esta alterao na realidade uma alterao de nome, e poders faze-lo dentro das caixas de dilogo Submeter e Verificar alteraes. Simplesmente selecciona ambos os ficheiros, o com nome antigo (em falta) e o com o novo nome (no versionado), e usa Context Menu Reparar movimento para emparelhar os dois ficheiros como uma renomeao.

4.14.6. Removendo Ficheiros No Versionados


Normalmente tu configuras a tua lista de ignorados tal que todos os ficheiros gerados sejam ignorados pelo Subversion. Mas se queres limpar todos esse itens ignorados de modo a produzir uma verso limpa? Por norma tu inserias isso na tua makefile, mas se quiseres depurar a tua makefile ou alterar o sistema de build, ser til ter uma maneira de limpar a casa. O TortoiseSVN disponibiliza tal opo usando Menu de Contexto Estendido Remover itens sem controle de verso.... Tens de manter premida a tecla Shift enquanto clicas com o boto direito na pasta, no painel de lista do explorador (painel direito) de modo a veres isto no menu de contexto estendido. Esta aco ir abrir uma caixa de dilogo que listar todos os ficheiros no versionados em qualquer ponto da tua cpia de trabalho. Podes ento seleccionar ou desseleccionar os itens a remover. Quando tais itens so removidos usando o cesto de reciclagem para que no caso de te enganares e removeres um ficheiro que deveria estar versionado, poderes ainda recuper-lo.

4.15. Desfazer Alteraes


Se pretenderes desfazer todas as alteraes que efectuaste num ficheiro desde a ltima actualizao, precisas de seleccionar o ficheiro, clicar com o boto direito para aparecer o menu de contexto e ento seleccionar o comando TortoiseSVN Reverter Uma caixa de dilogo ir aparecer, mostrando-te os ficheiros que alteraste e podes reverter. Seleccionar os que queres reverter e clica no OK.

Figura 4.30. Caixa de Dilogo Reverter

85

Daily Use Guide

Se queres desfazer uma remoo ou renomeao, precisas de usar o Reverter na pasta pai j que o item removido no existir, para poderes clicar sobre ele com o boto direito. Se pretendes desfazer a adio de um item, executado no menu de contexto como TortoiseSVN Desfazer adio.... Na realidade isto tambm um reverter, mas neste caso o nome foi alterado para se tornar mais bvio. As colunas nesta caixa de dilogo podem ser customizadas da mesma maneira que as colunas na caixa de dilogo Verificar alteraes. Consulta Seco 4.7.3, Estado Remoto e Local para mais detalhes.

Desfazer Alteraes que j foram Submetidas


Reverter apenas desfaz as tuas alteraes locais. No desfaz quaisquer alteraes que tenham sido j submetidas. Se pretendes desfazer todas as alteraes que j foram submetidas numa reviso particular, consulta Seco 4.9, Caixa de Dilogo Registo de Revises para mais informao.

Reverter Lento
Quando reverteres alteraes, podes descobrir que essa operao demora muito mais tempo do que estavas espera. Isto acontece porque a verso modificada do ficheiro enviado para o cesto de reciclagem, para que possas recuperar as tuas alteraes no caso de reverteres por engano. No entanto, se o teu cesto de reciclagem estiver cheio, o Windows tomar mais tempo a encontrar um local para colocar o ficheiro. A soluo simples: ou esvazia o cesto de reciclagem ou desactiva a caixa Usar a reciclagem enquanto revertendo nas preferncias do TortoiseSVN.

4.16. Limpar
Se um comando do Subversion no pode concluir com sucesso, talvez devido a problemas de servidor, pode deixar a tua cpia de trabalho num estado inconsistente. Neste caso precisas de usar TortoiseSVN Limpar na pasta. uma boa ideia fazer isto no nivel de topo da tua cpia de trabalho. A limpeza tem outro til efeito secundrio. Se a data de um ficheiro foi alterada mas no o seu contedo, o Subversion no conseguir distinguir se foi realmente alterado, excepo da execuo de uma comparao byte a byte com a cpia pura. Se tens muitos ficheiros neste estado, isto torna o adquirir o estado muito lento, que far com que muitas caixas de dilogo respondam lentamente. Executando a Limpeza na tua cpia de trabalho ir reparar essas marcas de tempo quebradas restaurando a verificao de estado a toda a velocidade.

Usar Marcas de Tempo de Submisso


Algumas verses anteriores do Subversion eram afectadas por um problema que provocava um desencontro das marcas de tempo, quando SVN exportavas com a opo verificada Usar marcas de tempo de submeter. Usa o comando de limpesa para acelerar essas cpias de trabalho.

4.17. Configuraes de Projecto

86

Daily Use Guide

Figura 4.31. Pgina de propriedades do explorador, aba do Subversion


Por vezes tu queres obter informao mais detalhada sobre um ficheiro/pasta do que a da sobreposio do cone. Podes obter toda a informao que o Subversion providencia, na caixa de dilogo de propriedades do explorador. Apenas selecciona o ficheiro ou pasta e selecciona no menu de contexto Menu do Windows propriedades (nota: esta a entrada normal do menu de propriedades que o explorador providncia, e no a do submenu TortoiseSVN!). Na caixa de dilogo de propriedades o TortoiseSVN adicionou uma nova pgina de propriedades para ficheiros/pastas, sob o controlo do Subversion, onde podes ver toda a informao relevante sobre o ficheiro/pasta.

4.17.1. Propriedades Subversion

87

Daily Use Guide

Figura 4.32. Pgina de propriedades do Subversion


Podes ler e acertar as propriedades do Subversion a partir da caixa de dilogo das propriedades do Windows, mas tambm a partir de TortoiseSVN propriedades e do interior das listas de estado do TortoiseSVN, ou seja Menu de contexto propriedades. Podes adicionar as tuas prprias propriedades, ou algumas propriedades com significado especial para o Subversion. Essas comeam com svn:. svn:externals uma dessas propriedades; Descobre como lidar com externos em Seco 4.18, Itens Externos.

4.17.1.1. svn:keywords
O Subversion suporta expanso de palavras-chave do tipo CVS, que podem ser usadas para embeber informao de reviso e nome de ficheiro dentro do prprio ficheiro. As palavras-chave actualmente suportadas so: $Date$ Data da ltima submisso conhecida. Isto baseado em informao obtida quando actualizas a tua cpia de trabalho. No verifica o repositrio para tentar encontrar alteraes mais recentes. $Revision$ Reviso da ltima submisso conhecida. $Author$ Autor que fez a ltima submisso conhecida. $HeadURL$ O URL completo deste ficheiro no repositrio. $Id$ A combinao comprimida das quatro palavras-chave prvias. Para descobrir como usar estas palavras-chave, consulta o svn:keywords section [http://svnbook.red-bean.com/ en/1.5/svn.advanced.props.special.keywords.html] no livro do Subversion, que te dar uma descrio completa dessas palavras-chave e em como activa-las e us-las. Para mais informao sobre as propriedades no Subversion, consulta Special Properties [http://svnbook.redbean.com/en/1.5/svn.advanced.props.html].

88

Daily Use Guide

4.17.1.2. Adicionando e Editando Propriedades

Figura 4.33. Adicionando propriedades


Para adicionar uma nova propriedade clica primeiro em Adicionar.... Selecciona o nome da propriedade pretendida a partir da combo box, ou escreve um nome da tua escolha, e insere um valor na caixa em baixo. As propriedades que requerem valores mltiplos, como uma lista de ignorados, podem ser introduzidos em vrias linhas. Clicar em OK para adicionar essa propriedade lista. Se queres aplicar a propriedade a muitos itens de uma s vez, selecciona os ficheiros/pastas no explorador e selecciona Menu de contexto propriedades Se queres aplicar a propriedade a cada ficheiro e pasta na hierarquia abaixo da pasta corrente, verifica a caixa de verificao Recursiva. Algumas propriedades, como por exemplo svn:needs-lock, s podem ser aplicadas em ficheiros, ento o nome da propriedade no aparece na lista drop down para pastas. Podes, no entanto, ainda aplicar tal propriedade recursivamente a todos os ficheiros na hierarquia, mas ters de escrever o nome da propriedade manualmente. Se desejas editar uma propriedade que j exista, selecciona essa propriedade a partir da lista das propriedades existentes e clica em Editar.... Se desejas remover uma propriedade que j exista, seleciona essa propriedade da lista de propriedades existentes e clica em Remover. A propriedade svn:externals pode ser usada para puxar outros projectos do mesmo repositrio ou de um repositrio completamente diferente. Para mais informao, consultar Seco 4.18, Itens Externos.

4.17.1.3. Exportando e Importando Propriedades


Com frequncia te encontras a aplicar o mesmo conjunto de propriedades inmeras vezes, por exemplo bugtraq:logregex. Para simplificar o processo de copiar propriedades de um projecto para outro, podes usar a funcionalidade Exportar/Importar. A partir do ficheiro ou pasta onde as propriedades esto j acertadas, usa TortoiseSVN propriedades, selecciona as propriedades que desejas exportar e clica em Exportar.... Sers chamado a introduzir o nome do ficheiro onde sero guardadas os nomes das propriedades.

89

Daily Use Guide

A partir da pasta(s) onde desejas aplicar essas propriedades, usa TortoiseSVN propriedades e clica em Importar....Sers chamado a introduzir o nome do ficheiro de onde importar, ento navega para a localizao onde guardaste o ficheiro exportado previamente e selecciona-o. As propriedades sero adicionadas s pastas no recursivamente. Se queres adicionar propriedades recursivamente a uma rvore segue os passo acima e, ento na caixa de dilogo propriedades selecciona cada propriedade vez e, clica em Editar..., verifica a caixa Aplicar propriedade recursivamente e clica no OK. O formato do ficheiro Import binrio e proprietrio do TortoiseSVN. O seu nico propsito transferir propriedades usando o Import e Export, pelo que no h necessidade de editar esses ficheiros.

4.17.1.4. Propriedades Binrias


O TortoiseSVNpode lidar com valores de propriedades binrias usando ficheiros. Para ler um valor de propriedade binria Guarda... para um ficheiro. Para acertar um valor binrio usa um editor hex ou outra ferramenta apropriada para criar o ficheiro com o contedo requerido, e Carrega... a partir desse ficheiro. Apesar das propriedades binrias no serem usadas com frequncia, elas podem ser teis em certas aplicaes. Por exemplo, se estiveres a armazenar enormes ficheiros grficos, ou se a aplicao usada para carregar o ficheiro enorme, tu poders querer guardar uma miniatura da imagem como uma propriedade, para que possas obter uma rpida pr-visualizao.

4.17.1.5. Configurao automtica de propriedades


Tu podes configurar o Subversion e o TortoiseSVN para automaticamente acertar propriedades em ficheiros e pastas, quando so adicionadas ao repositrio. Existem duas maneiras de o fazer. Podes editar o ficheiro de configurao do subversion para activar esta funcionalidade no teu cliente. A pgina Geral da caixa de dilogo preferncias do TortoiseSVN tem um boto editar que te leva l directamente. O ficheiro de config um ficheiro de texto simples que controla algum do funcionamento do Subversion. Necessitas de alterar duas coisas: primeiro na seco intitulada miscellany descomenta a linha enable-auto-props = yes. Segundo precisas de editar a seco abaixo para definires quais as propriedades que queres adicionadas a que tipo de ficheiros. Este mtodo uma funcionalidade padro do Subversion e funciona com qualquer cliente. No entanto tem de ser definida individualmente para cada cliente - no existe maneira de propagar essas configuraes a partir do repositrio. Um mtodo alternativo ajustar a propriedade tsvn:autoprops em pastas, como descrito na seco seguinte. Este mtodo s funciona para clientes TortoiseSVN, mas propagado para todas as cpias de trabalho aquando da actualizao. Qualquer que seja o mtodo que escolhas, devers ter em ateno que o auto-props s aplicado a ficheiros na altura em que eles so adicionados ao repositrio. O auto-props nunca alterar as propriedades dos ficheiros que j esto versionados. Se queres ter a certeza absoluta que os ficheiros novos tm aplicadas as propriedades correctas, devers colocar um gancho de pre-commit, de modo a rejeitar submisses onde as propriedades requeridas no esto colocadas.

Submeter as propriedades
As propriedades do Subversion so versionadas. Depois de alterares ou adicionares uma propriedade, ters de submeter essa alterao.

Conflitos em propriedades
Se houver um conflito ao submeter as alteraes, porque outro utilizador alterou a mesma propriedade, o Subversion gera o ficheiro .prej. Apaga este ficheiro aps resolveres o conflito.

90

Daily Use Guide

4.17.2. Propriedades de Projecto TortoiseSVN


O TortoiseSVN tem algumas propriedades prprias, e essas comeam por tsvn:. tsvn:logminsize fixa o tamanho mnimo da mensagem de registo para a submisso. Se inserires uma mensagem mais curta do que a fixada, a submisso desactivada. Esta funcionalidade muito til para te recordar de colocares uma mensagem correcta e descritiva para cada submisso. Se esta propriedade no for fixada, ou o valor for zero, mensagens de registo vazias sero permitidas. tsvn:lockmsgminsize fixa o tamanho mnimo de uma mensagem de bloqueio. Se introduzires uma mensagem mais curta do que aqui especificada, o bloqueio desactivado. Esta funcionalidade muito til para te lembrar de colocar uma mensagem correcta e descritiva para cada bloqueio que obteres. Se esta propriedade no for fixada, ou o valor for zero, mensagens de bloqueio vazias sero permitidas. tsvn:logwidthmarker usada por projectos que requerem que as mensagens de registo sejam formatadas com um comprimento mximo (tipicamente 80 caracteres) antes de uma quebra de linha. Fixando esta propriedade para um valor diferente de zero ir fazer duas coisas caixa de dilogo de introduo de mensagens de registo: coloca um marcador para indicar o comprimento mximo, e desactiva o ajuste de palavras na visualizao, para que possas ver se o texto que inseriste muito longo. Nota: esta funcionalidade s funcionar correctamente se tu tiveres uma fonte de comprimento fixo seleccionada para as mensagens de registo. tsvn:logtemplate usado por projectos que tm regras acerca da formatao das mensagens de registo. A propriedade mantm uma cadeia de caracteres multi-linha que ser inserida na caixa de mensagens de submisso quando inicias a submisso. Podes ento edit-la para incluir a informao requerida. Nota: Se estiveres tambm a usar a tsvn:logminsize, tem a certeza de fixares um comprimento maior que o do template ou perders o mecanismo de proteco. O Subversion permite que tu fixes autoprops que sero aplicados a ficheiros recentemente adicionados ou importados, baseado na extenso do ficheiro. Isto depende de cada cliente ter fixado os autoprops apropriados no seu ficheiro de configurao do Subversion. tsvn:autoprops pode ser fixado em pastas e essas sero integradas com os autoprops locais quando algum ficheiro for adicionado ou importado. O formato o mesmo dos autoprops do Subversion, e.g. *.sh = svn:eol-style=native;svn:executable fixa duas propriedades em ficheiros com a extenso .sh. Se houver um conflito entre autoprops locais e tsvn:autoprops, as configuraes de projecto tomam precedncia porque so especficas a esse projecto. Na caixa de dilogo Submeter tens a opo de colar a lista de ficheiros alterados, incluindo o estado de cada ficheiro (adicionado, modificado, etc). tsvn:logfilelistenglish define se o estado do ficheiro inserido em Ingls ou na lngua localizada. Se a propriedade no fixada, o valor por defeito true. O TortoiseSVN pode usar mdulos verificadores de ortografia que tambm so usados pelo OpenOffice e Mozilla. Se tens estes correctamente instalados, esta propriedade ir determinar qual o verificador de ortografia a usar, i.e. em que linguagem as mensagens de registo do teu projecto devero ser escritas. tsvn:projectlanguage fixa o mdulo de linguagem que o motor de verificao ortogrfica dever usar quando inseres uma mensagem de registo. Podes encontrar valores para a tua lingua nesta pgina: MSDN: Language Identifiers [http://msdn2.microsoft.com/en-us/library/ms776260.aspx]. Podes inserir este valor em decimal ou em hexadecimal se prefixado com 0x. Por exemplo Ingls (US) pode ser introduzido como 0x0409 ou 1033. A propriedade tsvn:logsummary usada para extrair a parte da mensagem de registo que ser mostrada, na caixa de dilogo de registo, como o seu sumrio. O valor da propriedade tsvn:logsummary dever ser inserida como uma linha de cadeia de caracteres regex que contm um grupo regex. O que corresponder a esse grupo ser usado como resumo. Um exemplo: \[SUMMARY\]:\s+(.*) Ir apanhar tudo depois de [SUMMARY], na mensagem de registo, e usa-a como o sumrio.

91

Daily Use Guide

Quando queres adicionar uma nova propriedade, podes escolher uma da lista da combo box, ou podes inserir um nome de propriedade que desejes. Se o teu projecto usa algumas propriedades customizadas, e se queres que essas propriedades apaream na lista da combo box (para evitar erros de ortografia quando inserires o nome da propriedade), podes criar uma lista das tuas propriedades customizadas usando tsvn:userfileproperties e tsvn:userdirproperties. Aplica essas propriedades a uma pasta. Quando tu fores editar as propriedades de qualquer item filho, as tuas propriedades costumizadas iro aparecer na lista de nomes de propriedades pr-definidas. Algumas propriedades tsvn: requerem um valor true/false. O TortoiseSVN tambm entende yes como sinnimo para true e no como sinonimo para false. O TortoiseSVN pode-se integrar com algumas ferramentas de seguimento de problemas. Isto usa as propriedades de projecto que comeam com bugtraq:. Consulta Seco 4.28, Integrao com Sistemas de identificao de Bugs/Gestores de Problemas para mais informao. Podes ainda integrar com alguns navegadores de repositrio web-based, usando as propriedades de projecto que comeam por webviewer:. Consulta Seco 4.29, Integrao com visualizadores de repositrio Web-based para mais informao.

Fixar propriedades de projecto em pastas


Essas propriedades de projecto especiais devem ser fixadas em pastas para o sistema funcionar. Quando submetes um ficheiro ou pasta, as propriedades so lidas dessa pasta. Se as propriedades no so encontradas a, o TortoiseSVN ir procurar na direco ascendente atravs da rvore de ficheiros de modo s encontrar, at encontrar uma pasta no versionada, ou a raiz da rvore (e.g. C:\).Se tens a certeza que cada utilizador s SVN exporta a partir e.g. trunk/ e no de alguma subpasta, ento suficiente fixar as propriedades no trunk/. Se no tens a certeza, devers fixar as propriedades recursivamente em cada subpasta. A colocao mais profunda da propriedade na hierarquia do projecto sobrepem-se s colocaes em nveis superiores (mais perto do trunk/). For project properties only you can use the Recursive checkbox to set the property to all sub-folders in the hierarchy, without also setting it on all files. When you add new sub-folders using TortoiseSVN, any project properties present in the parent folder will automatically be added to the new child folder too.

Cuidado
Apesar de as propriedades de projecto do TortoiseSVN serem extremamente teis, elas s funcionam com o TortoiseSVN, e algumas so funcionaram com verses recentes. Se as pessoas que trabalham no teu projecto usam uma variedade de clientes Subversion, ou possivelmente tm verses antigas do TortoiseSVN, poders querer usar ganchos de repositrio para impor as polticas de projecto. Propriedades de projecto s podem ajudar a implementar uma poltica, nuca podem imp-la.

4.18. Itens Externos


Por vezes til construir uma cpia de trabalho a partir de vrios SVN exportar diferentes. Por exemplo, poders querer que diferentes ficheiros ou subpastas venham de diferentes localizaes do repositrio, ou talvez, at de diferentes repositrios. Se queres que cada utilizador tenha a mesma disposio, podes definir as propriedades svn:externals para puxar o recurso especificado para a localizao onde ser necessrio.

4.18.1. Pastas Externas


Digamos que SVN exportas uma cpia de trabalho do /project1 para D:\dev\project1. Seleccionas a pasta D:\dev\project1, clicas com o boto direito e escolhes Menu do Windows Propriedades, a partir do menu de contexto. Aparecer a caixa de dilogo Propriedades. Em seguida vai aba Subversion, e a podes

92

Daily Use Guide

fixar as propriedades. Clica Adicionar.... Selecciona a propriedade svn:externals a partir da combobox e, escreve na caixa de edio o URL do repositrio, no formato url folder, ou se quiseres especificar uma reviso particular, -rREV url folder. Podes adicionar mltiplos projectos externos, 1 por linha.Supem que fixaste essas propriedades no D:\dev\project1:

http://sounds.red-bean.com/repos sounds http://graphics.red-bean.com/repos/fast%20graphics "quick graphs" -r21 http://svn.red-bean.com/repos/skin-maker skins/toolkit Agora clica Fixar e submete as tuas alteraes. Quando tu (ou outro utilizador qualquer) actualizar a cpia de trabalho, o Subversion ir criar uma subpasta D:\dev\project1\sounds e SVN exporta o projecto sounds, outra subpasta D:\dev\project1\quick_graphs, contendo o projecto graphics, e finalmente uma subpasta encadeada D:\dev\project1\skins\toolkit, contendo a reviso 21 do projecto skin-maker. Os URLs tm de ser convenientemente escapados, ou no iro funcionar, e.g. devers substituir cada espao com %20, como mostrado no segundo exemplo, em cima. Se queres que o caminho local inclua espaos ou outro caracter especial, tens rode-lo em aspas, ou usar o caracter \ (barra invertida), como um caracter de escape, ao estilo da linha de comandos do linux, precedendo cada caracter especial. claro que isto tambm significa que tens de necessriamente usar / (barra), como delimitador de caminho. De notar que este comportamento novo no Subversion 1.6 e, no funcionar com clientes mais antigos.

Usa nmeros de reviso explcitos


Devers considerar seriamente, o uso de nmeros de reviso explcitos em todos as tuas definies externas, como descrito acima. Fazendo-o significa que, ters de decidir a altura de puxar uma diferente fotografia da informao externa, e exactamente qual a fotografia a puxar. Aparte do senso comum de no ser supreendido por alteraes de repositrios de terceiros, que no possas controlar, usar nmeros de revises explicitos, tambm significa que se reverters a tua cpia de trabalho para uma reviso anterior, as tuas definies externas iro tambm reverter para o estado que tinham nessa reviso prvia. O que por sua vez significa que, as cpias de trabalho externas sero actualizadas para corresponder o estado que elas tinham, quando o teu repositrio estava nessa reviso prvia. Para projectos de software isto pode ser a diferena entre uma construo(build) falhada ou com sucesso, de uma fotografia antiga da tua complexa base de cdigo.

Definies antigas do svn:externals


O formato mostrado aqui foi introduzido no Subversion 1.5. Podes tambm ver o formato antigo, que tem a mesma informao, numa pasta diferente. O novo formato prefervel, j que suporta vrias e teis funcionalidades descritas abaixo, mas no ir funcionar em clientes antigos. As diferenas so mostradas em Subversion Book [http://svnbook.red-bean.com/en/1.5/svn.advanced.externals.html]. If the external project is in the same repository, any changes you make there there will be included in the commit list when you commit your main project. Se o projecto externo est num repositrio diferente, qualquer alterao que fizeres no mesmo, ser notificada quando submeteres o teu projecto principal, no entanto, ters de submeter essas alteraes externas separadamente. Se usares URLs absolutos nas definies svn:externals, e tiveres de transferir a tua cpia de trabalho (i.e., se o URL do teu repositrio se alterar), ento os teus externos no se alteraro e podero no mais funcionar. Para evitar tais problemas, o cliente Subversion, na verso 1.5 ou superior, suporta URLs externos relativos. So suportados quatro diferentes mtodos de especificar um URL relativo . Nos exemplos seguintes assume-se que temos dois repositrios: um em http://example.com/svn/repos-1 e outro em http://example.com/svn/repos-2. Temos um SVN exportado do http://example.com/svn/ repos-1/project/trunk em C:\Working e a propriedade svn:externals est colocada no trunk.

93

Daily Use Guide

Relativo pasta pai Esses URLs comeam sempre com a cadeia de caracteres ../, por exemplo:

../../widgets/foo

common/foo-widget

. Isto ir extrair http://example.com/svn/repos-1/widgets/foo em C:\Working\common\foo-widget. De notar que, o URL relativo ao URL da pasta com a propriedade svn:externals e no, pasta onde o externo est escrito no disco. Relativo ao repositrio raiz Esses URLs comeam sempre com a cadeia de caracteres ^/, por exemplo:

^/widgets/foo

common/foo-widget

. Isto ir extrair http://example.com/svn/repos-1/widgets/foo em C:\Working\common\foo-widget. Poders facilmente referir-te a outros repositrios com o mesmo SVNParentPath (uma pasta comum contendo vrios repositrios). Por exemplo:

^/../repos-2/hammers/claw

common/claw-hammer

Isto ir extrair http://example.com/svn/repos-2/hammers/claw em C:\Working\common\claw-hammer. Relativo ao esquema URLs a comear com a cadeia de caracteres // copiam s a parte do esquema do URL. Isto til quando a mesma mquina necessita de ser acedida com esquemas diferentes, dependendo da localizao na rede; e.g. clientes com acesso de intranet usam http://, enquanto clientes externos usam svn+ssh://. Por exemplo:

//example.com/svn/repos-1/widgets/foo

common/foo-widget

. Ser extraido como http://example.com/svn/repos-1/widgets/foo ou svn+ssh:// example.com/svn/repos-1/widgets/foo, dependendo do mtodo usado para SVN exportar o C: \Working. Relativo ao nome do servidor URLs a comear com a cadeia de caracteres /, copiam a parte do URL do esquema e do nome da mquina, por exemplo:

/svn/repos-1/widgets/foo

common/foo-widget

. Extrair http://example.com/svn/repos-1/widgets/foo em C:\Working\common\foo-widget. Mas se tu SVN exportares a tua cpia de trabalho a partir de outro servidor em svn +ssh://another.mirror.net/svn/repos-1/project1/trunk, ento a referncia externa ir extrair svn+ssh://another.mirror.net/svn/repos-1/widgets/foo. Podes tambm especificar uma reviso cavilha depois do URL, se necessrio; e.g. http://sounds.redbean.com/repos@19. Se necessitas de mais informao em como o TortoiseSVN lida com Propriedades, consulta Seco 4.17, Configuraes de Projecto.

94

Daily Use Guide

Para saberes mais sobre os diferentes mtodos de aceder a subprojectos comuns, consulta Seco B.6, Incluir um subprojecto comum.

4.18.2. Ficheiros Externos


A partir do Subversion 1.6 podes adicionar um ficheiro nico externo, tua cpia de trabalho, usando a mesma sintaxe que as pastas. No entanto, existem algumas restries. O caminho para o ficheiro externo dever colocar o ficheiro numa pasta versionada j existente. No geral faz mais sentido colocar o ficheiro directamente na pasta que tem colocado svn:externals, mas poder ser numa subpasta versionada, se necessrio. Por contraste, pastas externas iro automticamente criar qualquer pasta intermdia no versionada, se necessrio. O URL para um ficheiro externo dever estar no mesmo repositrio que o URL em que o ficheiro exteno ser inserido; ficheiros externos inter-repositrios no so suportados. Um ficheiro externo comporta-se apenas como qualquer outro ficheiro versionado em vrios aspectos, mas eles no podem ser movidos ou apagados, usando os comandos normais; a propriedade svn:externals ter de ser ento modificada.

Supporte incompleto de ficheiros externos em Subversion 1.6


No Subversion 1.6 no possvel remover um ficheiro externo da tua cpia de trabalho, uma vez que o tenhas adicionado, mesmo que removas tambm a propriedade svn:externals. Ters de SVN exportar uma nova cpia de trabalho para remover o ficheiro.

4.19. Ramificando/Etiquetando
Uma das funcionalidades dos systemas de controlo de verses, a sua capacidade para isolar alteraes em linhas de desenvolvimento separadas. Esta linha conhecida como um ramo. Ramos so com frequncia usados para experimentar novas funcionalidades, sem perturbar a linha principal de desenvolvimento com erros de compilador e bugs. Assim que a nova funcionalidade est suficientemente estvel, ento o ramo de desenvolvimento integrado de volta para o ramo principal (trunk). Outra funcionalidade dos sistemas de controlo de vcerses, a sua capacidade para marcar revises particulares (e.g. uma verso de entrega), para que possas a qualquer altura recrear uma certa construo ou ambiente. Este processo conhecido como etiquetagem. O Subversion no tem comandos especiais para ramificar ou etiquetar, mas em alternativa usa a chamada cpia barata. Cpias baratas so semelhantes aos hard links no linux, o que significa que, em vez de efectuar uma cpia completa no repositrio, uma ligao interna criada apontando para a rvore/reviso especfica. Como resultado ramos e etiquetas so rpidas a criar e no ocupam praticamente nenhum espao extra no repositrio.

4.19.1. Criando um Ramo ou Etiqueta


Se importaste o teu projecto com a estrutura de pastas recomendada, criar uma verso ramo ou etiqueta muito simples:

95

Daily Use Guide

Figura 4.34. A Caixa de Dilogo de Ramificar/Etiquetar


Selecciona na tua cpia de trabalho a pasta para que queres copiar o ramo ou etiqueta, ento selecciona o comando TortoiseSVN Ramificar/Etiquetar.... O URL de destino, por defeito, para o novo ramo ser o URL fonte no qual a tua cpia de trabalho est baseada. Necessitars de editar esse URL de modo a obteres o novo caminho para o teu ramo/etiqueta. Sendo assim, em vez de

http://svn.collab.net/repos/ProjectName/trunk poders querer algo como

http://svn.collab.net/repos/ProjectName/tags/Release_1.10 Se no te recordas da conveno de nomes que usaste na ltima vez, clica no boto direita para abrir o navegador de repositrio, para que possas visualizar a estrutura do repositrio. Agora tens de seleccionar a fonte da cpia. Aqui tens trs opes: A reviso HEAD do repositrio O novo ramo copiado directamente, no repositrio, a partir da reviso HEAD. No necessrio transferir nenhuns dados da tua cpia de trabalho e, o ramo criado muito rapidamente.

96

Daily Use Guide

Reviso especfica no repositrio O novo ramo copiado, directamente no repositrio, mas podes escolher uma reviso anterior. Isto til se te esqueceste de fazer uma etiqueta quando fizeste uma entrega do teu projecto na semana anterior. Se no te lembras do nmero da reviso, clica no boto direita para mostrar o registo de verses, e selecciona uma reviso a partir da. Mais uma vez nenhuns dados so transferidos da tua cpia de trabalho, e o ramo criado muito rapidamente. Cpia de trabalho O novo ramo uma cpia idntica da tua cpia de trabalho local. Se actualizaste alguns ficheiros numa verso anterior da tua CT, ou se efectuaste alteraes locais. Isso exactamente o que vai na cpia. Naturalmente este tipo de etiquetas complexas pode envolver transferncias de dados da tua CT para o repositrio, se este no j l existir. Se queres que a tua cpia de trabalho seja automaticamente trocada para o ramo recentemente criado, usa a caixa de verificao Trocar a cpia de trabalho para o novo ramo/etiqueta. Mas se o fizeres, tem primeiro a certeza de que a tua cpia de trabalho no contm alteraes. Se tiver, essas alteraes sero fundidas na CT do ramo, quando fizeres a troca. Prime OK para submeter a nova cpia para o repositrio. No te esqueas de introduzir uma mensagem de registo. De notar que a cpia criada dentro do repositorio. Ter em ateno que, a no ser que troques a tua cpia de trabalho para o ramo recentemente criado, a criao de um ramo ou etiqueta no afecta a tua cpia de trabalho. Mesmo que cries o ramo a partir da tua cpia de trabalho, essas alteraes so submetidas para o novo ramo, e no para o trunk, no entanto a tua CT ser ainda marcada como modificada em relao ao trunk.

4.19.2. SVN Exportar ou Trocar...


...essa no (realmente) a questo. Enquanto um SVN exportar descarrega tudo a partir de um ramo do repositrio para a tua cpia de trabalho, TortoiseSVN Trocar... apenas transfere os dados alterados, para a tua cpia de trabalho. ptimo para a carga na tua rede e bom para a tua pacincia. :-) Para poderes trabalhar com o teu ramo ou etiqueta criado de fresco tens vrias opes: TortoiseSVN SVN Exportar para criares uma verso exportada de fresco numa pasta vazia. Podes SVN exportar para qualquer localizao no teu disco e, podes criar quantas cpias de trabalho, a partir do teu repositrio, que desejes. Trocar a tua cpia de trabalho corrente para a cpia recentemente criada no repositrio. Mais uma vez selecciona a pasta de topo do teu projecto e usa TortoiseSVN Trocar... a partir do menu de contexto. Na prxima caixa de dilogo, insere o URL do ramo que acabaste de criar. Selecciona a boto de rdio Reviso Head e clica no OK. A tua cpia de trabalho trocada para o novo ramo/etiqueta. O Trocar funciona tal como Actualizar, na forma em que nunca descarta as tuas alteraes locais. Quaisquer alteraes que tenhas feito na tua cpia de trabalho, que nunca tenhas submetido, sero integradas quando efectuares a troca. Se no quiseres que isto acontea, devers submeter as alteraes antes da troca ou reverter a tua cpia de trabalho para uma verso j submetida (HEAD tipicamente). Se queres trabalhar no trunk e no ramo, mas no queres o custo de uma verso SVN exportada de fresco, poders usar o Explorador do Windows para efectuar a cpia do teu trunk exportado para outra pasta e, TortoiseSVN Trocar... essa cpia para o teu novo ramo.

97

Daily Use Guide

Figura 4.35. A Caixa de Dilogo Trocar


Apesar de o prprio Subversion no fazer distino entre etiquetas e ramos, a maneira como eles tipicamente so usados difere um pouco. Tags are typically used to create a static snapshot of the project at a particular stage. As such they not normally used for development - that's what branches are for, which is the reason we recommended the /trunk / branches /tags repository structure in the first place. Working on a tag revision is not a good idea, but because your local files are not write protected there is nothing to stop you doing this by mistake. However, if you try to commit to a path in the repository which contains /tags/, TortoiseSVN will warn you. Poder ser que necessites de efectuar alteraes posteriores numa entrega que tenha sido j etiquetada. A maneira correcta para lidar com isto criar um novo ramo a partir da etiqueta e submeter o mesmo. Efectua as tuas Alteraes nesse ramo e ento cria uma nova etiqueta a partir deste ramo, e.g. Version_1.0.1. Se modificares a cpia de trabalho criada a partir de um ramo, e submeteres, ento todas as alteraes iro para o novo ramo e no para o trunk. S as modificaes so armazenadas, o resto permanece como cpia barata.

4.20. Integrar
Quando ramos so utilizados para manter linhas de desenvolvimento separadas, em alguma altura tu querers integrar as alteraes, que efectuaste num ramo, de volta para o trunk, ou vice-versa. importante perceber como funciona no Subversion o ramificar e integrar antes de comeares a us-los, pelo que se poder tornar algo complexo. altamente recomendado que leias o captulo Branching and Merging [http:// svnbook.red-bean.com/en/1.5/svn.branchmerge.html] no livro do Subversion, que te dar uma descrio completa, e com muitos exemplos, de como usado. O prximo ponto a anotar que integrar processa-se sempre na tua cpia de trabalho. Se queres integrar alteraes num ramo, tens de ter uma cpia de trabalho nesse ramo e invocar o assistente de integrao a partir dessa cpa de trabalho, usando TortoiseSVN Integrar.... De modo geral uma boa ideia executar uma integrao numa cpia de trabalho no modificada. Se tens outras alteraes na tua CT, submete-as primeiro. Se a integrao no correr como esperavas, poders ter de reverte-la, e o comando Reverter ir descartar todas as alteraes incluindo qualquer uma que tenhas feito antes da integrao. Existem trs casos de utilizao comuns para integrar, que so lidados de maneira ligeiramente diferente, como descrito abaixo. A primeira pgina do assistente de integrao questiona-te a selecciona o mtodo que precisas. Integrar um intervalo de revises Este mtodo cobre o caso em que criaste uma ou mais revises num ramo ( ou no trunk) e queres portar essas alteraes para um ramo diferente.

98

Daily Use Guide

O que ests a pedir ao Subversion para fazer o seguinte: Calcula as alteraes necessrias para ir [DA] reviso 1 do ramo A [AT] reviso 7 do ramo A, e aplica essas alteraes minha cpia de trabalho (do trunk ou ramo B). Reintegrar um ramo Este mtodo cobre o caso em que criaste um ramo de funcionalidade, como descrito no livro do Subversion. Todas as alteraes do trunk foram portadas para o ramo de funcionalidade, semana a semana, e agora que a funcionalidade est concluda, desejas integr-la de volta no trunk. Porque tens mantido o ramo de funcionalidade sincronizado com o trunk, as ltimas verses do ramo e trunk sero absolutamente idnticas excepo das alteraes do teu ramo. Este um caso especial da integrao de rvore, descrita abaixo, e apenas requer o URL de origem para integrar do (usualmente) teu ramo de desenvolvimento. Ele usa as funcionalidades de rastreamento-de-integrao do Subversion, para calcular o intervalo correcto de revises a usar e executar verificaes adicionais, de modo a garantir que o ramo foi totalmente actualizado com as alteraes do trunk. Isto garante que tu, por acidente, no desfaas o trabalho que outros tenham submetido para o trunk desde as tuas ltimas alteraes sincronizadas. Aps a integrao, todo o ramo de desenvolvimento foi completamente integrado de volta para a principal linha de desenvolvimento. O ramo agora redundante e poder ser removido. Aps teres executado uma reintegrao de um ramo, no devers continuar a us-lo para desenvolvimento. A razo para tal a seguinte; se tentares mais tarde re-sincronizar o teu ramo j existente, o seguidor de integrao ver a tua reintegrao como uma alterao do trunk que no foi ainda integrada no ramo, e ir tentar integrar a integrao ramo-para-trunk de volta para o ramo! A soluo para isto criar um novo ramo a partir do trunk para continuar a prxima fase do teu desenvolvimento. Integrar duas rvores diferentes Este um caso mais geral do mtodo de reintegrao. O que ests a pedir ao Subversion para fazer : Calcula as alteraes necessrias para ir [DA] reviso head do trunk [PARA] a reviso head do ramo, e aplica essas alteraes minha cpia de trabalho (do trunk).. O resultado lquido ser que o trunk fica agora exactamente como o ramo. Se o teu servidor/repositrio no suporta o rastreamento-de-integrao ento esta a nica maneira para integrar um ramo de volta para o trunk. Outro caso ocorre quando tu ests a usar ramos de vendedores e, necessitas de integrar as alteraes a seguir a um novo gotejar do vendedor no teu cdigo do trunk. Para mais informao, consulta o capitulo vendor branches [http://svnbook.red-bean.com/en/1.5/svn.advanced.vendorbr.html] no livro do Subversion.

4.20.1. A Integrar Um Intervalo de Revises

99

Daily Use Guide

Figura 4.36. O Assistente de Integrao - Seleciona o Intervalo de Revises


No campo De: introduz o URL completo da pasta, do ramo ou etiqueta que contm as alteraes que queres portar para a tua cpia de trabalho. Podes tambm clicar ... para navegar no repositrio e encontrar o ramo desejado. Se j integraste anteriormente deste ramo, usa apenas a lista drop down que mostra o histrico dos URLs previamente utilizados. No campo Intervalo de revises a integrar introduz a lista de revises que desejas integrar. poder ser uma nica reviso, uma lista de revises especficas separadas por virgulas, ou um intervalo de revises separadas por um hfen, ou uma qualquer combinao destes.

Importante
Existe uma diferena importante na maneira como o intervalo de revises especificado no TortoiseSVN, comparado com o cliente de linha de comando. A maneira mais fcil para o visualizar pensar numa vedao com postes e painis de vedao. Com o cliente de linha de comando, tu especificas as alteraes a integrar usando duas revises postes de vedao, que especificam os pontos antes e depois. Com o TortoiseSVN tu especificas uma lista-de-alteraes para integrar utilizando paineis de vedao. A razo para isto torna-se clara quando usas a caixa de dilogo de registo para especificar as revises a integrar, onde cada reviso aparece como uma lista-de-alteraes. Se integrares revises em pedaos, o mtodo descrito no livro do subversion mostra-te a integrar 100-200 desta vez e 200-300 da prxima. Com o TortoiseSVN terias de integrar 100-200 desta vez e 201-300 da prxima.

100

Daily Use Guide

Esta diferena gerou muita discusso acalorada nas listas de correio. Ns reconhecemos que existe uma diferena para o cliente da linha de comandos, mas cremos que para a maioria dos utilizadores do GUI mais fcil de compreender o mtodo que implementmos. A maneira mais fcil para seleccionar o intervalo de revises que precisas clicar no Mostrar registo, j que este ir listar as alteraes mais recentes com os teus comentrios de registo. Se queres integrar as alteraes a partir de uma nica reviso, selecciona apenas essa reviso. Se queres integrar as alteraes de vrias revises ento, selecciona esse intervalo (usando o modificador usual Shift). Clica no OK e o nmeros da lista de revises a integrar sero preenchidas por ti. Se queres remover alteraes integradas, da tua cpia de trabalho, para reverter uma alterao que j foi submetida, selecciona as revises a reverter e tem a certeza que a caixa de verificao Reverter integrao est verificada. Se j integraste algumas alteraes deste ramo, espera-se que tenhas introduzido, uma nota da ltima reviso integrada, na mensagem de registo quando submeteste a alterao. Nesse caso podes usar o Mostrar Registo na cpia de trabalho para seguir essa mensagem de registo. Relembrando que estamos a pensar nas revises como listas-de-alteraes, devers usar a reviso depois do ponto de chegada da ltima integrao, como ponto de partida para esta integrao. Por exemplo, se integraste as revises de 37 a 39 da ltima vez, ento o ponto de partida para esta integrao dever ser a reviso 40. Se ests a usar as funcionalidades de rastreamento de integrao, do Subversion, no precisas de te lembrares quais as revises que j foram integradas - o Subversion ir recordar-se disso por ti. Se deixas o intervalo de revises em branco, todas as revises que no foram ainda integradas sero includas. Consulta Seco 4.20.6, Rastreamento de Integrao para saberes mais. Se podem estar outras pessoas a submeter alteraes ento tem cuidado no uso da reviso HEAD. Poder no se referir reviso que ests a pensar se algum efectuou uma submisso aps a tua ltima actualizao. Clica Seguinte e segue para Seco 4.20.4, Opes de Integrao

4.20.2. Reintegrar um ramo

101

Daily Use Guide

Figura 4.37. O Assistente de Integrao - Integrao para Reintegrar


Para integrar um ramo de funcionalidade de volta para o trunk, devers arrancar o assistente de integrao de dentro da cpia de trabalho do trunk. No campo Do URL: introduz o URL completo da pasta do ramo que queres integrar de volta. Podes tambm clicar ... para navegar o repositrio. Existem algumas condies que se aplicam a uma integrao de reintegrao. Primeiramente, o servidor dever suportar o rastreamento de integrao. A cpia de trabalho dever ser de profundidade infinita (sem exportaes SVN dispersas), e no dever ter nenhumas alteraes, itens trocados ou itens que foram actualizadas para revises diferentes da HEAD. Todas as alteraes para o trunk feitas durante o desenvolvimento do ramo, devero ter sido j integradas transversalmente para o ramo (ou marcadas como tendo sido feitas). O intervalo de revises a integrar ser ento calculado automaticamente.

4.20.3. A Integrar Duas rvores Diferentes

102

Daily Use Guide

Figura 4.38. O Assistente de Integrao - Integrao de rvores


Se ests a usar este mtodo para integrar um ramo de funcionalidade de volta para o trunk, necessitas de arrancar o assistente de integrao de dentro da cpia de trabalho do trunk. No campo De: introduz o URL completo da pasta trunk. Isto pode soar errado, mas lembra-te que o trunk o ponto de partida para o qual queres adicionar as alteraes do ramo. Podes tambm clicar ... para navegar o repositrio. No campo Para: introduz o URL completo da pasta do ramo de desenvolvimento. Em ambos os campos Da Reviso e Para Reviso, introduz o nmero da ltima reviso em que as duas rvores estiveram sincronizadas. Se tens a certeza que ningum est a fazer submisses, podes usar a reviso HEAD em ambos os casos. Se existe uma hipotese de algum ter feito uma submisso desde essa sincronizao, deves usar nmeros de revises especficas para evitar perder submisses mais recentes. Podes tambm usar o Mostrar Registo para seleccionar a reviso.

4.20.4. Opes de Integrao


Esta pgina do assistente deixa-te especificar opes avanadas antes de comear o processo de integrao. Na maior parte do tempo tu podes apenas usar as opes por defeito. Tu podes especificar a profundidade a usar na integrao, i.e. at que ponto dever a integrao penetrar na tua cpia de trabalho. Os termos de profundidade usados esto descritos em Seco 4.3.1, Profundidade do Checkout. A profundidade por defeito a Cpia de trabalho, e quase sempre o que precisas. Na maior parte do tempo tu queres que a integrao tome conta do histrico do ficheiro, para as que alteraes relativas a um antepassado comum sejam integradas. Por vezes tu querers integrar ficheiros que so talvez relaci-

103

Daily Use Guide

onados, mas no no repositrio. Por exemplo tu podes ter verses importadas 1 e 2 de uma biblioteca de terceiros, em duas pastas separadas. Apesar de eles estarem logicamente relacionadas, o Subversion no tem conhecimento disto porque o que apenas v so tarballs que importaste. Se tu tentares integrar as diferenas entre essas duas rvores irs ver uma remoo completa seguida por uma adio completa. Para levar o Subversion a usar s as diferenas baseadas no caminho, em vez das diferenas baseadas na histria, verifica a caixa Ignorar ascendncia. Consultar mais sobre este tpico no livro do Subversion, Noticing or Ignoring Ancestry [http://svnbook.redbean.com/en/1.5/svn.branchmerge.advanced.html#svn.branchmerge.advanced.ancestry] Tu podes especificar a forma como os fins-de-linha e espaos-em-branco so lidados. Essas opes so descritas em Seco 4.10.2, Opes de Fim-de-Linha e Espaos-Brancos. O comportamento por defeito tratar todos os espaos-em-branco e os fins-de-linha como alteraes a serem integradas. Se ests a usar o rastreamento de integrao, e queres marcar a reviso como tendo sido integrada, sem actualmente efectuar essa integrao aqui, verifica a caixa de verificao S regista a integrao. Existem duas razes possveis para que tu queiras fazer isto. Poder ser que a integrao seja muito complicada para os algoritmos de integrao, pelo que inseres as alteraes manualmente, e ento marcas como integrada, para que o rastreador de integrao conhea esse facto. Ou queiras evitar que uma reviso particular seja integrada. Considerando-a como j integrada, ir evitar que a integrao ocorra com clientes sensveis ao seguimento. Now everything is set up, all you have to do is click on the Merge button. If you want to preview the results Test Merge performs the merge operation, but does not modify the working copy at all. It shows you a list of the files that will be changed by a real merge, and notes those areas where conflicts will occur. A caixa de dilogo progresso de integrao, mostra cada estgio da integrao com os intervalos das revises envolvidas. Isto pode indicar uma reviso a mais do que estavas espera. Por exemplo se tu pedes para integrar a reviso 123, a caixa de dilogo de progresso ir reportar Integrar revises 122 at 123. Para compreender isto tu precisas de te recordar que a Integrao est intimamente relacionada com a Comparao. O processo de integrao funciona atravs da gerao de listas de diferenas entre dois pontos no repositrio, e ento aplicar essas diferenas tua cpia de trabalho. A caixa de dilogo de progresso simplesmente mostra o ponto de inicio e fim para a comparao.

4.20.5. Rever os Resultados de Integrao


A integrao est agora completa. uma boa ideia dar uma vista de olhos na integrao e ver se est como o esperado. Integrar normalmente algo complicado. Os conflitos surgem com frequncia se o ramo divergiu bastante do trunk. Para clientes e servidores Subversion, anteriores verso 1.5, nenhuma informao sobre integrao armazenada e as revises tem de ser seguidas manualmente. Quando tiveres testado as alteraes e fores ento submeter esta reviso, a tua mensagem de registo dever incluir sempre os nmeros das revises que foram portadas na integrao. Se queres aplicar posteriormente outra integrao, necessitars de conhecer o que j integraste, j que no queres portar uma alterao mais do que uma vez. Para mais informao, consulta Best Practices for Merging [http://svnbook.red-bean.com/en/1.4/ svn.branchmerge.copychanges.html#svn.branchmerge.copychanges.bestprac] no livro do Subversion. Se o teu servidor e todos os clientes esto a correr o Subversion 1.5, ou verso superior, a funcionalidade de rastreamento de integrao ir registar as revises integradas e evitar que uma reviso seja integrada mais que uma vez. Isto torna a tua vida muito mais simples, j que podes simplesmente integrar o intervalo completo de revises de cada vez, e saber que s as novas revises sero realmente integradas. A gesto de ramos importante. Se queres manter este ramo actualizado com o trunk devers ter o cuidado de integrar com frequncia, para que o ramo e o trunk no divirjam muito. claro que devers evitar ainda a integrao repetida de alteraes, como descrito acima.

Dica
Se acabaste de integrar um ramo de funcionalidade de volta para o trunk, este agora contm todo o cdigo da nova funcionalidade, tornando-se o ramo obsoleto. Podes ento remove-lo do repositrio, se for requerido.

104

Daily Use Guide

Importante
O Subversion no pode integrar um ficheiro com uma pasta e vice-versa - s pastas com pastas e ficheiros com ficheiros. Se clicas num ficheiro e abres a caixa de dilogo de integrao, ento tens de dar o caminho para um ficheiro nessa caixa de dilogo. Se seleccionas uma pasta e abrires a caixa de dilogo, ento ters de especificar um URL de uma pasta para a integrao.

4.20.6. Rastreamento de Integrao


O Subversion 1.5 introduz facilidades para rastreamento da integrao. Quando tu integras alteraes de uma rvore para outra, os nmeros de revises integradas so armazenadas e esta informao pode ser usada para vrios propsitos diferentes. Podes evitar o perigo de integrar a mesma reviso duas vezes (problema da integrao repetida). De cada vez que uma reviso for marcada como tendo sido integrada, integraes futuras, que incluam essa reviso no seu intervalo, iro ignor-la. Quando integras um ramo de volta para o trunk, a caixa de dilogo de registo pode-te mostrar as submisses no ramo como parte do registo do trunk, dando-te melhor rastreamento das alteraes. Quando mostras a caixa de dilogo de registo de dentro da caixa de dilogo de integrao, as revises j integradas so mostradas a cinzento. Quando mostrada a informao de responsabilidade para um ficheiro, podes ento escolher mostrar o autor original das revises integradas, em vez de, a pessoa que efectuou a integrao. Tu podes marcar revises como no integrar incluindo-as na lista de revises integradas sem realmente efectuar a integrao. A informao de rastreamento de integrao armazenada na propriedade svn:mergeinfo pelo cliente, quando executa uma integrao. Quando a integrao submetida, o servidor armazena essa informao numa base de dados, e quando tu requisitas a informao de integrao, registo ou responsabilidade, o servidor possa responder de acordo. Para o sistema funcionar correctamente deves assegurar que o servidor, repositrio e todos os clientes estejam actualizados. Clientes antigos no iro armazenar a propriedade svn:mergeinfo e servidores antigos no iro fornecer essa mesma informao, requisitada pelos novos clientes. Sabe mais sobre o rastreamento de integrao atravs do Subversion em Merge tracking documentation [http:// subversion.tigris.org/merge-tracking/index.html].

4.20.7. Lidando com Conflitos durante a Integrao


A integrao no corre sempre com suavidade. Por vezes existe um conflito, e se ests a integrar mltiplos intervalos, geralmente irs querer resolver o conflito antes de comeares a integrar o prximo intervalo. O TortoiseSVN ajuda-te atravs deste processo, mostrando-te a caixa de dilogo conflitos de integrao.

105

Daily Use Guide

Figura 4.39. A Caixa de Dilogo Conflitos de Integrao


Quando o conflito ocorre durante uma integrao, tens trs maneiras de lidar com ele. 1. You may decide that your local changes are much more important, so you want to discard the version from the repository and keep your local version. Or you might discard your local changes in favour of the repository version. Either way, no attempt is made to merge the changes - you choose one or the other. 2. Normalmente querers observar os conflitos e resolv-los. Nesse caso, escolhe o Editar Conflito que arrancar a ferramenta de integrao. Quando estiveres satisfeito com o resultado, clica Resolvido. 3. A ltima opo adiar a resoluo e continuar com a integrao. Tu podes escolher fazer isso para o ficheiro correntemente em conflito, ou para todos os ficheiros no resto da integrao. No entanto, se existirem mais alteraes nesse ficheiro, no ser possvel completar a integrao. Se no quiseres usar este processo iterativo, existe uma caixa de verificao na caixa de dilogo de progresso de integrao Integrar no-iteractivamente. Se esta est verificada e a integrao pode resultar num conflito, o ficheiro marcado como em conflito e a integrao continua. Ters de resolver os conflitos aps a concluso da totalidade da integrao. Se esta no est verificada, ento antes do ficheiro ficar marcado como em conflito, ters a oportunidade par resolver o mesmo. Isto tem a vantagem de, se um ficheiro sofre mltiplas integraes (mltiplas revises aplicam uma alterao a esse ficheiro), integraes subsequente iro ter sucesso, dependendo de que linhas so afectadas. Mas, est claro, no te podes afastar para beber um caf, enquanto a integrao est a decorrer ;)

4.20.8. Integrar um Ramo Completo


Se queres integrar todas as alteraes de uma ramo de funcionalidade de volta para o trunk, ento podes usar o TortoiseSVN Reintegrar integrao... a partir do menu de contexto extendido (mantm permido a tecla Shift enquanto clicas com o boto direito no ficheiro).

106

Daily Use Guide

Figura 4.40. Caixa de Dilogo de reintegrao de Integrao


Esta caixa de dilogo muito simples. Tudo o que tens de fazer configurar as opes para a integrao, como descrito em Seco 4.20.4, Opes de Integrao. O resto feito automaticamente pelo TortoiseSVN usando o rastreamento de integrao.

4.20.9. Manuteno do Ramo de Funcionalidade


Quando desenvolves uma nova funcionalidade num ramo separado, uma boa ideia definir uma poltica para reintegrao quando a funcionalidade estiver completa. Se outro trabalho est a decorrer no trunk ao mesmo tempo, poders descobrir que as diferenas tornar-se-o significativas ao longo do tempo, e integrar de volta pode-se tornar um pesadelo. Se a funcionalidade relativamente simples e o desenvolvimento no ser muito longo, ento poders adoptar uma abordagem simples, que manter o ramo inteiramente separado at a funcionalidade estar completa, ento integras as alteraes do ramo de volta para o trunk. No assistente de integrao isto dever ser um simples Integrar um intervalo de revises, com o intervalo de revises sendo o intervalo completo de revises do ramo. Se a funcionalidade ir demorar mais tempo e tu precisas de ter em conta todas as alteraes no trunk, ento tu necessitas de manter o ramo sincronizado. Isto significa simplesmente que periodicamente integras as alteraes do trunk no ramo, para que o ramo contenha todas as alteraes do trunk mais a nova funcionalidade. O processo de sincronizao usa Integrar um intervalo de revises. Quando a funcionalidade estiver completa, ento podes integr-la de volta para o trunk usando Reintegrar um ramo or Integrar duas rvores diferentes.

4.21. A bloquear
Geralmente o Subversion funciona melhor sem bloqueios usando os mtodos Copiar-Modificar-Integrar descritos anteriormente em Seco 2.2.3, A soluo de Copiar-Modificar-Integrar. No entanto existem algumas circunstncias em que poders necessitar de implementar alguma tipo de poltica de bloqueio. Se ests a usar ficheiros no integrveis, como por exemplo, ficheiros de grficos. Se duas pessoas alteram o mesmo ficheiro, e no possvel a integrao, s um dos dois ir perder as suas alteraes. A tua empresa sempre usou no passado um sistema de controlo de revises bloqueante, e houve uma deciso da administrao de que o melhor bloquear. Em primeiro lugar necessitas de garantir que o servidor Subversion est actualizado para, pelo menos, a verso 1.2. Verses anteriores no suportam de todo bloqueios. Se est a usar um acesso file://, ento est claro que s o teu cliente necessita de ser actualizado.

107

Daily Use Guide

4.21.1. Como Funciona o Sistema de Bloqueio no Subversion


Por defeito nada bloqueado, e qualquer um que tenha acesso para submeter, pode submeter alteraes em qualquer ficheiro a qualquer altura. Outros iro actualizar a sua cpia de trabalho periodicamente e as alteraes no repositrio sero integradas com as alteraes locais. Se tu Obteres o bloqueio num ficheiro, ento s podes submeter esse ficheiro. Submisses de outros utilizadores sero bloqueados at libertares o bloqueio. Um ficheiro bloqueado no pode ser modificado de forma alguma no repositrio, pelo que no poder ser apagado ou tambm renomeado, excepo do autor do bloqueio. No entanto outros utilizadores no tero necessariamente conhecimento de que tu obtiveste um bloqueio. A no ser que verifiquem o estado de bloqueio regularmente, a primeira vez que tero conhecimento ser quando ao submeterem a operao falhar, o que na maior parte dos caso no ser muito til. Para tornar mais fcil a gesto de bloqueios, existe uma propriedade nova no Subversion svn:needs-lock. Quando esta propriedade est configurada num ficheiro (para qualquer valor), quando o ficheiro SVN exportado ou actualizado a cpia local colocada em estado de s de leitura, a no ser que essa cpia tenha o bloqueio desse ficheiro. Isto actua como um aviso que no devers alterar esse ficheiro a no ser que primeiro obtenhas o seu bloqueio. Os ficheiros que so, versionados e s de leitura, so marcados com uma sobreposio especial do TortoiseSVN, que indica que necessitas de obter um bloqueio antes de editares. Os bloqueios so registados por localizao da cpia de trabalho tal como por autor. Se tiveres vrias cpias de trabalho (em casa, no trabalho) ento s poders obter um bloqueio numa dessas cpias de trabalho. Se um dos teus colegas adquire um bloqueio e vai de frias sem o libertar, o que fars? O Subversion providncia um meio de forar bloqueios. Libertar um bloqueio detido por outro referido como Quebrar o bloqueio, e forar aquisio de um bloqueio detido por outrm referido como Roubar o bloqueio. Naturalmente essas so aces que no devers efectuar de nimo leve, se queres manter a amizade com os teus colegas de trabalho. Os bloqueios so registados no repositrio e um testemunho de bloqueio criado na tua cpia de trabalho. Se existe uma discrepncia, por exemplo se algum quebrou o bloqueio, o testemunho local do bloqueio fica invlido. O repositrio sempre a referncia definitiva.

4.21.2. Obter um Bloquieo


Selecciona o ficheiro(s) na tua cpia de trabalho, para o qual queres adquirir um bloqueio, e ento selecciona o comando TortoiseSVN Obter Bloqueio....

108

Daily Use Guide

Figura 4.41. A Caixa de Dilogo Bloquear


Uma caixa de dilogo aparece para permitir introduzir um comentrio, para que os outros possam ver porqu bloqueaste o ficheiro. O comentrio opcional s usado correntemente com repositrios baseados em Svnserve. Se (e s se) necessitas de roubar o bloqueio de algum, verifica a caixa Roubar bloqueio, e clica no OK. Se seleccionas um ficheiro e ento usas TortoiseSVN Obter bloqueio..., a caixa de dilogo bloquear ir abrir com todos os ficheiros em todas as subpastas seleccionadas para bloquear. Se realmente queres bloquear uma hierarquia inteira, esta a maneira de o fazer, mas podes-te tornar muito impopular junto dos teus colegas de trabalho se bloqueias todo o projecto. Usa com moderao...

4.21.3. Libertar um Bloqueio


Para ter a certeza que no te esqueces de libertar um bloqueio que no precisas mais, os ficheiros bloqueados so mostrados na caixa de dilogo submeter e seleccionados por defeito. Se continuares com a submisso, os bloqueios so removidos nos ficheiros seleccionados, mesmos se os ficheiros no foram modificados. Se no queres libertar o bloqueio em certos ficheiros, podes desseleccion-las (se no foram modificadas). Se queres manter um bloqueio num ficheiro que modificaste, tens de activar a caixa de verificao Manter bloqueios, antes de submeteres as tuas alteraes. Para libertar manualmente um bloqueio, selecciona o(s) ficheiro(s) na tua cpia de trabalho, para os quais queres libertar os bloqueios e selecciona o comando TortoiseSVN Libertar bloqueio No h mais nada a introduzir pelo que o TortoiseSVN ir contactar o repositrio e libertar os bloqueios. Podes tambm usar este comando numa pasta, para libertar recursivamente, todos os bloqueios.

109

Daily Use Guide

4.21.4. Verificar o Estado dos Bloqueio

Figura 4.42. A Caixa de Dilogo Verificar Alteraes


Para ver os bloqueios que tu e os outros tm, podes usar TortoiseSVN Verificar alteraes.... Testemunhos de bloqueios locais aparecero imediatamente. Para verificar os bloqueios detidos por outros (e para ver se algum dos teus bloqueios esto quebrados ou roubados) necessitas de clicar em Verificar Repositrio. A partir daqui, do menu de contexto, podes tambm obter e libertar bloqueios tal como quebrar ou roubar bloqueios detidos por outros.

Evitar Quebrar e Roubar Bloqueios


Se quebrares ou roubares um bloqueio de outro sem lhe dizeres nada, podes potencialmente provocar perda de trabalho. Se ests a trabalhar com tipos de ficheiros no integrveis e roubas o bloqueio de outro, quando libertares o bloqueio, eles ficaram livres para submeter as suas alteraes e reescrevendo as tuas. O Subversion no perde dados, mas tu perdeste a proteco de trabalho-em-equipa que o bloqueio te deu.

4.21.5. Tornar os Ficheiros No-Bloqueados S de Leitura


Como mencionado acima, a maneira mais eficaz de usar os bloqueios configurar a propriedade svn:needslock em ficheiros. Consultar Seco 4.17, Configuraes de Projecto para instrues em como configurar propriedades. Ficheiros com esta propriedade configurada sero sempre SVN exportadas e actualizadas com a bandeira s-de-leitura levantada, a no ser que a tua cpia de trabalho tenha um bloqueio.

Como lembrete o TortoiseSVN usa uma sobreposio especial para indicar isto. Se aplicas uma poltica em que todo o ficheiro tem de ser bloqueado, ento achars mais fcil usar a funcionalidade auto-props do Subversion para fixar automticamente a propriedade, de cada vez que adicionas novos ficheiros. Consulta Seco 4.17.1.5, Configurao automtica de propriedades para mais informaes.

110

Daily Use Guide

4.21.6. Os Scripts do Gancho de Bloqueio


Quando crias um repositrio novo com o Subversion 1.2 ou superior, so criados quatro templates de gancho na pasta hooks do repositrio. Esses so invocados antes e depois de obter um bloqueio, e antes e depois de libertar um bloqueio. Ser uma boa ideia instalar no servidor um script de gancho post-lock e post-unlock, que envia um email indicando que ficheiro foi bloqueado. Com tal script instalado todos os teus utilizadores podem ser notificados se algum bloqueia/desbloqueia um ficheiro. Podes encontrar um exemplo de um script de gancho hooks/postlock.tmpl na pasta do teu repositrio. Podes tambm utilizar ganchos para proibir quebrar ou roubar bloqueios, ou talvez limit-lo a um administrador nomeado. Ou talvez querers enviar um email ao dono, quando um dos seus bloqueios quebrado ou roubado. Consulta Seco 3.3, Server side hook scripts para saberes mais.

4.22. Criar e Applicar Correces


Para projectos de cdigo aberto (como este) toda a gente tem acesso de leitura ao repositrio, e toda a gente pode contribuir para o projecto. Ento como so controladas essas contribuies? Se toda a gente pudesse submeter alteraes o projecto estaria em instabilidade permanente, e provavelmente permanentemente inutilizado. Nesta situao a alterao gerida atravs da submisso de um ficheiro de correco para a equipa de desenvolvimento, que tem acesso para escrever. Eles podem ento rever primeiro a correco e ento submet-la para o repositrio ou devolv-la ao autor. Ficheiros de correco so simplesmente ficheiros de Comparao-Unificada que mostram as diferenas entre a tua cpia de trabalho e a reviso base.

4.22.1. Criar um Ficheiro de Correco


Primeiro tu precisas de construir e testar as tuas alteraes. Ento em vez de usares TortoiseSVN Submeter... na pasta pai, seleccionas TortoiseSVN Criar correco...

Figura 4.43. A caixa de dilogo de Criar Correco

111

Daily Use Guide

Agora podes seleccionar os ficheiros que queres incluir na correco, tal como tu farias numa submisso completa. Isto ir produzir um ficheiro simples contendo um sumrio de todas as alteraes que efectuaste nos ficheiros seleccionados, desde a ltima actualizao do repositrio. As colunas nesta caixa de dilogo podem ser customizadas da mesma maneira que as colunas na caixa de dilogo Verificar alteraes. Consulta Seco 4.7.3, Estado Remoto e Local para mais detalhes. Tu podes produzir correces separadas, contendo alteraes em diferentes conjuntos de ficheiros. claro que se criaste um ficheiro de correco, e efectuaste mais alteraes aos mesmos ficheiros, criando uma segunda correco, o segundo ficheiro de correco ir incluir ambos os conjuntos de alteraes. Grava apenas o ficheiro usando um nome da tua escolha. Ficheiros de correces podem ter a extenso que desejes, mas por conveno eles dever usar a extenso .patch ou .diff. Agora ests pronto para submeter o teu ficheiro de correco. Tu podes tambm guardar a correco na rea de transferncia em vez de o fazer para um ficheiro. Poders fazer isto para que possas col-lo num email para ser revisto por outros. Ou se tiveres duas cpias de trabalho numa mquina e quiseres transferir alteraes de uma para outra, a correco na rea de transferncia a maneira conveniente de o fazer.

4.22.2. Aplicar um Ficheiro de Correco


Os ficheiros de correco so aplicados na tua cpia de trabalho. Isto dever ser feito a partir de uma pasta do mesmo nvel da que foi usada para criar a correco. Se no tens a certeza de qual , olha apenas para a primeira linha do ficheiro de correco. Por exemplo, se o primeiro ficheiro a ser trabalhado era doc/source/english/chapter1.xml e a primeira linha no ficheiro de correco Index: english/chapter1.xml, ento precisas de aplicar a correco na pasta doc/source/. No entanto, mesmo que estejas na cpia de trabalho correcta, se escolheres o nvel de pastas errado, o TortoiseSVN ir dar conta e sugere o nvel correcto. De modo a aplicar um ficheiro de correco tua cpia de trabalho, necessitas de pelo menos, ter acesso de leitura ao repositrio. A razo para isto que, o programa de integrao tem de referenciar as alteraes at reviso em que elas foram efectuadas pelo programador remoto. From the context menu for that folder, click on TortoiseSVN Apply Patch... This will bring up a file open dialog allowing you to select the patch file to apply. By default only .patch or .diff files are shown, but you can opt for All files. If you previously saved a patch to the clipboard, you can use Open from clipboard... in the file open dialog. Alternativamente, se o ficheiro de correco tem uma extenso .patch ou .diff, podes clicar directamente nele com o boto direito e seleccionar TortoiseSVN Aplicar correco.... Neste caso sers solicitado a introduzir a localizao da cpia de trabalho. Estes dois mtodos apenas diferem no modo de fazer a mesma coisa. Com o primeiro mtodo, tu seleccionas a CT e navegas at ao ficheiro de correco. Com o segundo, seleccionas o ficheiro de correco e navegas at CT. Uma vez que tenhas seleccionado o ficheiro de correco e a localizao da cpia de trabalho, o TortoiseMerge ir correr, integrando as alteraes do ficheiro de correco com a tua cpia de trabalho. Uma pequena janela lista os ficheiros que foram alterados. Efectua duplo clique em cada uma de cada vez, para reveres as alteraes e guardares os ficheiros integrados. A correco do programador remoto foi agora aplicada na tua cpia de trabalho, ento precisas agora de submeter de modo a permitir que todos possam aceder s alteraes a partir do repositrio.

4.23. Quem Alterou Que Linha


Por vezes tu precisas conhecer no s que linhas foram alteradas, mas tambm quem exactamente alterou linhas especficas num ficheiro. quando o comando TortoiseSVN Responsabilizar..., por vezes tambm referido como anotar vem a calhar.

112

Daily Use Guide

Este comando lista, para cada linha num ficheiro, o autor e a reviso em que a linha foi alterada.

4.23.1. Responsabilidade para Ficheiros

Figura 4.44. A Caixa de Dilogo de Anotar/Responsabilizar


Se no ests interessado nas alteraes em revises anteriores, podes fixar a reviso a partir da qual a responsabilizao deve comear. Fixa para 1, se queres a responsabilizao para cada reviso. Por defeito o ficheiro responsabilizado visualizado usando o TortoiseBlame, que salienta as diferentes revises para torn-lo mais fcil de ler. Se desejas imprimir ou editar o ficheiro de responsabilidade, selecciona Usar leitor de Texto para ver responsabilidades Tu podes especificar a forma como so lidados os fim-de-linha e os espaos em branco. Essas opes esto descritas em Seco 4.10.2, Opes de Fim-de-Linha e Espaos-Brancos. O comportamento por defeito tratar todas as diferenas de espaos-em-branco e fim-de-linha como alteraes reais, mas se queres ignorar uma alterao de indentao e encontrar o autor original, podes escolher uma opo apropriada aqui. Uma vez que primas OK, o TortoiseSVN comea a readquirir os dados para criar o ficheiro de responsabilidade. Toma ateno: Isto pode levar vrios minutos a concluir, dependendo de quanto o ficheiro mudou e, claro, da ligao de rede ao repositrio. Uma vez que o processo de responsabilidade tenha concludo, o resultado escrito num ficheiro temporrio onde poders ver os resultados.

113

Daily Use Guide

Figura 4.45. TortoiseBlame


O TortoiseBlame, que est includo com o TortoiseSVN torna o ficheiro de responsabilidade mais fcil de ler. Quando passas com o rato sobre uma linha, na coluna de informao da responsabilidade, todas as linhas com a mesma reviso so mostradas com um fundo mais escuro. Linhas de outras revises que foram alteradas pelo mesmo autor, so mostradas com um fundo mais claro. A colorao poder no funcionar to bem se o teu cran estiver configurado para o modo de 256 cores. Se clicares com o boto direito numa linha, todas as linhas com a mesma reviso sero destacadas, e todas as linhas de outras revises com o mesmo autor sero destacadas numa cor mais clara. Este destaque persistente permitindo-te mover o rato sem perder os destaques. clica outra vez nessa reviso para remover o destaque. Os comentrios de reviso (mensagem de registo) so mostrados numa caixa de dica, quando passas com o rato sobre a coluna de informao de responsabilidade. Se queres copiar a mensagem de registo dessa reviso usa o menu de contexto, que aparece quando clicas com o boto direito na coluna de informao de responsabilidade. Tu podes pesquisar no relatrio de responsabilidade usando Editar Localizar.... Isto permite-te procurar por nmeros de revises, autores e o contedo das prprias mensagens. Mensagens de registo no so includas na pesquisa - tu devers usar a caixa de dilogo de Registo para efectuar essa pesquisa. Podes tambm saltar para uma nmero de linha especfica usando, Editar Ir Para Linha.... Quando o rato est sobre as colunas de informao de responsabilidade, um menu de contexto est disponvel, que te ajudar a comparar revises e examinar o histrico, usando o nmero de reviso da linha sobre o rato, como referncia. Menu de contexto Responsabilizar pela reviso anterior gera um relatrio de responsabilidade para o mesmo ficheiro, mas usando a reviso anterior como o limite superior. Isto d-te o relatrio de responsabilidade para o estado do ficheiro, imediatamente antes da linha que ests a ver ter sido alterada. Menu de contexto Mostrar alteaes arranca o teu leitor de comparaes, mostrando-te o que foi alterado na reviso referenciada. Menu de contexto Mostrar registo mostra a caixa de dilogo de registo de revises, a comear na reviso referenciada. Se precisas um melhor indicador visual de onde esto as mais antigas e mais recentes alteraes, selecciona Ver Colorir idade das linhas. Isto ir usar um gradiente de cores para mostrar linhas mais recentes a vermelho

114

Daily Use Guide

e linhas mais antigas em azul. A colorao por defeito algo clara, mas podes alter-lo usando as preferncias do TrotoiseBlame. Se ests a usar o rastreamento de integrao, onde as linhas foram alteradas como resultado de uma integrao de outro caminho, o TortoiseBlame ir mostrar a reviso e autor da ltima alterao no ficheiro original em vez da reviso onde a integrao foi efectuada. Essas linhas esto assinaladas ao mostrar o autor e reviso em itlico. Se queres que as linhas integradas no sejam mostradas desta maneira, no verifiques a caixa de dilogo Incluir informao de integrao. Se queres ver os caminhos envolvidos na integrao, selecciona Ver Caminhos de integrao. As preferncias para o TortoiseBlame podem ser acedidas usando TortoiseSVN Preferncias... na aba TortoiseBlame. Consultar Seco 4.30.9, Preferncias do TortoiseBlame.

4.23.2. Diferenas de responsabilidade


Uma das limitaes do relatrio de responsabilidade que s mostra como estava o ficheiro numa determinada reviso, e mostra a ltima pessoa que alterou cada linha. Por vezes tu queres conhecer que alterao foi feita, tal como quem a fez. O que tu precisas aqui uma combinao de relatrios de comparao e responsabilidade. A caixa de dilogo registo de reviso inclui vrias opes que te permite fazer isto. Responsabilizar Revises No painel de topo, selecciona 2 revises e selecciona Menu de contexto Responsabilizar revises. Esta operao ir buscar os dados de responsabilidade para as 2 revises, e usa o visualizador de comparaes para comparar os dois ficheiros responsabilizados. Responsabilizar alteraes Selecciona uma reviso no painel de topo e ento pega num ficheiro no painel de fundo e selecciona Menu de contexto Responsabilizar alteraes. Esta operao ir buscar os dados de responsabilidade para a reviso seleccionada e para a reviso anterior, e usar o visualizador de comparao para comparar os dois ficheiros responsabilizados. Comparar e Responsabilizar com a BASE de Trabalho Mostra o registo para um s ficheiro, e no painel de topo, selecciona uma nica reviso e selecciona Menu de contexto Comparar e Responsabilizarcom a BASE de trabalho. Esta operao ir buscar os dados de responsabilidade para a reviso seleccionada, e para o ficheiro na BASE de trabalho, e usa o visualizador de comparao para comparar os dois ficheiros responsabilizados.

4.24. O Navegador de Repositrio


Por vezes necessitas de trabalhar directamente no repositrio sem teres uma cpia de trabalho. para isto que existe o Navegador de Repositrio. Tal como o explorador e as sobreposies de cones te permitem ver a tua cpia de trabalho, da mesma maneira o Navegador de Repositrio permite-te ver a estrutura e o estado do repositrio.

115

Daily Use Guide

Figura 4.46. O Navegador de Repositrio


Com o Navegador de Repositrio podes executar comandos tais como, copiar, mover, renomear,... directamente no repositrio. O Navegador de Repositrio tem um aspecto muito similar ao explorador do Windows, excepo de que mostra os contedos do repositrio numa reviso particular, em vez dos ficheiros no teu computador. No painel da direita podes ver a rvore de pastas e no painel da direita os contedos da pasta seleccionada. No topo da janela de navegao, do Navegador de Repositrio, tu podes introduzir o URL e a reviso do repositrio que queres navegar. Tal como o expolrador do Windows, tu podes clicar nos cabealhos de colunas do painel da direita, se queres seleccionar a disposio da ordenao. E tambm como no explorador existem menus de contexto disponveis em ambos os painis. O menu de contexto para um ficheiro permite-te: Abrir o ficheiro seleccionado com o leitor por defeito para esse tipo de ficheiro ou, com um programa tua escolha. Guarda uma cpia no versionada do ficheiro para o teu disco rgido. Mostrar o registo de reviso para esse ficheiro, ou mostra o grfico de todas as revises, para que possas ver de onde o ficheiro veio. Responsabiliza o ficheiro, para veres quem alterou que linha e quando. Remove ou renomea o ficheiro. Faz uma cpia do ficheiro, numa parte diferente do repositrio, ou para uma cpia de trabalho originada do mesmo repositrio. Ver/Editar as propriedades dos ficheiros. O menu de contexto para uma pasta, permite-te:

116

Daily Use Guide

Mostrar o registo de reviso para esse ficheiro, ou mostra o grfico de todas as revises, para que possas ver de onde veio a pasta. Exportar a pasta, para uma cpia local no versionada no teu disco rgido. SVN Exportar uma pasta, para produzir uma cpia de trabalho local no teu disco rgido. Criar uma nova pasta no repositrio. Adicionar ficheiros ou pastas, directamente no repositrio. Remover ou renomear a pasta. Make a copy of the folder, either to a different part of the repository, or to a working copy rooted in the same repository. Ver/Editar as propriedades da pasta. Marcar a pasta para comparao. A pasta marcada mostrada em negrito. Comparar a pasta com uma pasta previamente marcada, como uma comparao unificada, ou como uma lista de ficheiros alterados que podem ento ser visualmente comparados, usando a ferramenta de comparao por defeito. Isto pode ser particularmente til na comparao de duas etiquetas, ou o trunk e um ramo, para ver o que foi alterado. Se seleccionares duas pastas no painel direito podes ver as suas diferenas como uma comparao unificada, ou como uma lista de ficheiros que podem ser visualmente comparados usando a ferramenta de comparao por defeito. Se seleccionares multiplas pastas no painel da direita, podes svn exportar todas de uma vez s para uma pasta pai comum. Se seleccionares 2 etiquetas que foram copiadas a partir da mesma origem (tipicamente o /trunk/), podes usar Menu de Contexto Mostrar registo... para ver a lista de revises entre estes dois pontos de etiquetas. Podes usar F5 para refrescar a vista, como usual. Isto refrescar tudo o que actualmente visualizado. Se queres efectuar uma pr-busca ou refrescar a informao de ns que no foram ainda abertos, usa Ctrl-F5. Depois disso a expanso de qualquer nodo ser instantnea, sem atrasos de rede enquanto a informao recebida. Podes tambm usar o navegador de repositrio para operaes de arrastar-e-largar. Se arrastares uma pasta do explorador para o navegador-de-repositrio, esta ser importada para o repositrio. De notar que, se arrastares mltiplos itens, estes sero importados em submisses separadas. Se queres mover um item dentro do repositrio, arrasta com o boto direito do rato para a nova localizao. Se queres criar uma cpia, em vez de moveres o item, usa em alternativa Ctrl-arrastar com o boto direito. Ao copiar o cursor fica com o smbolo mais tal como no explorador. Se queres copiar/mover um ficheiro ou pasta para outra localizao, e tambm dar-lhe um novo nome ao mesmo tempo, podes ento arrastar com o boto direito ou Ctrl-arrastar com o boto direito no item, em vez de usar arrastar com o boto esquerdo. Nesse caso, a caixa de dilogo renomear mostrada, e podes ento introduzir um novo nome para a pasta ou ficheiro. Sempre que efectuares alteraes no repositrio usando um desses mtodos, sers recebido com uma caixa de dilogo de mensagem de registo. Se arrastares algo por em engano, est a tua oportunidade para cancelar a operao. Por vezes quando tentas abrir um caminho s recebido com uma mensagem de erro, em vez dos detalhes do item. Isto pode acontecer de tu especificaste um URL invlido, se no tens permisses de acesso, ou se h algum

117

Daily Use Guide

problema no servidor. Se queres copiar esta mensagem, para a incluir num email, clica apenas nela e usa o Menu de contexto Copiar mensagem de erro para a rea de transferncia, ou usa simplesmenteCtrl+C.

4.25. Grficos de Revises

Figura 4.47. O Grfico de Revises


Necessitas, por vezes, de saber de onde os ramos e etiquetas foram retirados do trunk, e a forma ideal para visualizar este tipo de informao um grfico ou uma estrutura em rvore. quando necessitas de usar TortoiseSVN Grafico de revises... Este comando analisa a histria das revises e tenta criar uma rvore que mostra os pontos em que as cpias foram feitas, e quando os ramos/etiquetas foram removidos.

Importante
De modo a gerar o grfico, o TortoiseSVN precisa de carregar da raiz do repositrio todas as mensagens de registo. No ser necessrio dizer que isto ir levar vrios minutos, mesmo com um repositrio com alguns milhares de revises, dependendo da rapidez do servidor, largura de banda da rede, etc. Se tentares isto com algo como o projecto Apache, que actualmente tem acima de 500.000 revises, poders ter de esperar por algum tempo. As boas notcias que ests a usar cache de registo, pelo que apenas ters de sofrer este atraso uma vez. Depois disso os dados de registo so armazenados localmente. O provisionamento de registo (cache) est activo nas preferncias do TortoiseSVN.

118

Daily Use Guide

4.25.1. Ns do Grfico de Revises


Cada n do grfico de revises representa uma reviso no repositrio onde algo foi alterado, na rvore que ests a observar. Diferentes tipos de ns podem ser distinguidos atravs da forma e cor. As formas so fixas, mas as cores podem ser alteradas usando TortoiseSVN preferncias Itens adicionados ou copiados Os itens que foram adicionados ou criados pela cpia de outro ficheiro/pasta, so mostrados como um rectngulo de cantos arredondados. A sua cor por defeito o verde. Etiquetas e trunks so tratados como um caso especial, e usam uma forma diferente dependendo de TortoiseSVN Preferncias Itens removidos Itens removidos, e.g. um ramo que no mais necessrio, so mostrados como um octgono (rectngulo com os cantos cortados). A cor por defeito o vermelho. Itens renomeados Itens renomeados so tambm mostrados como um octgono, mas a cor por defeito o azul. Reviso da extremidade do ramo O grfico est normalmente restringido a mostrar pontos de ramo, mas tambm til e comum, ter a possibilidade de ver a respectiva reviso HEAD para cada ramo. Se seleccionares Mostrar revises HEAD (mais recentes), cada n de reviso HEAD ser mostrado como uma elipse. De notar que a HEAD aqui refere-se ltima reviso submetida nesse caminho e no a reviso HEAD do repositrio Reviso da cpia de trabalho Se invocaste o grfico de revises a partir da cpia de trabalho podes optar por mostrar a reviso BASE no grfico usando Show WC revision, que marca o n BASE com uma moldura a negrito. Cpia de trabalho modificada Se invocaste o grfico de revises a partir de uma cpia de trabalho podes optar por mostrar um n adicional, que representa a cpia de trabalho modificada usando Mostrar modificaes do WC. Este ser um n elptico com uma moldura a negrito, em vermelho por defeito. Item normal Todos os outros itens so mostrados como um rectngulo simples. De notar que por defeito, o grfico s mostra os pontos onde itens foram adicionados, copiados ou removidos. Mostrando cada reviso do projecto ir gerar um grfico muito extenso para casos no triviais. Se queres realmente ver todas as revises onde foram feitas alteraes, existe uma opo para o fazer no menu Ver e na barra de ferramentas. A vista por defeito (sem agrupamento) coloca os ns de modo que a sua posio vertical fique na ordem estrita de revises, para que tenhas uma dica visual da ordem em que as coisas foram feitas. Quando esto na mesma coluna dois ns, a ordem muito bvia. Quando esto em colunas adjacentes dois ns, o deslocamento muito menor porque no h necessidade de evitar que os ns se sobreponham, e como resultado a ordem um pouco menos bvia. Tais optimizaes so necessrias de modo a manter a complexidade dos grficos numa dimenso aceitvel. Ter em ateno que esta ordenao usa o canto do n no lado mais antigo como referncia, i.e. o canto inferior do n, quando o grfico mostrado com os ns mais antigos no fundo. O canto de referncia significativo porque todas as formas de ns no so da mesma altura.

4.25.2. Alterando a Vista


Porque o grfico de revises normalmente bastante complexo, existem um nmero de funcionalidades que podem ser usadas para moldar a vista tua maneira. Estas esto disponiveis no menu Ver e a partir da barra de ferramentas. Agrupar ramos O comportamento por defeito (sem agrupamento) ter todas as linhas ordenadas estrictamente por reviso. Como resultado, ramos com vida longa e submisses dispersas, ocupam uma coluna inteira para apenas poucas alteraes tornando o grfico muito amplo.

119

Daily Use Guide

Este modo agrupa as alteraes por ramo para que no exista uma ordenao global de revises: Revises consecutivas num ramo sero (normalmente) mostradas em linhas consecutivas. Sub-ramos no entanto, so arrumados de tal maneira que ramos posteriores sero mostrados na mesma coluna, acima dos ramos mais antigos, de modo a manter o grfico esguio. Como resultado uma dada linha poder conter alteraes de diferentes revises. Mais antigo no topo Normalmente o grfico mostra a reviso mais antiga no fundo e a rvore cresce para cima. Usa esta opo para em alternativa crescer para baixo a partir do topo Alinhar rvores no topo Quando um grfico est partido em vrias rvores pequenas, as rvores podem aparecer na ordem natural de reviso ou alinhadas no fundo da janela, dependendo se ests a usar a opo Agrupar ramos. Usa esta opo para todas as rvores em alternativa crescerem a partir do topo. Reduzir linhas cruzadas Se a disposio do grfico produziu muitas linhas cruzadas, usa esta opo para limp-las. Isto poder fazer com que as colunas de disposio apaream em locais menos lgicos, por exemplo numa linha diagonal em vez de uma coluna, e o grfico pode requerer mais rea de desenho. Nomes de caminhos diferenciais Nomes de caminhos longos podem ocupar muito espao e tornar muito largas as caixas dos ns. Usa esta opo para mostrar s a parte diferente de um caminho, substituindo a parte comum com pontos. E.g. se criares um ramo /branches/1.2.x/doc/html a partir de /trunk/doc/html, o ramo pode ser mostrado na forma compacta como /branches/1.2.x/.. porque os dois ltimos niveis doc e html no se alteraram. Mostrar todas as revises Isto faz apenas aquilo que ests espera, e mostra cada reviso em que algo (na rvore em que ests a construir o grfico) foi alterado. Para histricos longos isto pode produzir um grfico realmente gigante. Mostrar revises HEAD Isto assegura que a ltima reviso de cada ramo sempre mostrada no grfico. Fontes exactas de cpia Quando um ramo/etiqueta criado, o comportamento por defeito mostrar o ramo como retirado do ltimo n onde foi efectuada uma alterao. Estritamente falando isto no exacto, visto que os ramos so normalmente criados a partir da HEAD corrente em vez de uma reviso especfica. possvel ento mostrar a reviso mais correcta (mas menos til) que foi usada para criar a cpia. De notar que esta reviso pode ser mais recente que a reviso HEAD do ramo fonte. Etiquetas dobradas Quando um projecto tem muitas etiquetas, mostrar cada etiqueta como um n separado no grfico ocupa muito espao e ofusca a mais interessante estrutura do ramo de desenvolvimento. Ao mesmo tempo poders necessitar de facilmente aceder ao contedo da etiqueta, para que possas efectuar comparaes de revises. Esta opo esconde os ns das etiquetas e em alternativa, mostra-os na etiqueta de dica do n de onde foram copiadas. Um cone de etiqueta no lado direito do n fonte indica que foram criadas tags. Esconder caminhos removidos Esconde caminhos que j no esto presentes na reviso HEAD do repositrio, e.g. ramos removidos. Esconder ramos no modificados Esconde ramos onde no foram submetidas alteraes, no respectivo ficheiro ou subpasta. Isto no indica necessariamente que o ramo no foi usado, apenas que no foram feitas alteraes nesta parte. Mostra a reviso da CT Marca no grfico a reviso que corresponde reviso actualizada do item, para o qual obtiveste o grfico. Se acabaste de actualizar, esta ser a reviso HEAD, mas se outros submeteram alteraes desde a tua ltima actualizao, a tua CT poder estar algumas revises abaixo da HEAD. O n marcado com uma moldura a negrito.

120

Daily Use Guide

Mostrar modificaes da CT Se a tua CT contm alteraes locais, esta opo desenha-as como um n elptico separado e ligado ao n a que a tua CT foi pela ltima vez actualizada. A cor de contorno por defeito o vermelho. Para capturar as alteraes mais recentes, poders necessitar de refrescar o grfico usando F5. Filtro Por vezes o grfico de revises contm mais revises do que aquelas que queres ver. Esta opo abre a caixa de dilogo que permite restringir o intervalo de revises mostradas e esconder caminhos particulares pelo nome. Listas de rvore Quando o grfico contm vrias rvores, por vezes til usar cores de fundo alternadas para ajudar distino entre elas. Mostra viso geral Mostra uma pequena figura do grfico inteiro com a janela da vista corrente como um rectngulo que podes arrastar. Isto permite-te navegar pelo grfico de forma mais fcil. De notar que para grficos muito grandes a viso global pode-se tornar inutil, devido ao factor de ampliao (zoom) extremo, e por isso no ser mostrado nesses casos.

4.25.3. Utilizar o Grfico


Usa a janela de vista global para tornar mais fcil a navegao em grandes grficos. Este mostra o grfico inteiro numa janela pequena, com a parcela correntemente mostrada salientada. Podes arrastar a rea salientada de forma a alterar a regio visualizada. A data da reviso, o autor e os comentrios so mostrados numa caixa de dica, quando o rato passa sobre a caixa de reviso. Se seleccionares duas revises ( Usa Ctrl-clique com o boto direito), podes usar o menu de contexto para mostrar as diferenas entre estas revises. Podes optar por mostrar as diferenas nos pontos de criao de ramos, mas usualmente querers mostrar as alteraes nas pontas dos ramos, i.e. na reviso HEAD. Podes ver as diferenas como um ficheiro de Comparao-Unificada que mostra todas as diferenas num nico ficheiro com contexto mnimo. Se optares por Menu de contexto Comparar Revises sers presenteado com uma lista de ficheiros alterados. Efectua duplo clique num nome de ficheiro de modo a obter ambas as revises do ficheiro e compar-las recorrendo ferramenta de comparao visual. Se tu clicas com o boto direito numa reviso, podes usar Menu de contexto Mostrar registo para ver o histrico. Podes tambm integrar as alteraes nas revises seleccionadas, numa cpia de trabalho diferente. A caixa de dilogo seleco de pasta, permite-te escolher a cpia de trabalho para onde integrar, mas aps esta no existe caixa de confirmao nem uma oportunidade para tentar uma integrao de teste. Ser uma boa ideia integrar numa cpia de trabalho no modificada, para que possas reverter as alteraes se no resultar! Esta uma funcionalidade til se pretendes integrar as revises seleccionadas, de um ramo para outro.

Aprender a Ler o Grfico de Revises


Utilizadores pela primeira vez, podem ser surpreendidos pelo facto de que, o grfico de revises mostra algo que no corresponde ao seu modelo mental. Se uma reviso altera mltiplas cpias ou ramos de um ficheiro ou pasta, por exemplo, ento iro existir mltiplos ns para essa simples reviso. uma boa prtica comear com as opes mais esquerda, na barra de ferramentas, e customizar o grfico passo a passo at este chega perto do teu modelo mental. Todas as opes de filtro tentam perder o mnimo de informao possvel, isso poder fazer com que alguns ns mudem de cor. Sempre que o resultado seja inesperado, desfaz a ltima operao de filtragem e, tenta compreender o que essa reviso ou ramo tem de especial. Na maior parte dos casos o resultado, inicialmente esperado da operao de filtragem, ter sido impreciso ou enganador.

121

Daily Use Guide

4.25.4. Refrescar a Vista


Se quiseres consultar novamente o servidor por nova informao poders simplesmente refrescar a vista usando o F5. Se estiveres a usar a cache de registo (activada por defeito) o repositrio ser consultado para verificar novas submisses e buscar somente as novas. Se a cache de registo est em modo fora-de-linha, esta operao ir tambm tentar retornar ao modo em-linha. Se ests a usar a cache de registo, e desconfias que o contedo da mensagem ou o autor foram alterados, ento devers recorrer caixa de dilogo de registo para refrescar as mensagens de que necessitas. Desde que o grfico de revises funciona a partir da raiz do repositrio, teramos de invalidar toda a cache de registo, e uma recarga poderia levar um tempo muito longo.

4.25.5. Podar as rvores


Uma rvore grande pode-se tornar difcil de navegar e por vezes tu querers esconder algumas partes, ou parti-la numa floresta de rvores mais pequenas. Se manteres o rato sobre o ponto onde um n de ligao entra ou sai do n, irs ver um ou mais botes de apario que te permitiram fazer isso.

Clica no boto de subtraco para colapsar a sub-rvore anexada.

Clica no boto de adio para expandir a rvore colapsada. Quando uma rvore est colapsada este boto mantm-se visvel para sinalizar a sub-rvore escondida.

Clica no boto da cruz para dividir a sub-rvore anexada e mostr-la no grfico como uma rvore separada.

Clica no boto com o crculo para re-anexar a rvore dividida. Quando uma rvore foi dividida este boto permanece visvel para indicar que existe uma sub-rvore separada. Clica no fundo do grfico para obteres o menu de contexto que te oferece opes para Expandir todosl e Juntar todos. Se no existem nenhum ramo colapsado ou dividido, o menu de contexto no ser mostrado.

4.26. Exportar uma Cpia de Trabalho do Subversion


Por vezes irs querer uma cpia da tua rvore de trabalho, mas sem as pastas .svn, e.g. de modo a criar um tarball zipado da tua fonte, ou para exportar para um servidor web. Em vez de efectuares uma cpia para depois apagar manualmente todas as pastas .svn podes usar o comando do Subversion TortoiseSVN Exportar.... Exportar de um URL e exportar de uma cpia de trabalho so tratadas de forma ligeiramente diferente.

122

Daily Use Guide

Figura 4.48. A Caixa de Dilogo Exportar-do-URL


Se executas este comando numa pasta no versionada, o TortoiseSVN ir assumir que essa pasta o destino e abre uma caixa de dilogo para introduzires o URL e a reviso a exportar. Esta caixa de dilogo tem opes para, s exportar a pasta de topo, omitir referncias externas e sobrepor o estilo de fim de linha para ficheiros que tm configurada a propriedade svn:eol-style. claro que podes tambm exportar directamente do repositrio. Usa o Navegador de Repositrio para navegares no repositrio at sub-rvore pretendida e usa Menu de Contexto Exportar. Irs obter a caixa de dilogo Exportar do URL descrita acima. Se executares este comando na tua cpia de trabalho sers questionado por uma localizao para guardares a cpia de trabalho limpa, sem as pastas .svn. Por defeito s os ficheiros versionados sero exportados, mas podes usar a caixa de verificao Exportar tambm ficheiros no versionados , para incluir quaisquer outros ficheiros no versionados que possam existir na tua cpia de trabalho. Referncias externas, usando svn:externals podero, se necessrio, ser omissas. Outra forma de exportar a partir de uma cpia de trabalho arrastar com o boto direito a cpia de trabalho para outro local e seleccionar Menu de Contexto SVN Exportar aqui ou Context Menu SVN Exporta todos aqui. A segunda opo inclui tambm os ficheiros no versionados. Quando ao exportar de uma cpia de trabalho, se a pasta de destino j conter uma pasta com o mesmo nome daquela que est a exportar, ser te dada a opo para escrever por cima do contedo j existente ou criares uma nova pasta com um nome gerado automaticamente, e.g. Target (1).

Exportar ficheiros individuais


A caixa de dilogo exportar no te permite exportar ficheiros individuais, mesmo que o Subversion permita. Para exportares ficheiros simples com o TortoiseSVN ters de usar o Navegador de repositrio (Seco 4.24, O Navegador de Repositrio). Simplesmente arrasta o(s) ficheiro(s) que queres exportar do repositrio para o local, no explorador, onde os queres, ou usa o menu de contexto no repositrio para os exportar.

123

Daily Use Guide

Exportar uma rvore de alteraes


Se queres exportar uma cpia da estrutura de rvore do teu projecto, mas contendo s os ficheiros que foram alterados numa reviso particular, ou entre duas quaisquer revises, usa a funcionalidade comparar revises, descrita em Seco 4.10.3, Comparando Pastas.

4.26.1. Remover uma cpia de trabalho do controlo de verses


Por vezes tu tens uma cpia de trabalho que desejas converter de volta para uma pasta normal, sem as pastas .svn. O que tu realmente precisas um comando exportar-no-local, que remove apenas as pastas de controlo, em vez de gerar uma nova rvore de pastas limpa. A resposta surpreendente simples - exportar a prpria pasta! O TortoiseSVN detecta este caso especial e pergunta se tu queres tornar a cpia de trabalho no versionada. Se responderes sim, as pastas de controlo sero removidas, e ters uma simples rvore de pastas limpa.

4.27. Reposicionar uma cpia de trabalho

Figura 4.49. The Relocate Dialog


Se o teu repositrio por alguma razo mudou a sua localizao (IP/URL). Talvez estejas emperrado e no consigas submeter e no queres SVN exporta outra vez a tua cpia de trabalho a partir da nova localizao, e mover todas as tuas alteraes para a tua nova cpia de trabalho, o comando TortoiseSVN Reposicionar o que procuras. Basicamente no faz muito: pesquisa todas as entradas de ficheiros na pasta .svn e altera o URL das entradas para o novo valor. Poders ficar surpreendido por descobrires que o TortoiseSVN contacta o repositrio como parte desta operao. Tudo o que faz executar algumas simples verificaes para ter a certeza que o novo URL refere-se realmente ao mesmo repositrio da cpia de trabalho existente.

Ateno
Esta uma operao muito raramente usada. O comando reposicionar s usado se o URL da raiz do repositrio foi alterado. Possveis razes: The IP address of the server has changed. The protocol has changed (e.g. http:// to https://). The repository root path in the server setup has changed. Posto de outra maneira, necessitas de reposicionar quando a tua cpia de trabalho se refere mesma localizao no mesmo repositrio, mas o prprio repositrio foi deslocado. No se aplica se:

124

Daily Use Guide

Se queres mover para um repositrio do Subversion diferente. Nesse caso devers executar um SVN exportar limpo a partir da localizao do novo repositrio. Se queres trocar para um ramo diferente ou pasta dentro do mesmo repositrio. Para o fazeres devers usar TortoiseSVN Trocar.... Consulta Seco 4.19.2, SVN Exportar ou Trocar... para mais informao. Se reposicionares em qualquer dos casos acima citados, irs corromper a tua cpia de trabalho, e irs obter muitas mensagens de erro inexplicveis enquanto actualizares, submeteres, etc. Uma vez que isso acontecer a nica reparao a fazer efectuar um SVN exportar de fresco.

4.28. Integrao com Sistemas de identificao de Bugs/Gestores de Problemas


muito comum no desenvolvimento de Software que as alteraes possam ser relacionadas com um problema ou bug especfico. Os utilizadores dos sistemas de identificao de bugs (gestores de problemas) gostariam de associar a alteraes que fazem no Subversion, com um ID especfico, no seu sistema de gesto de problemas. A maioria dos gestores de problemas providencia um script de gancho pre-commit que analisa a mensagem de registo de modo a encontrar o ID do bug, com o qual a submisso est associada. Isto algo sujeito a erros, visto que confia que o utilizador escreva uma mensagem de registo correcta, para que o script de gancho pre-commit o possa analisar correctamente. O TortoiseSVN pode ajudar o utilizador de duas maneiras: 1. Quando o utilizador introduz a mensagem de registo, pode ser automaticamente adicionada uma linha bem definida, que inclu o nmero de problema associado com a submisso. Isto ir reduzir o risco de que o utilizador introduza um nmero de problema de uma maneira tal que, as ferramentas de identificao de bugs no o consigam analisar correctamente. Ou o TortoiseSVN poder salientar a parte da mensagem inserida, que reconhecida pelo gestor de problemas. Dessa maneira o utilizador saber que a mensagem de erro pode ser correctamente analisada. 2. Quando o utilizador navega nas mensagens de registo, o TortoiseSVN cria uma hiperligao a partir de cada ID de bug na mensagem de erro, que aponta o navegador de internet para o problema mencionado.

4.28.1. Adicionar Nmeros de Problemas nas Mensagens de Registo


Tu podes integrar a ferramenta de identificao de bugs da tua escolha com o TortoiseSVN. Para o fazer, ters de definir algumas propriedades que comeam por bugtraq:. Estas devero ser colocadas nas pastas: (Seco 4.17, Configuraes de Projecto) Existem duas maneiras de integrar o TortoiseSVN com os gestores de problemas. Um baseado em cadeias de caracteres simples, a outra baseado em expresses regulares. As propriedades usadas em ambas as abordagens so: bugtraq:url Configura esta propriedade com o URL da tua ferramenta de identificao de bugs. Dever ser um URI propriamente codificado e ter de conter %BUGID%. O %BUGID% substitudo pelo nmero de problema que introduzires. Isto permite ao TortoiseSVN mostrar uma hiperligao na caixa de dilogo de registo, para que quando estiveres a olhar para o registo de revises, possas saltar directamente para a tua ferramenta de identificao de bugs. Tu no precisas de providenciar essa propriedade, mas ento o TortoiseSVN apenas mostrar o nmero do problema, e no a hiperligao para este. E.g. o projecto TortoiseSVN usa http:// issues.tortoisesvn.net/?do=details&id=%BUGID% Poders tambm usar URLs relativos em vez de absolutos. Isto til quando o teu gestor de problemas est no mesmo domnio/servidor que o teu repositrio de fontes. No caso do nome de domnio se alterar, tu no precisars de ajustar a propriedade bugtraq:url. Existem ento duas maneiras de especificar um URL relativo:

125

Daily Use Guide

Se comea com a cadeia de caracteres ^/ assumido que relativo raiz do repositrio. Por exemplo, ^/../?do=details&id=%BUGID% ir ser resolvido para http://tortoisesvn.net/? do=details&id=%BUGID% se o teu repositrio est localizado em http://tortoisesvn.net/ svn/trunk/. Um URL que comece pela cadeia de caracteres / assumido como sendo relativo ao nome do servidor. Por exemplo /?do=details&id=%BUGID% ser resolvido para http://tortoisesvn.net/? do=details&id=%BUGID% se o teu repositrio est localizado em qualquer ponto do dominio http:// tortoisesvn.net. bugtraq:warnifnoissue Fixa este a true se queres que o TortoiseSVN te avise, que o campo de texto do nmero-de-problema est vazio. Valores vlidos so true/false. Se no definido assumido o valor false.

4.28.1.1. Nmero de Problema numa Caixa de Texto


Na abordagem mais simples o TortoiseSVN mostra ao utilizador um campo de entrada separado onde o ID do bug pode ser introduzido. Ento uma linha separada pre/ps anexada mensagem de registo que o utilizador introduziu. bugtraq:message Esta propriedade activa o sistema de identificao de bugs no modo Campo de Entrada. Se esta propriedade fixada ento o TrotoiseSVN ir-te- pedir para introduzires o nmero de problema quando submeteres as tuas alteraes. Ser usado para adicionar uma linha no fim da mensagem de registo. Dever conter %BUGID%, que ser substitudo pelo nmero de problema que introduzires ao submeter. Isto garante que teu registo de submisso contm uma referncia ao nmero de problema, que estar sempre num formato consistente e poder ser analisado pela tua ferramenta de identificao de problemas, de forma a associar o nmero de problema com uma submisso particular. Como exemplo poders usar Issue : %BUGID%, mas tal depender da tua ferramenta. bugtraq:append Esta propriedade define se o bug-ID anexado (true) ao fim da mensagem de registo ou inserido (false) no incio da mensagem de registo. Valores vlidos so true/false. Se no definido, assumido o valortrue para que os projectos j existentes no sejam danificados. bugtraq:label Este texto mostrado pelo TortoiseSVN na caixa de dilogo submeter, para etiquetar a caixa de edio onde irs introduzir o nmero do problema. Se no fixado, ser mostrado Bug-ID / Issue-Nr:. Tem em mente que a janela no ser redimensionada para acomodar esta etiqueta, pelo que, mantm o tamanho da etiqueta abaixo dos 20-25 caracteres. bugtraq:number Se configurado a true s sero permitidos nmeros no campo de texto do nmero-de-problema. Uma excepo a vrgula para que possas separar vrios nmeros. Valores vlidos so true/false. Se no definido, assumido true.

4.28.1.2. Issue Numbers Using Regular Expressions


In the approach with regular expressions, TortoiseSVN doesn't show a separate input field but marks the part of the log message the user enters which is recognized by the issue tracker. This is done while the user writes the log message. This also means that the bug ID can be anywhere inside a log message! This method is much more flexible, and is the one used by the TortoiseSVN project itself. bugtraq:logregex This property activates the bug tracking system in Regex mode. It contains either a single regular expressions, or two regular expressions separated by a newline. If two expressions are set, then the first expression is used as a pre-filter to find expressions which contain bug IDs. The second expression then extracts the bare bug IDs from the result of the first regex. This allows you to use a list of bug IDs and natural language expressions if you wish. e.g. you might fix several bugs and include a string something like this: This change resolves issues #23, #24 and #25

126

Daily Use Guide

If you want to catch bug IDs as used in the expression above inside a log message, you could use the following regex strings, which are the ones used by the TortoiseSVN project: [Ii]ssues?:?(\s*(,|and)?\s*# \d+)+ and (\d+) The first expression picks out issues #23, #24 and #25 from the surrounding log message. The second regex extracts plain decimal numbers from the output of the first regex, so it will return 23, 24 and 25 to use as bug IDs. Breaking the first regex down a little, it must start with the word issue, possibly capitalised. This is optionally followed by an s (more than one issue) and optionally a colon. This is followed by one or more groups each having zero or more leading whitespace, an optional comma or and and more optional space. Finally there is a mandatory # and a mandatory decimal number. If only one expression is set, then the bare bug IDs must be matched in the groups of the regex string. Example: [Ii]ssue(?:s)? #?(\d+) This method is required by a few issue trackers, e.g. trac, but it is harder to construct the regex. We recommend that you only use this method if your issue tracker documentation tells you to. If you are unfamiliar with regular expressions, take a look at the introduction at http://en.wikipedia.org/wiki/Regular_expression, and the online documentation and tutorial at http://www.regular-expressions.info/. If both the bugtraq:message and bugtraq:logregex properties are set, logregex takes precedence.

Dica
Even if you don't have an issue tracker with a pre-commit hook parsing your log messages, you still can use this to turn the issues mentioned in your log messages into links! And even if you don't need the links, the issue numbers show up as a separate column in the log dialog, making it easier to find the changes which relate to a particular issue. Algumas propriedades tsvn: requerem um valor true/false. O TortoiseSVN tambm entende yes como sinnimo para true e no como sinonimo para false.

Configurar Propriedades em Pastas


Essas propriedades devem ser configuradas em pastas para o sistema funcionar. Quando submetes um ficheiro ou pasta, as propriedades so lidas dessa pasta. Se as propriedades no so a encontradas, o TortoiseSVN ir pesquisar atravs, e em direco do topo, da rvore de pastas para as encontrar, at encontrar uma pasta no versionada, ou a raiz da rvore (eg. C:\). Se tens a certeza que cada utilizador s checou-a, a partir do e.g. trunk/ e no de alguma subpasta, suficiente configurar as propriedades na pasta trunk/. Se no tens a certeza devers configurar as propriedades em cada subpasta, recursivamente. Configurar uma propriedade na profundidade da hierarquia do projecto sobrepem-se configurao em nveis superiores (mais perto do trunk/ ). For tsvn: properties only you can use the Recursive checkbox to set the property to all sub-folders in the hierarchy, without also setting it on all files.

No Issue Tracker Information from Repository Browser


Because the issue tracker integration depends upon accessing subversion properties, you will only see the results when using a checked out working copy. Fetching properties remotely is a slow operation, so you will not see this feature in action from the repo browser. This issue tracker integration is not restricted to TortoiseSVN; it can be used with any Subversion client. For more information, read the full Issue Tracker Integration Specification [http://tortoisesvn.googlecode.com/svn/trunk/

127

Daily Use Guide

doc/issuetrackers.txt] in the TortoiseSVN source repository. (Seco 3, O TortoiseSVN grtis! explains how to access the repository).

4.28.2. Obter Informaes do Gestor de Problemas


A seco anterior ocupa-se com a adio da informao do problema nas mensagens de registo. Mas se tu precisares de obter informaes do teu gestor de problemas? A caixa de dilogo submeter tem um interface COM que permite a integrao com um programa externo, que consegue comunicar com o teu gestor. Tipicamente tu poders querer consultar o gestor para obter a lista de problemas abertos atribudos a ti, de modo a que possas seleccionar os problemas que estaro a ser tratados nesta submisso. Any such interface is of course highly specific to your issue tracker system, so we cannot provide this part, and describing how to create such a program is beyond the scope of this manual. The interface definition and sample plugins in C# and C++/ATL can be obtained from the contrib folder in the TortoiseSVN repository [http:// tortoisesvn.googlecode.com/svn/trunk/contrib/issue-tracker-plugins]. (Seco 3, O TortoiseSVN grtis! explains how to access the repository). A summary of the API is also given in Captulo 6, Interface IBugtraqProvider Another (working) example plugin in C# is Gurtle [http://code.google.com/p/gurtle/] which implements the required COM interface to interact with the Google Code [http://code.google.com/hosting/] issue tracker. Para efeitos de demonstrao, vamos supor que o teu administrador de sistemas providenciou-te um plugin de gestor de problemas que tu instalaste, e entretanto configuraste algumas das tuas cpias de trabalho para usar o plugin, na caixa de dilogo de preferncias do TortoiseSVN. Quando abres a caixa de dilogo Submeter a partir de uma cpia de trabalho para a qual o plugin foi atribudo, vers um novo boto no topo da caixa de dilogo.

Figura 4.50. Caixa de dilogo de exemplo da consulta ao gestor de problemas

128

Daily Use Guide

Neste exemplo tu podes seleccionar um ou mais problemas abertos. O plugin pode ento gerar um texto, especialmente formatado, que adicionar tua mensagem de registo.

4.29. Integrao com visualizadores de repositrio Web-based


Existem disponveis vrios visualizadores de repositrio web-based para o uso com o Subversion, tais como o ViewVC [http://www.viewvc.org/] e o WebSVN [http://websvn.tigris.org/]. O TortoiseSVN providncia um meio de ligar-se com esses visualizadores. Tu podes integrar um visualizador de repositrio, da tua escolha, com o TortoiseSVN. Para o fazeres ters de configurar algumas propriedades que definem a ligao. Estas tm de ser configuradas nas pastas: (Seco 4.17, Configuraes de Projecto) webviewer:revision Configura esta propriedade com o URL do teu visualizador de repositrio, para veres todas as alteraes numa reviso especfica. O URL dever ser devidamente codificado e ter de conter %REVISION%. O %REVISION% ser substituido com o nmero de reviso em questo. Isto permite ao TortoiseSVN mostrar uma entrada do menu de contexto na caixa de dilogo registo Menu de Contexto Ver reviso no visualizador web webviewer:pathrevision Set this property to the URL of your repo viewer to view changes to a specific file in a specific revision. It must be properly URI encoded and it has to contain %REVISION% and %PATH%. %PATH% is replaced with the path relative to the repository root. This allows TortoiseSVN to display a context menu entry in the log dialog Context Menu View revision and path in webviewer For example, if you right-click in the log dialog bottom pane on a file entry /trunk/src/file then the %PATH% in the URL will be replaced with /trunk/src/file. Podes tambm usar URLs relativos em vez de absolutos. Isto til no caso do teu visualizador web estar no mesmo domnio/servidor que o teu repositrio fonte. No caso de o nome de domnio alguma vez for alterado, no ters de ajustar as propriedades webviewer:revision e webviewer:pathrevision. O formato o mesmo para a propriedade bugtraq:url. Consultar Seco 4.28, Integrao com Sistemas de identificao de Bugs/ Gestores de Problemas.

Configurar Propriedades em Pastas


Essas propriedades devem ser configuradas em pastas para o sistema funcionar. Quando submetes um ficheiro ou pasta, as propriedades so lidas dessa pasta. Se as propriedades no so a encontradas, o TortoiseSVN ir pesquisar atravs, e em direco do topo, da rvore de pastas para as encontrar, at encontrar uma pasta no versionada, ou a raiz da rvore (eg. C:\). Se tens a certeza que cada utilizador s checou-a, a partir do e.g. trunk/ e no de alguma subpasta, suficiente configurar as propriedades na pasta trunk/. Se no tens a certeza devers configurar as propriedades em cada subpasta, recursivamente. Configurar uma propriedade na profundidade da hierarquia do projecto sobrepem-se configurao em nveis superiores (mais perto do trunk/ ). For tsvn: properties only you can use the Recursive checkbox to set the property to all sub-folders in the hierarchy, without also setting it on all files.

No Repo Viewer Links from Repository Browser


Because the repo viewer integration depends upon accessing subversion properties, you will only see the results when using a checked out working copy. Fetching properties remotely is a slow operation, so you will not see this feature in action from the repo browser.

4.30. Preferncias do TortoiseSVN


Para descobrires para que servem as diferentes preferncias deixa, por um segundo, o ponteiro do rato sobre as caixas-edio/caixas-verificao... e uma etiqueta com uma til dica, ir aparecer.

129

Daily Use Guide

4.30.1. Preferncias Gerais

Figura 4.51. A Caixa de Dilogo Preferncias, Pgina Geral


Esta caixa de dilogo permite-te especificar a tua lngua de preferncia, e preferncias especficas do Subversion. Lngua Selecciona a lngua do teu interface de utilizador. O que que esperavas? Verifica automaticamente, cada semana, a existncia de novas verses Se verifcada, o TortoiseSVN ir contactar, uma vez por semana, o seu stio de descarga para ver se existe disponvel uma verso mais nova do programa. Usa Verificar agora se queres uma resposta imediata. A nova verso, se existir, no ser logo descarregada; recebers simplesmente uma caixa de dilogo de informao, que te dir que, tens disponvel uma nova verso. Sons do sistema O TortoiseSVN tem trs sons personalizados que estos instalados por defeito. Erro Anncio Aviso Podes seleccionar diferentes sons (ou deslig-los completamente) usando o Painel de Controlo do Windows. Configurar uma atalho para o Painel de Controlo. Padro global para ignorar arquivos Padres globais para ignorar so usados para evitar que ficheiros no versionados apaream, por exemplo, na caixa de dilogo submeter. Os ficheiros que correspondam ao padro so tambm ignorados ao importar. Ignora ficheiros ou pastas apenas ao digitares o seu nome ou extenso. Os padres so separados por espaos e.g. bin obj *.bak *.~?? *.jar *.[Tt]mp. Esses padres no devem incluir qualquer separador de caminho. De salientar que, tambm no existe maneira de diferenciar pastas de ficheiros. Consultar

130

Daily Use Guide

Seco 4.13.1, Correspondncia de Padres em Listas de Ignorados para mais informao sobre a sintaxe de correspondncia-de-padres. Nota que os padres de ignorar que aqui especificas tambm afectaram outros clientes do Subversion, que correres no teu PC, incluindo o cliente de linha de comando.

Cuidado
Se usares o ficheiro de configurao do Subversion para configurares o padro global-ignores, ele ir-se- sobrepor preferncia que efectuaste aqui. O ficheiros de configurao do Subversion pode ser acedido usando o Editar, como aqui descrito. Este padro de ignorar ir afectar todos os teus projectos. No versionado pelo que no afectar outros utilizadores. Por contraste podes tambm usar a propriedade versionada svn:ignore para excluir ficheiros ou pastas do controlo de verses. Consulta Seco 4.13, Ignorando Ficheiros E Pastas para mais informaes. Alterar datas de ficheiros para a hora da ltima submisso Esta opo diz ao TortoiseSVN para alterar a data dos ficheiros para a hora da ltima submisso, quando efectuares um checkout ou actualizao. De outra maneira o TortoiseSVN ir usar a data corrente. Se fores um programador geralmente melhor usar a data corrente, porque os sistemas de construo olham normalmente para os carimbos de tempo, para decidir que ficheiros precisam de ser compilados. Se usares a hora da ltima submisso, e reverteres para uma reviso anterior de ficheiro, o teu projecto poder no compilar como esperado. Ficheiro de configurao do Subversion Usa Editar para editar directamente o ficheiro de configurao do Subversion. Algumas preferncias no podem ser editadas directamente pelo TortoiseSVN e necessitam ento de ser aqui configuradas. Para mais informaes sobre o ficheiro config do Subversion consulta o Runtime Configuration Area [http://svnbook.redbean.com/en/1.5/svn.advanced.confarea.html]. de interesse particular a seco no Automatic Property Setting [http://svnbook.red-bean.com/en/1.5/svn.advanced.props.html#svn.advanced.props.auto], e configurada aqui. De notar que o Subversion pode ler a informao d configurao de vrios locais, e necessitas de conhecer qual deles tem prioridade. Consulta o Configuration and the Windows Registry [http://svnbook.redbean.com/en/1.5/svn.advanced.confarea.html#svn.advanced.confarea.windows-registry] para mais informaes. Usa pastas _svn em vez de .svn O VS.NET quando usado com projectos web no consegue lidar com as pastas .svn que o Subversion usa para armazenar a sua informao interna. Isto no um bug no Subversion. O bug no VS.NET e nas extenses frontpage que usa. Consulta Seco 4.30.11, Pastas de Trabalho do Subversion para descobrires mais sobre este problema. Se quiseres alterar o comportamento do Subversion e do TortoiseSVN, podes usar esta caixa-de-verificao para configurar a variavel de ambiente que controla isto. Deves ter em conta que ao mudar esta opo, no irs converter automaticamente as cpias de trabalho existentes, para usar a nova pasta de administrao. Ters de o fazer por ti usando um script (L as nossas FAQ) ou simplesmente cria uma cpia de trabalho de fresco.

131

Daily Use Guide

4.30.1.1. Menu de Contexto preferncias

Figura 4.52. A Caixa de Dilogo Preferncias, Pgina Menu de Contexto


Esta pgina permite-te especificar, quais das entradas do menu de contexto do TortoiseSVN, que iro aparecer no menu de contexto principal, e quais aparecero no submenu do TortoiseSVN. Por defeito a maioria dos itens esto desseleccionados e aparecem no submenu. H um caso especial para o Obter Bloqueio. claro que podes promov-lo ao nvel de topo, usando a lista acima mostrada, mas como a maioria dos ficheiros no precisam de bloqueios, isto s adiciona mais confuso. No entanto um ficheiro que tenha a propriedade svn:needs-lock necessitar sempre desta aco de cada vez que editado, ento nesse caso ser muito til t-lo no nivel de topo. Verificando a caixa aqui, significa que quando o ficheiro for seleccionado e tenha a propriedade svn:needs-lock configurada, o Obter Bloqueio ir aparecer sempre no nvel de topo. Se existem alguns caminhos no teu computador onde no queres que o menu de contexto do TortoiseSVN aparea de modo algum, podes list-los na caixa de texto ao fundo.

132

Daily Use Guide

4.30.1.2. Preferncias das Caixas de Dilogo TortoiseSVN 1

Figura 4.53. A Caixa de Dilogo Preferncias, Pgina Dilogos 1


Esta caixa de dilogo permite-te configurar algumas das caixas de dilogo do TortoiseSVN, da maneira que mais gostas delas. Nmero de mensagens de registo por omisso Limita o nmero de mensagens de registo que o TortoiseSVN adquire quando tu seleccionas primeiro o TortoiseSVN Mostrar Registo til para conexes lentas com o servidor. Tu podes sempre usar o Mostrar Todos ou Prximos 100 para obter mais mensagens. Tipo de letra para mensagens de registo Selecciona o tipo de letra e o tamanho usado para mostrar a prpria mensagem de registo, no painel ao meio da caixa de dilogo de Registo de Reviso, e quando na composio das mensagens na caixa de dilogo Submeter. Formato conciso de data/hora nas mensagens de registo Se as longas mensagens padro ocupam muito espao no teu cran, usa o formato conciso. Faa um duplo clique na lista de mensagens de registo para comparar com uma reviso anterior Se te encontras frequentemente a comparar revises no painel de topo da caixa de dilogo Registo, podes usar esta opo para permitir essa aco ao duplo clique. O que no est activo por defeito, porque adquirir as diferenas normalmente um processo moroso e a maior parte das pessoas prefere evitar esperar aps um duplo-clique acidental, que a razo por que esta opo no est activa por defeito. Caixas de Dilogo de Progresso O TortoiseSVN pode fechar automaticamente todas as caixas de dilogo de progresso, quando uma aco finalizada sem erros. Esta preferncia permite-te seleccionar as condies para fechar as caixas de dilogo. A preferncia por defeito (recomendada) Fechar manualmente o que te permite rever todas as mensagens e rever o que aconteceu. No entanto tu podes decidir que queres ignorar alguns tipos de mensagens, e teres a opo da caixa de dilogo a fechar automaticamente, se no existirem alteraes crticas. Fechar automticamente se no houver integraes, adies ou remoes significa que a caixa de dilogo progresso ir fechar-se no caso de actualizaes simples, mas se alteraes do repositrio foram

133

Daily Use Guide

integradas com as tuas, ou se qualquer ficheiros foi adicionado ou removido, a caixa de dilogo permanecer aberta. Ir tambm permanecer aberta se existir algum conflito ou erro durante a operao. Fechar automticamente se no houver integraes, adies ou remoes para operaes locais significa que a caixa de progresso ir fechar como para Fechar automticamente se no houver integraes, adies ou remoes, mas s para operaes locais como adicionar ficheiros ou reverter alteraes. Para operaes remotas a caixa permanecer aberta. Fechar automticamente se no houver conflitos relaxa ainda mais o critrio e fechar a caixa de dilogo mesmo se existem integraes, adies ou remoes. No entanto se existir algum conflito ou erro, a caixa permanecer aberta. Fechar automaticamente se no houver erros fecha sempre a caixa de dilogo mesmo se existirem conflitos. A nica condio que mantm a caixa de dilogo aberta se existir uma condio de erro, que ocorre quando o Subversion no consegue finalizar a tarefa. Por exemplo se uma actualizao falha, porque o servidor no est acessvel, ou uma submisso falha, porque a cpia de trabalho est desactualizada. Usar a reciclagem quando a reverter Quando revertes as modificaes locais, as tuas alteraes so descartadas. O TortoiseSVN d-te uma rede de segurana extra, enviando o ficheiro modificado para o cesto de reciclagem, antes de trazer de volta a cpia pura. Se preferires saltar o cesto de reciclagem desselecciona esta opo. Usar o URL da cpia de trabalho como o URL De: por omisso Na caixa de dilogo integrar, o comportamento por defeito o URL De: ser recordado entre integraes. No entanto, algumas pessoas gostam de executar integraes a partir de muitos pontos diferentes da sua hierarquia, e acham mais fcil comear com o URL da cpia de trabalho corrente. Isto pode ser editado para se referir a um caminho paralelo noutro ramo. Caminho por defeito para colonizar Tu podes especificar o caminho, por defeito, para as colonizaes. Se manteres todas as tuas colonizaes num nico local, ser til ter uma unidade e pasta pr-preenchida, para que s tenhas de adicionar no fim o nome da nova pasta. URL por omisso de colonizao Podes tambm especificar o URL por omisso para colonizaes. Se, com frequncia, colonizas subprojectos de algum grande projecto, poder ser til ter um URL pr-preenchido, para que s tenhas de adicionar o nome do subprojecto no fim.

134

Daily Use Guide

4.30.1.3. Preferncias das Caixas de Dilogo TortoiseSVN 2

Figura 4.54. A Caixa de Dilogo Preferncias, Pgina Dilogos 2


Usar recursividade para entrar em pastas sem controlo de verses Se esta caixa for verificada (estado por defeito), ento sempre que o estado de uma pasta no versionada mostrado na caixa de dilogo Adicionar, Submeter ou Verificar alteraes, cada ficheiro ou pasta filho tambm mostrado. Se desmarcares esta caixa, apenas o pai no versionado mostrado. Desmarcar, reduz a confuso nestas caixas de dilogo. Nesse caso se seleccionares uma pasta no versionada para Adicionar, esta adicionada recursivamente. Usar auto-completamento para caminhos de arquivo e palavras-chave A caixa de dilogo submeter inclui a facilidade de analisar uma lista de nomes de ficheiros a submeter. Quando tu digitas as 3 primeiras letras de um item da lista, a caixa de auto-completamento aparecer, e podes premir o Enter para completar o nome do ficheiro. Verifica a caixa para activar esta funcionalidade. Prazo em segundos at para a anlise para o auto-completamento O analisador do auto-completamento pode ser algo lento se existe um grande nmero de ficheiros a analisar. Este prazo evita que a caixa de submisso seja mantida presa por demasiado tempo. Se ests a perder informao importante de auto-completamento, poders ento estender o valor deste prazo. Usar o verificador ortogrfico apenas quando a tsvn:projectlanguage estiver definida Se no desejas utilizar o verificador ortogrfico para todas as submisses, verifica esta caixa. O verificador ortogrfico ainda estar activo nos projectos onde as suas propriedades o requerer. Mximo de itens a preservar no histrico de mensagens de registo Quando digitas uma mensagem de registo, na caixa de dilogo de registo, o TortoiseSVN armazena-a para possvel reutilizao futuro. Por defeito ir manter as ltimas 25 mensagens de registo para cada repositrio, mas tu podes personalizar aqui esse valor. Se tens muitos repositrios diferentes poders querer reduzir este valor de modo a evitar encher o teu cartrio de registo. De notar que esta preferncia se aplica s a mensagens digitadas neste computador. No tem nada a ver com a cache de registo.

135

Daily Use Guide

Reabrir a caixa de dilogo de submisso e ramificao/etiquetagem aps uma submisso falhada Quando uma submisso falha por alguma razo (a cpia de trabalho precisa de actualizao, gancho de precommit rejeita a submisso, error de rede, etc.), tu podes seleccionar esta opo para manter a caixa de dilogo de submeter aberta para nova tentativa. No entanto, devers estar ciente de que isto poder levar a problemas. Se a falha significar que necessitas de actualizar a tua cpia de trabalho e essa actualizao pode levar a conflitos, que tens de resolver primeiro. Seleccionar itens automaticamente O comportamento normal na caixa de dilogo submeter para todos os itens (versionados) modificados serem seleccionados automaticamente para submisso. Se preferires comear com nada seleccionado, e escolher manualmente os itens a submeter, desmarca esta caixa. Contactar o repositrio ao iniciar A caixa de dilogo Verificar alteraes, verifica a cpia de trabalho por defeito, e s contacta o repositrio quando tu clicas Verificar o repositrio. Se queres verificar sempre o repositrio, podes usar esta preferncia para executar automaticamente essa aco. Mostrar caixa de dilogo de Bloqueio antes de bloquear arquivos Quando seleccionas um ou mais ficheiros e de seguida usas TortoiseSVN Bloquear para bloquear esses ficheiros, nalguns projectos costume de escrever uma mensagem de bloqueio a explicar a razo porque os bloqueastes. Se no usares mensagens de bloqueio poders desmarcar esta caixa, de modo a saltares esta caixa de dilogo, e bloquear de imediato os ficheiros. Se usares o comando de bloqueio numa pasta, sers sempre levado presena de uma caixa de dilogo de bloqueio, j que tambm te dar a opo de seleccionar os ficheiros a bloquear. Se o teu projecto est a usar a propriedade tsvn:lockmsgminsize vers a caixa de dilogo bloquear, independentemente desta preferncia, porque o projecto requer mensagens de bloqueio.

4.30.1.4. Preferncias de cor do TortoiseSVN

Figura 4.55. A Caixa de Dilogo Preferncias, Pgina de Cores


Esta caixa de dilogo permite-te configurar as cores do texto usado nas caixas de dilogo do TorotiseSVN, do modo que tu gostas delas.

136

Daily Use Guide

em conflito possvel ou real / obstrudo Um conflito ocorreu durante a actualizao, ou pode ocorrer durante a integrao. A actualizao est obstruda por um ficheiro/pasta existente, no versionado, do mesmo nome que o versionado. Esta cor tambm usada para mensagens de erro nas caixas de dilogo de progresso. arquivos adicionados Itens adicionados ao repositrio. em falta / removido / substitudo Itens removidos do repositrio, desaparecidos ou removidos da cpia de trabalho e substitudos por outro ficheiro do mesmo nome. integrado Alteraes, do repositrio, sucessivamente integradas na CT sem criar qualquer conflito. alterado / copiado Adicionar com histrico, ou caminhos copiados no repositrio. Tambm usado na caixa de dilogo de registo para entradas que incluem itens copiados. N removido Um item que foi removido do repositrio. N adicionado Um item que foi adicionado ao repositrio por uma operao de adio, cpia ou movimentao. Nome de n alterado Um item que cujo nome foi alterado dentro do repositrio. N substituido O item original foi removido e um novo item com o mesmo nome substitui-o.

4.30.2. Preferncias do Grfico de Revises

Figura 4.56. A Caixa de Dilogo Preferncias, Pgina Grfico de Revises

137

Daily Use Guide

Padres de classificao O grfico de revises tenta mostrar uma imagem mais ntida da estrutura do teu repositrio, distinguindo entre o trunk, ramos e etiquetas. Como no existe tal classificao instalada no Subversion, esta informao ento extrada a partir de nomes dos caminhos. As preferncias por defeito assumem que irs utilizar os nomes convencionais em Ingls, como sugerido na documentao do Subversion, mas claro que o uso que lhe ds pode ser diverso. Especifica os padres usados para reconhecer esses caminhos, para tal usa as trs caixas providenciadas. Os padres sero correspondidos, sem distino de maisculas e minsculas, mas devers especific-los em minsculas. Os caracteres livres * e ? funcionaram como de costume e podes usar ; para separar vrios padres. No necessitas incluir qualquer carcter em branco adicional, j que tal ir ser includo na especificao da correspondncia. Modificar Cores So usadas cores no grfico de revises para indicar o tipo do n, i.e. se o n foi adicionado, removido ou renomeado. De modo a te ajudar a identificar as classificaes dos ns, tu podes permitir que o grfico de revises misture cores de modo a te dar tanto a indicao do tipo do n como da classificao. Se a caixa est desmarcada, a cor usada s para indicar o tipo do n. Utiliza a caixa de dilogo de seleco de cor para atribuir as cores especficas usadas.

4.30.2.1. Cores do Grfico de Revises

Figura 4.57. A Caixa de Dilogo preferncias,Pgina Cores do Grfico de Revises


Esta pgina permite-te configurar as cores usadas. Tomar ateno que a cor aqui especificar uma cor slida. A maior parte dos ns colorido usando uma mistura da cor do tipo do n, a cor de fundo, e opcionalmente, a cor de classificao. N Removido Itens que foram removidos, e no copiados para outro lado, na mesma reviso. N Adicionado Itens recentemente adicionados ou copiados (adicionar com histrico).

138

Daily Use Guide

Nome do N Alterado Itens removidos de uma localizao e adicionados noutra, na mesma reviso. N Alterado Alteraes simples, sem qualquer adio ou remoo. N no Alterado Poder ser utilizada para mostrar a reviso usada como origem da cpia, mesmo quando nenhuma alterao (ao item objecto do grfico) tenha ocorrido nessa reviso. N HEAD Reviso corrente HEAD, no repositrio. N WC Se optares por mostrar um n extra para a tua cpia de trabalho modificada, anexado tua reviso da ltima submisso no grfico, usa esta cor. Limite do N WC Se optares por mostrar se a cpia de trabalho foi modificada, usa esta cor de moldura no n WC, para o caso de serem encontradas alteraes. Ns Etiquetas Ns classificados como etiquetas podem ser misturados com esta cor. Ns do Tronco Ns classificados com tronco poder ser misturados com esta cor. Marcadores de Etiqueta Dobrada Se usares etiquetas dobradas, para poupares espao, as etiquetas so marcadas na cpia de origem como um bloco desta cor. Marcadores de N Seleccionado Quando clicas com o boto esquerdo num n seleccionando-o, o marcador usado para indicar esta seleco um bloco desta cor. Tiras Essas cores so usadas quando o grfico dividido em sub-rvores, e o fundo colorido com tiras alternadas, para ajudar a identificar as rvores separadas.

139

Daily Use Guide

4.30.3. Preferncias de Sobreposio de cones

Figura 4.58. A Caixa de Dilogo Preferncias, Pgina Sobreposio de cones


Esta pgina permite-te escolher os itens para os quais o TortoiseSVN ir mostrar sobreposies de cones. Por defeito as sobreposies de cones e menus de contexto iro aparecer em todas as caixas de abrir/guardar, tal como no Explorador do Windows. Se queres que apaream s no Explorador do Windows verifica a caixa Mostrar sobreposies e menu de atalho apenas no explorador. Aos itens ignorados e no versionados no normalmente dada uma sobreposio. Se queres mostrar sobreposies nesses casos, basta verificares as caixas. Podes tambm optar por marcar as pastas como modificadas, se estas contm itens no versionados. Isto pode ser til para te lembrar que criaste novos ficheiros que no foram ainda adicionados ao controlo de verses. Esta opo s est disponvel quando usas a opo de cache (ver abaixo) de estado por defeito. Sendo que demora algum tempo a adquirir o estado da cpia de trabalho, o TortoiseSVN usa a cache para armazenar o estado, par que o explorador no fique muito tempo pendurado a mostrar as sobreposies. Podes escolher o tipo da cache que o TortoiseSVN dever usar, de acordo com o teu sistema e tamanho de cpia de trabalho: Por omisso Armazena na cache toda a informao num processo separado (TSVNCache.exe). Esse processo monitoriza todas as unidades procura de alteraes, e adquire de novo o estado, se algum ficheiro dentro da cpia de trabalho foi modificado. O processo corre com a prioridade mais baixa para que os outros programas no fiquem pendurados por sua causa. Isso tambm significa que a informao do estado no dada em tempo real, mas pode levar alguns segundos at as sobreposies serem actualizadas. Vantagem: As sobreposies mostram o estado recursivamente, i.e. se um ficheiro, bem no interior da tua cpia de trabalho alterado, todas as pastas at raiz da cpia de trabalho iro tambm mostrar a sobreposio modificado. E visto que o processo pode enviar notificaes para a shell, as sobreposies na rvore da vista esquerda, tambm sero normalmente alteradas. Desvantagem: O processo corre continuamente mesmo que no estejas a trabalhar nos teus projectos. E tambm usa cerca de 10-50 MB de RAM, dependendo do nmero e tamanho das tuas cpias de trabalho.

140

Daily Use Guide

Shell A cache executada directamente do interior da dll da extenso da shell, mas apenas para a pasta correntemente visvel. De cada vez que navegas para outra pasta, a informao de estado novamente adquirida. Vantagem: necessita apenas de muito pouca memria ( volta de 1MB de RAM) e pode mostrar o estado em tempo real. Desvantagem: Visto que s uma pasta posta em cache, as sobreposies no mostram recursivamente o estado. Para cpias de trabalho grandes, pode demorar mais tempo a mostrar uma pasta no explorador do que a opo por omisso. A coluna mime-type tambm no est disponvel. Nenhum Com esta preferncia o TortoiseSVN no adquire de modo algum o estado no Explorador. Devido a isso, os ficheiros no obtm uma sobreposio e as pastas s obtm a sobreposio 'normal', se estiverem versionadas. Nenhuma outra sobreposio mostrada, e tambm no est disponveis colunas extra. Vantagem: No usa absolutamente nenhuma memria adicional e no desacelera o Explorador ao navegar. Desvantagem: No mostrada no Explorador a informao de estado de ficheiros e pastas.Para veres se as tuas cpias de trabalho foram modificadas ters de usar a caixa de dilogo Verificar alteraes. O prximo grupo permite-te seleccionar quais as classes de armazenamento que devem mostrar sobreposies. Por defeito s unidades fixas esto seleccionadas. Podes mesmos desactivar todas as sobreposies de cones, mas qual seria a piada? Unidades de rede podem ser muito lentas, pelo que por defeito, os cones no so mostrados para cpias de trabalho localizadas em partilhas de rede. Unidades Flash USB parecem ser um caso especial em que o tipo de unidade identificado pelo prprio dispositivo. Algumas aparecem como unidades fixas e outra como amovveis. O Excluir caminhos usado para comunicar ao TortoiseSVN que esses caminhos para os quais no deve ser mostrado sobreposies de cones e colunas de estado. Isto til se tens algumas cpias de trabalho muito grandes, contendo s bibliotecas que no irs alterar e por isso no necessitam de sobreposies. por exemplo: f:\development\SVN\Subversion ir desactivar as sobreposies s nessa pasta especfica. Podes no entanto ver ainda as sobreposies, em todas as pastas e ficheiros, dentro dessa pasta. f:\development\SVN\Subversion* ir desactivar as sobreposies em todos os ficheiros e pastas cujos caminhos comecem por f:\development\SVN\Subversion. Isso significa que no vers sobreposies para qualquer ficheiro ou pasta debaixo desse caminho. O mesmo se aplica para o Incluir caminhos. excepo de que para esses caminhos as sobreposies so mostradas mesmo se estiverem desactivadas para esse tipo de unidade, ou por um caminho de excluso, especificado acima. Os utilizadores por vezes perguntam como essas preferncias interagem, e a resposta definitiva :

if (path is in include list) show overlays if (path is allowed drive type) AND (path is not in exclude list) show overlays A lista de incluidos mostrar sempre as sobreposies. De outro modo as sobreposies so sempre mostradas para todas as unidades marcadas a no ser que o caminho esteja excludo. O TSVNCache.exe tambm usa esses caminhos para restringir a sua monitorizao. Se tu queres olhar s para algumas pastas em particular, desactiva todos os tipos de unidades e inclui apenas as pastas que tu queres que sejam especificamente monitoradas.

141

Daily Use Guide

Excluir unidades SUBST


conveniente usar uma unidade SUBST para aceder s tuas cpias de trabalho, e.g. usando o comando

subst T: C:\TortoiseSVN\trunk\doc No entanto isto pode provocar a no actualizao das sobreposies, j que o TSVNCache s receber uma notificao quando o ficheiro alterado, e essa normalmente o caminho original. Isto significa que as tuas sobreposies no caminho subst poder nunca ser actualizado. Uma maneira fcil de dar a volta a isto excluir o caminho original de mostrar sobreposies, para que as sobreposies apaream, por sua vez, no caminho subst. Por vezes tu excluirs reas que contm cpias de trabalho, que poupam o TSVNCache de monitorar e pesquisar por alteraes, mas querers mesma a indicao visual que tais pastas so versionadas. A caixa de verificao mostrar pastas excludas como normais te ir permitir fazer isso. Com esta opo as pastas versionadas em qualquer rea excluda (tipo de unidade no verificada, ou especificamente excluda) ser mostrada como normal e actualizada, com uma marca de verificao verde. Isto lembrar-te- que ests a olhar para uma cpia de trabalho, mesmo que as sobreposies da pasta no estejam correctas. Os ficheiros no obtero nenhuma sobreposio. Ter em ateno que os menus de contexto ainda funcionaro mesmo que as sobreposies no sejam mostradas. Como excepo especial a isto, as unidades A: e B: nunca so consideradas para a opo Mostrar pastas excludas como 'normais'. Isto porque o Windows fora a busca na unidade, o que pode resultar num atraso de vrios segundos quando o Explorador arranca, mesmo se o teu PC no tem uma unidade de disquete.

4.30.3.1. Seleco de Conjunto de cones

Figura 4.59. A Caixa de Dilogo preferncias, Pgina Conjunto de cones


Podes alterar o conjunto de sobreposies para o que mais gostares. De notar que se alterares o conjunto de sobreposies, poders ter de reiniciar o teu computador para as alteraes surtam efeito.

142

Daily Use Guide

4.30.4. Preferncias de Rede

Figura 4.60. A Caixa de Dilogo Preferncias, Pgina de Rede


Aqui podes configurar o teu servidor proxy, se necessitas de passar atravs da firewall da tua empresa. Se necessitas de configurar as preferncias do proxy por repositrio, precisas de configurar isso no ficheiro servers do Subversion. Usa o Editar para ir l directamente. Consulta o Runtime Configuration Area [http:// svnbook.red-bean.com/en/1.5/svn.advanced.confarea.html] para mais detalhes em como utilizar este ficheiro. Podes tambm especificar qual o programa que o TortoiseSVN dever usar para estabelecer uma ligao segura com um repositrio svn+ssh. Ns recomendamos que uses o TortoisePlink.exe. Este uma verso do popular programa Plink e includo com o TortoiseSVN, mas compilado como uma aplicao sem janelas, para que no tenhas uma caixa de dilogo de DOS a aparecer-te sempre que te autentiques. Devers especificar o caminho completo para o executvel. Que no caso do TortoisePlink.exe ser, por defeito, a pasta bin do TortoiseSVN. Usa o boto Navegar para te ajudar a localiz-lo. Tem em conta que, se o caminho contiver espaos devers p-los entre aspas, e.g.

"C:\Program Files\TortoiseSVN\bin\TortoisePlink.exe" Um efeito secundrio de no ter uma janela que no h sitio para onde irem as mensagens de erro, pelo que se a autenticao falha, irs receber apenas uma mensagem dizendo algo como No foi possivel escerver para o destino por defeito. Por essa razo, ns recomendamos que primeiro configure usando o Plink padro. Quando tudo j est a funcionar, podes ento usar o TortoisePlink com exactamente os mesmos parmetros. O TortoisePlink no tem nenhuma documentao sua, porque apenas uma variante menor do Plink. Descobre mais sobre os parmetros de linha de comandos a partir de PuTTY website [http://www.chiark.greenend.org.uk/ ~sgtatham/putty/] Para evitares estares sempre a ser interrompido para inserires a palavra-passe, poders considerar o uso de uma ferramenta de cache da palavra-passe como o Pageant. Esta est tambm disponvel para descarga no stio do PuTTY.

143

Daily Use Guide

Finalmente, configurar o SSH no servidor e clientes um processo no trivial, que est para alm do mbito deste documento. No entanto poders encontrar um manual nas FAQs so TortoiseSVN, listadas em Subversion/TortoiseSVN SSH How-To [http://tortoisesvn.net/ssh_howto].

4.30.5. Preferncias de Programas Externos

Figura 4.61. A Caixa de Dilogo Preferncias, Pgina Visualizador de Comparao


Aqui, poders definir os teus prprios programas de Comparao/Integrao que o TortoiseSVN dever usar. A preferncia por defeito a utilizao do TortoiseMerge, que est instalado juntamente com o TortoiseSVN. Consulta o Seco 4.10.5, Ferramentas de Comparao/Integrao, para uma lista de alguns programas de Comparao/Integrao que as pessoas podem usar com o TortoiseSVN.

4.30.5.1. Visualizador de Comparaes


Um programa de comparao externo pode ser usado para comparar diferentes revises de ficheiros. O programa externo ir necessitar de obter os nomes dos ficheiros, a partir da linha de comandos juntamente como outras opes. O TortoiseSVN usa parmetros de substituio prefixados com %. Quando encontra um desses, ir substitui-lo pelo valor apropriado. A order dos parmetros ir depender do programa de comparao que usares. %base O ficheiro original sem as tuas alteraes %bname O ttulo da janela para o ficheiro base %mine O teu ficheiro, com as tuas alteraes. %yname O ttulo da janela do teu ficheiro Os ttulos das janelas no so nomes de ficheiros puros. O TortoiseSVN trata-os como nomes a mostrar e cria os nomes de acordo com tal. Pelo que e.g. se fores efectuar uma comparao de um ficheiro na reviso 123 com

144

Daily Use Guide

um ficheiro da tua cpia de trabalho, os nomes sero Nome do ficheiro : reviso 123 e Nome do ficheiro : cpia de trabalho For example, with ExamDiff Pro:

C:\Path-To\ExamDiff.exe %base %mine --left_display_name:%bname --right_display_name:%yname or with KDiff3:

C:\Path-To\kdiff3.exe %base %mine --L1 %bname --L2 %yname or with WinMerge:

C:\Path-To\WinMerge.exe -e -ub -dl %bname -dr %yname %base %mine or with Araxis:

C:\Path-To\compare.exe /max /wait /title1:%bname /title2:%yname %base %mine Se usares a propriedade svn:keywords para expandir as plavras-chave, e em particular a reviso do ficheiro, ento poder haver diferenas entre ficheiros, que so puramente devido a valor corrente da palavra-chave. Tambm se usares a svn:eol-style = native o ficheiro BASE ir ter fins-de-linha LF puros, enquanto o teu ficheiro ir ter fins-de-linha CR-LF. O TortoiseSVN ir, normalmente e automaticamente, esconder essas diferenas ao analisar primeiro o ficheiro BASE, de modo a expandir as palavras-chave e fins de linha antes de efectuar a operao de comparao. No entanto isto poder levar bastante tempo com grandes ficheiros. Se Converter arquivos ao comparar com a BASE est desmarcado ento o TortoiseSVN ir saltar o pr-processamento dos ficheiros. Podes tambm especificar uma ferramenta diferente de comparao para usares nas propriedades do Subversion. Visto que essas tendem a ser pequenas peas de texto simples, poders querer usar um visualizador mais simples e compacto. Se configuraste uma ferramenta alternativa de comparao, poders aceder ao TortoiseMerge e a ferramenta de terceiros a partir dos menus de contexto.Menu de contexto Comparar usa a ferramenta de comparao primria,e Shift+ Menu de contexto Comparar usa a ferramenta de comparao secundria.

4.30.5.2. Ferramenta de Integrao


Um programa de integrao externo usado para solucionar ficheiros em conflito. A substituio de parmetros usada da mesma maneira que com o Programa de Comparao. %base O ficheiro original, sem as tuas alteraes ou as dos outros %bname O ttulo da janela para o ficheiro base %mine O teu ficheiro, com as tuas alteraes %yname O ttulo da janela do teu ficheiro %theirs o ficheiro, como est no repositrio

145

Daily Use Guide

%tname O titulo da janela para o ficheiro no repositrio %merged o ficheiro em conflito, o resultado da operao de integrao %mname O titulo da janela para o ficheiro integrado Po exemplo para o Perforce Merge: C:\Path-To\P4Merge.exe %base %theirs %mine %merged ou com o KDiff3: C:\Path-To\kdiff3.exe %base %mine %theirs -o %merged --L1 %bname --L2 %yname --L3 %tname ou com o Araxis: C:\Path-To\compare.exe /max /wait /3 /title1:%tname /title2:%bname /title3:%yname %theirs %base %mine %merged /a2 ou com o WinMerge (2.8 ou superior): C:\Path-To\WinMerge.exe %merged

4.30.5.3. Preferncias Avanadas de Comparar/Integrar

Figura 4.62. A Caixa de Dilogo Preferncias, Caixa de Dilogo Comparar/Integrar Avanados

146

Daily Use Guide

Nas preferncias avanadas, poders definir um programa diferente para comparar e integrar por cada extenso de ficheiro. Por exemplo poders associar o Photoshop como o programa de Comparar para ficheiros .jpg :-) Podes tambm associar a propriedade svn:mime-type com um programa de comparao ou integrao. Para associar usando uma extenso de ficheiro, necessitars de associar a extenso. Usa o .bmp para descrever ficheiros de bitmap do Windows. Para associar usando a propriedade svn:mime-type, especifica o tipo mime incluindo a barrar, por exemplo text/xml.

4.30.5.4. Visualizador de Comparaes Unificadas


Um programa de visualizao para ficheiros de comparao-unificada (ficheiros remendo). No so requeridos parmetros. A opo por defeito verifica por uma associao para ficheiros .diff, e ento para ficheiros .txt. Se no tens um visualizador para ficheiros .diff irs, com muita probabilidade, obter o Notepad. O programa NotePad original do Windows no se comporta bem com ficheiros que no tm o fim-de-linha padro CR-LF. Visto que a maioria dos ficheiros de comparao-unificada tm fins-de-linha com LF puro, eles no so visualizados correctamente no NotePad. No entanto podes descarregar uma substituio gratuita para o NotePad em Notepad2 [http://www.flos-freeware.ch/notepad2.html], que no apenas mostra os fins-de-linha correctamente, mas tambm colora as linhas adicionadas e removidas.

4.30.6. Preferncias de Dados Guardados

Figura 4.63. A Caixa de Dilogo, Pgina de Dados Guardados


Para tua comodidade o TortoiseSVN guarda muitas das preferncias que usas, e lembra-se de onde andaste ultimamente. Se quiseres limpar essa cache de dado poders o fazer aqui. Histrico de URL Sempre que povoas uma cpia de trabalho, integras alteraes ou usas o navegador de repositrio, o TortoiseSVN mantm um registo dos URLs recentemente usados e oferece-lhes uma combo box. Por vezes a lista povoada com URLs desactualizados pelo que ser til periodicamente limp-la. Se queres remover um nico item de uma das combo boxes, poders faz-lo no local. Clica apenas na seta para abrir a lista da combo box, move o rato por cima do item que desejas remover e digita Shift+Del.

147

Daily Use Guide

Mensagens de registo (Caixa de dilogo de entrada) O TortoiseSVN armazena as mensagens de registo recentes, que tu introduziste. Elas so armazenadas por repositrio pelo que se acederes a muitos repositrios, essa lista poder crescer bastante. Mensagens de registo (Mostrar caixa de dilogo de registo) O TortoiseSVN faz cache das mensagens de registo trazidas pela caixa de dilogo Mostrar Registo, para te poupar tempo quando a seguir vs o registo. Se algum editar uma mensagem de registo e tens essa mensagem em cache, no irs ver a alterao at limpares a mesma. O uso da cache de mensagens est activado na pgina Caches de Registos. Dimenses e posies de caixas de dilogo Muitas caixas de dilogo lembram-se do tamanho e posio com que tu as usaste por ltimo. Dados de autenticao Quando te autenticas num servidor Subversion o nome de utilizador e a palavra-chave so guardadas localmente na cache, para que no tenhas de estar sempre a introduzi-las. Poders querer limpar esta informao, por razes de segurana, ou porque queres aceder ao repositrio com um nome de utilizador diferente... o Joo sabe que ests a usar este PC? Se queres limpar os dados de autenticao para um servidor em particular, consulta Seco 4.1.5, Autenticao para mais instrues em como encontrar os dados na cache. Registo de aces O TortoiseSVN mantm um registo de tudo o que foi escrito nas caixas de dilogo de progresso. Isto pode ser til para quando, por exemplo, quiseres verificar o que aconteceu num comando recente de actualizao. O ficheiro de registo limitado no seu tamanho e quando cresce demasiado, descartado o contedo mais antigo. Por defeito so mantidas 4000 linhas, mas podes personalizar este nmero. Daqui podes ver o contedo do ficheiro de registo, e tambm limp-lo.

4.30.7. Cache de Registo

Figura 4.64. A Caixa de Dilogo Preferncias, Pgina Cache de Registo

148

Daily Use Guide

Esta caixa de dilogo permite-te configurar a funcionalidade de cache de registo do TortoiseSVN, que retm uma cpia local das mensagens de registo e caminhos alterados, para longas descargas a partir do servidor. O uso da cache de registos pode acelerar dramaticamente a caixa de dilogo de registo e o grfico de revises. Outra funcionalidade til que as mensagens de registo podem ainda ser acedidas em modo fora-de-linha. Activar cache de registos Activa a cache de registo sempre que forem requisitados dados de registo. Se verificada, os dados sero, quando disponveis, adquiridos da cache e qualquer mensagem adquirida do servidor que no j l esteja, ser adicionada. Se a cache estiver desactivada, os dados sero sempre adquiridos directamente do servidor, e no sero armazenados localmente. Permitir URLs ambguos Ocasionalmente poders ter de te ligar a um servidor que usa o mesmo URL para todos os repositrios. Verses antigas do svnbridge podero ter este comportamento. Se necessitas aceder a tais repositrios ters de verificar esta opo. Se no, deixa-a como no verificada, para melhoria da performance. Permitir UUIDs ambguos Alguns servios de hospedagem do a todos os seus repositrios o mesmo UUID. Poders tu prprio o teres feito ao copiar uma pasta de repositrio para criar um novo. Por todo tipo de razes, isto uma m ideia um UUID deve ser nico. No entanto, a cache de registo poder funcionar nesta situao se tu verificares esta caixa. Se no precisas dela, deixa-a no verificada de modo a melhorar a performance. Se o repositrio no puder ser contactado Se ests a trabalhar fora-de-linha ou se o servidor do repositrio estiver em baixo, a cache de registo poder ser usada na mesma para fornecer as mensagens de registo j mantidas em cache. claro que a cache poder no estar actualizada, pelo que existem opes que te permitem seleccionar se esta funcionalidade dever ser usada. Quando os dados de registo estiverem a ser retirados da cache sem contactar o servidor, a caixa de dilogo que usar essas mensagens, ir mostrar o estado fora-de-linha na sua barra de ttulo. Prazo excedido antes de actualizar a reviso HEAD Quando invocas a caixa de dilogo de registo, normalmente querers contactar o servidor para verificar alguma nova mensagem de registo. Se o valor de prazo excedido configurado aqui diferente de zero, ento o servidor s ser contactado quando o prazo foi excedido desde o ltimo contacto. Isto pode reduzir as viagens de ida e volta ao servidor, se abrires a caixa de dilogo de registo com frequncia e o servidor estiver em baixo, mas os dados aqui mostrados podero no estar completamente actualizados. Se quiseres usar esta funcionalidade, sugerimos o uso do valor de 300 (5 minutos) como um compromisso. Dias de inactividade at as caches pequenas serem removidas Se navegares em muitos repositrios irs acumular muitas caches de registos. Se no as usas activamente, a cache no ir crescer muito pelo que o TortoiseSVN limpa-as aps algum tempo configurado por defeito. Usa este item para controlar a limpeza da cache. Tamanho mximo [kByte] de uma cache inactiva removida Caches grandes so mais dispendiosas de adquirir pelo que o TortoiseSVN s limpa as pequenas. Afina o limite com este valor. Nmero mximo de falhas de ferramentas at remoo da cache Ocasionalmente algo corre mal com a cache e provocado um estoiro. Se isto acontecer a cache normalmente automaticamente removida de modo a prevenir novas ocorrncias do problema. Se usares as, menos estveis, construes nocturnas poders optar por manter a cache de qualquer modo.

4.30.7.1. Repositrios em Cache


Nesta pgina, tu podes ver a lista de repositrios que esto localmente em cache e o espao usado na cache. Se seleccionares um dos repositrios poders ento usar os botes por debaixo da lista.

149

Daily Use Guide

Clica no Actualizar para refrescar completamente a cache e preencher qualquer lacuna. Para um grande repositrio isto poder consumir muito tempo, mas ser til se estiveres prestes a entrar em modo fora-de-linha e queres a melhor cache disponvel. Clica no boto Exportar para exportar a cache inteira como um conjunto de ficheiros CSV. Isto poder ser til se quiseres processar os dados de registo usando um programa externo, embora seja maioritariamente til aos programadores. Clica no Remover para remover todos os dados em cache, para os repositrios seleccionados. Isto no desactiva a cache para o repositrio, pelo que a prxima vez que requisitares dados de registo, a nova cache ser criada.

4.30.7.2. Estatsticas da Cache de Registo

Figura 4.65. A Caixa de Dilogo Preferncias, Estatsticas da Cache de Registo


Clica no boto Pormenores para veres as estatsticas detalhadas para uma cache em particular. Muitos dos campos aqui mostrados so de especial interesse apenas para os programadores do TortoiseSVN, pelo que no sero descritos em detalhe. RAM A quantidade de memria requerida para o servio desta cache. Disco A quantidade de espao em disco usado pela cache. Os dados so comprimidos pelo que a utilizao de disco geralmente razoavelmente modesta. ligao Mostra se o repositrio estava disponvel, da ltima vez que a cache foi usada.

150

Daily Use Guide

ltima actualizao A ltima vez que o contedo da cache foi alterado. ltima actualizao da head A ltima vez que requisitmos a reviso HEAD do servidor. Autores O nmero de diferentes autores com mensagens gravadas na cache. Caminhos O nmero de caminhos listados, como verias ao usar svn log -v. Intervalos omitidos O nmero de intervalos de revises que no adquiridas porque no foram simplesmente requisitadas. Esta uma medida do nmero de lacunas na cache. Reviso mxima O nmero de reviso mais alto armazenado na cache. Nmero de revises O nmero de revises armazenadas na cache. Esta outra medida da completude da cache.

4.30.8. Scripts de Gancho do Lado do Cliente

Figura 4.66. A Caixa de Dilogo Preferncias, Pgina Scripts de Gancho


Esta caixa de dilogo permite-te configurar scripts de gancho, que sero executados automaticamente, quando certas aces do Subversion so executadas. Ao contrrio dos scripts de gancho explicados em Seco 3.3, Server side hook scripts, estes so executados localmente no cliente. Uma aplicao para tais ganchos poderia ser, chamar um programa como SubWCRev.exe para actualizar os nmeros de verso aps uma submisso, e talvez disparar uma reconstruo. Por vrias razoes de segurana e implementao, os scripts de gancho so definidos localmente na mquina, em vez de propriedades do projecto. Tu defines o que acontece independentemente do que algum submete para o repositrio. claro que tu podes sempre escolher chamar um script que por sua vez est sob controlo de verses.

151

Daily Use Guide

Figura 4.67. A Caixa de Dilogo Preferncias, Configurar Scripts de Gancho


Para adicionar um novo script de gancho, clica simplesmente em Adicionar e preenche os detalhes. Existem correntemente, seis tipos de scripts de gancho disponveis Incio-submisso Chamado antes de aparecer a caixa de dilogo submeter. Poders querer usa-lo, se o gancho modificar um ficheiro versionado e afectar uma lista de ficheiros que necessitam de ser submetidos e/ou de uma mensagem de submisso. No entanto devers ter em conta que, devido ao gancho ser chamado num estgio inicial, a lista completa de objectos seleccionados para submisso no est ainda disponvel. Pr-Submisso Chamado depois de o utilizador clicar no OK na caixa de dilogo submeter, e antes de realmente comear a submisso. Este gancho tem a lista do que ser exactamente submetido. Ps-submisso Chamado aps a submisso finalizar ( com sucesso ou no). Incio-actualizao Chamado antes da caixa de dilogo actualizar-para-reviso aparecer. Pr-actualizao Chamado antes da actualizao do Subversion realmente comear. Ps-actualizao Chamado aps a actualizao finalizar ( com sucesso ou no). Um gancho definido para um caminho em particular na cpia de trabalho. Tu s necessitas de especificar o caminho de nvel superior; se executares uma operao numa subpasta, o TortoiseSVN ir procurar automaticamente para cima, por um caminho que corresponda. A seguir, devers especificar a linha de comando a executar, a comear pelo caminho para o script de gancho ou executvel. Isto poder ser um ficheiro batch, executvel, ou outro qualquer ficheiro que tenha uma associao de ficheiro vlida no Windows, e.g. um script de perl. A linha de comando inclui vrios parmetros que sero preenchidos pelo TortoiseSVN. Os parmetros passados dependem do gancho que for invocado. Cada gancho tem os seus prprios parmetros, que so passados na seguinte ordem: Incio-submisso PATHMESSAGEFILECWD Pr-Submisso PATHDEPTHMESSAGEFILECWD Ps-submisso PATHDEPTHMESSAGEFILEREVISIONERRORCWD

152

Daily Use Guide

Incio-actualizao PATHCWD Pr-actualizao PATHDEPTHREVISIONCWD Ps-actualizao PATHDEPTHREVISIONERRORCWD O significado de cada um desses parmetros descrito aqui: PATH O caminho para um ficheiro temporrio, que contm todos os caminhos para o qual a operao foi iniciada. Cada caminho est numa linha separada, no ficheiro temporrio. DEPTH A profundidade com que a submisso/actualizao executada. Valores possveis so: -2 svn_depth_unknown -1 svn_depth_exclude 0 svn_depth_empty 1 svn_depth_files 2 svn_depth_immediates 3 svn_depth_infinity MESSAGEFILE Caminho para um ficheiro que contm a mensagem de registo para a submisso. O ficheiro contm texto codificado em UTF-8. Aps execuo com sucesso do gancho Incio-de-submisso, a mensagem de registo novamente lida, dando ao gancho a oportunidade de modific-la. REVISION A reviso do repositrio para a qual a actualizao dever ser feita, ou a reviso aps a concluso de uma submisso. ERROR Caminho para um ficheiro contendo a mensagem de erro. Se no houve nenhum erro, o ficheiro estar vazio. CWD A pasta de trabalho corrente com a qual o script est a correr. Esta configurada para a pasta raiz comum a todos os caminhos afectados. Ter em conta que apesar de termos dado nomes por convenincia a esses parmetros, tu no ters de te referir a esses nomes nas configuraes dos ganchos. Todos os parmetros listados para um gancho em particular so sempre passados, quer os queiras ou no ;-) Se queres que ao funcionamento do Subversion espere at a execuo do gancho finalizar, verifica Espere que o script termine.

153

Daily Use Guide

Normalmente tu querers esconder as caixas feias de DOS, enquanto o script corre, ento a Ocultar o script durante a sua execuo est verificada por defeito. Exemplos de scripts de gancho de cliente podem ser encontrados na pasta contrib no repositrio TortoiseSVN [http://tortoisesvn.googlecode.com/svn/trunk/contrib/hook-scripts]. (Seco 3, O TortoiseSVN grtis! explica como aceder ao repositrio).

4.30.8.1. Integrao do Controlador de Problemas


O TortoiseSVN pode usar um plugin COM para consultar os controladores de problemas quando estiver na caixa de dilogo submeter. O uso de tais plugins est descrito em Seco 4.28.2, Obter Informaes do Gestor de Problemas. Se o teu administrador de sistemas forneceu-te um plugin, que j instalaste e registaste, aqui o local para especificares como ele se integra com a tua cpia de trabalho.

Figura 4.68. A Caixa de Dilogo Preferncias, Pgina Integrao com Controlador de Problemas
Clica no Adicionar... para utilizar o plugin com uma cpia de trabalho em particular. Aqui podes especificar o caminho da cpia de trabalho, escolher qual o plugin a usar a partir de um lista drop-down com todos os controladores de problemas registados, e qualquer parmetro a passar. Os parmetros sero especficos ao plugin, mas podero incluir o teu nome de utilizador no controlador de problemas, para que o plugin possa consultar os problemas que te esto atribudos. If you want all users to use the same COM plugin for your project, you can specify the plugin also with the properties bugtraq:provideruuid and bugtraq:providerparams. bugtraq:provideruuid Esta propriedade especifica o UUID COM do IBugtraqProvider, por exemplo {91974081-2DC7-4FB1B3BE-0DE1C8D6CE4E}. (Neste exemplo o UUID do fornecedor Gurtle bugtraq [http://code.google.com/ p/gurtle/], que o fornecedor para o controlador de problemas Google Code [http://code.google.com/hosting/]). bugtraq:providerparams Esta propriedade especifica os parmetros passados para o IBugtraqProvider.

154

Daily Use Guide

Please check the documentation of your IBugtraqProvider plugin to find out what to specify in these two properties.

4.30.9. Preferncias do TortoiseBlame

Figura 4.69. A Caixa de Dilogo Preferncias, Pgina do TortoiseBlame


As preferncias usadas pelo TortoiseBlame so controladas a partir do menu de contexto principal, e no directamente com o prprio TortoiseBlame. Cores O TortoiseBlame pode usar cores de fundo para indicar a idade das linhas num ficheiro. Tu configuras as pontas ao especificar as cores para a reviso mais nova e para a mais velha, e o TortoiseBlame usa uma interpolao linear entre essas duas cores de acordo com a reviso do repositrio, indicada para cada linha. Tipo de letra Tu podes seleccionar o tipo de letra usada para mostrar o texto e tambm o tamanho do ponto a usar. Isto aplica-se tambm ao contedo do ficheiro, ao autor e informao de reviso mostrada no painel esquerdo. Tabuladores Define quantos espaos devero ser usados na expanso, quando um caracter de tabulao for encontrado no contedo do ficheiro.

4.30.10. Registry Settings


A few infrequently used settings are available only by editing the registry directly. It goes without saying that you should only edit registry values if you know what you are doing. Configuration You can specify a different location for the Subversion configuration file using registry location HKCU\Software\TortoiseSVN\ConfigDir. This will affect all TortoiseSVN operations. Cache tray icon To add a cache tray icon for the TSVNCache program, create a DWORD key with a value of 1 at HKCU\Software\TortoiseSVN\CacheTrayIcon. This is really only useful for developers as it allows you to terminate the program gracefully.

155

Daily Use Guide

Debug To show the command line parameters passed from the shell extension to TortoiseProc.exe create a DWORD key with a value of 1 at HKCU\Software\TortoiseSVN\Debug. Context Menu Icons This can be useful if you use something other than the windows explorer or if you get problems with the context menu displaying correctly. create a DWORD key with a value of 0 at HKCU\Software\TortoiseSVN\ShowContextMenuIcons if you don't want TortoiseSVN to not show icons for the shell context menu items. Set this value to 1 to show the icons again. Block Overlay Status If you don't want the explorer to update the status overlays while another TortoiseSVN command is running (e.g. Update, Commit, ...) then create a DWORD key with a value of 1 at HKCU\Software\TortoiseSVN\BlockStatus. Update Check URL HKCU\Software\TortoiseSVN\UpdateCheckURL contains the URL from which TortoiseSVN tries to download a text file to find out if there are updates available. You can also set this under HKLM instead of HKCU if you want, but HKCU overwrites the setting in HKLM. This might be useful for company admins who don't want their users to update TortoiseSVN until they approve it. Filenames without extensions in auto-completion list The auto-completion list shown in the commit message editor displays the names of files listed for commit. To also include these names with extensions removed, create a DWORD key with a value of 1 at HKCU\Software\TortoiseSVN\AutocompleteRemovesExtensions. Explorer columns everywhere The extra columns the TortoiseSVN adds to the details view in Windows Explorer are normally only active in a working copy. If you want those to be accessible everywhere, not just in working copies, create a DWORD key with a value of 1 at HKCU\Software\TortoiseSVN\ColumnsEveryWhere. Merge log separator When you merge revisions from another branch, and merge tracking information is available, the log messages from the revisions you merge will be collected to make up a commit log message. A pre-defined string is used to separate the individual log messages of the merged revisions. If you prefer, you can create a SZ key at HKCU\Software\TortoiseSVN\MergeLogSeparator containing a separator string of your choice. Always blame changes with TortoiseMerge TortoiseSVN allows you to assign external diff viewer. Most such viewers, however, are not suited for change blaming (Seco 4.23.2, Diferenas de responsabilidade), so you might wish to fall back to TortoiseMerge in this case. To do so, create a DWORD key with a value of 1 at HKCU\Software\TortoiseSVN\DiffBlamesWithTortoiseMerge. Current revision highlighting for folders in log dialog The log dialog highlights the current working copy revision when the log is shown for a file. To do the same thing for a folder requires a working copy crawl, which is the default action, but it can be a slow operation for large working copies. If you want to change the operation of this feature you must create a DWORD registry key at HKCU\Software\TortoiseSVN\RecursiveLogRev. A value of 0 disables the feature (no highlighting for folders), a value of 1 (default) will fetch the status recursively (find the highest revision in the working copy tree), and a value of 2 will check the revision of the selected folder itself, but will not check any child items. Make checkout fail if an item of the same name exists By default, if you checkout a working copy over an existing unversioned folder structure, as you might do after import, then any existing which differ from the repository content will be left unchanged and marked as modified. When you come to commit, it is your local copy which will then be sent back to the repository. Some people would prefer the checkout to fail if the existing content differs, so that if two people add the same file the second person's version does not overwrite the original version by mistake. If you want to force checkouts to fail in this instance you must create a DWORD registry key with value 0 at HKCU\Software\TortoiseSVN\AllowUnversionedObstruction.

156

Daily Use Guide

4.30.11. Pastas de Trabalho do Subversion


O VS.NET 2003 quando usado com projectos web no consegue lidar com as pastas .svn que o Subversion usa para armazenar a sua informao interna. Isto no um bug do Subversion. O bug do VS.NET 2003 e das extenses frontpage que ele usa.

Ter em ateno que o bug est reparado no VS2005 e posteriores verses. A partir da verso 1.3.0 do Subversion e TortoiseSVN, tu podes configurar a varivel de ambiente SVN_ASP_DOT_NET_HACK. Se essa varivel estiver configurada, o Subversion ir usar as pastas _svn em vez das .svn. Tu ters de reiniciar a tua shell para que essa varivel de ambiente tome efeito. Normalmente isso significa reiniciar o PC. Para tornar isto mais fcil, tu podes fazer isto agora a partir da pgina de preferncias gerais, usando uma simples caixa de verificao - consulta Seco 4.30.1, Preferncias Gerais. Para mais informaes, e outras formas de evitar este problema em primeiro lugar, verifica o artigo sobre este assunto nas nossas FAQs [http://tortoisesvn.net/aspdotnethack].

4.31. Passo Final


Doa! Mesmo que o TortoiseSVN e o TortoiseMerge sejam gratuitos, tu podes apoiar os programadores enviando correces e tomando uma papel activo no desenvolvimento. Podes tambm ajudar a alegrar-nos durante as interminveis horas que passamos em frente dos nossos computadores. Enquanto trabalhamos no TortoiseSVN adoramos ouvir msica. E visto que passamos tantas horas no projecto, precisamos de muita msica. Por isso crimos umas listas de desejos, com os nossos CDs e DVDs de msica favoritos : http://tortoisesvn.tigris.org/donate.html Por favor olha tambm para a lista de pessoas que contriburam para o projecto ao enviar correces ou tradues.

157

Captulo 5. O Programa SubWCRev


O SubWCRev um programa de consola do Windows que pode ser usado para ler o estado da cpia de trabalho do Subversion, e opcionalmente executar substituio de palavras-chave num ficheiro template. Isto frequentemente usado como parte do processo de construo, como meio de incorporar informao da cpia de trabalho no objecto que ests a construir. Poder ser usado tipicamente para incluir o nmero de reviso numa caixa Sobre.

5.1. A Linha de Comando SubWCRev


O SubWCRev, por defeito, l o estado Subversion de todos os ficheiros numa cpia de trabalho, incluindo os externos. Ele grava o nmero da mais alta reviso submetida que foi encontrada e a marca temporal dessa reviso, tambm grava se existem alteraes locais na cpia de trabalho ou misturadas, revises actualizadas. O SubWCRev.exe chamado a partir da linha de comando ou de um script e, configurado atravs de parmetros na linha de comandos.

SubWCRev WorkingCopyPath [SrcVersionFile DstVersionFile] [-nmdfe] O WorkingCopyPath representa o caminho para a cpia de trabalho a ser verificada. Tu s podes usar o SubWCRev em cpias de trabalho e no directamente no repositrio. O caminho pode ser absoluto ou relativo pasta da cpia de trabalho corrente. Se queres que o SubWCRev execute substituio de palavras-chave, para que campos como a reviso do repositrio e URL sejam gravados num ficheiro de texto, irs necessitar de fornecer um ficheiro template SrcVersionFile e um ficheiro de destino DstVersionFile que contm a verso substituda do template. Existem um nmero de opes que afectam a maneira como o SubWCRev funciona. Se usares mais do que um, eles devem ser especificados como um nico grupo, e.g. teral>-nm

5.2. Substituio de Palavra-Chave


Se forem fornecidos os ficheiros de origem e destino, o SubWCRev copia da fonte para o destino, efectuando a substituio de palavras-chave da seguinte forma: Keyword $WCREV$ $WCDATE$ Descrio Substituda pela mais alta reviso de submisso da cpia de trabalho. Substituda pela data/tempo de submisso da mais alta reviso submetida. Por defeito usado o formato internacional: yyyy-mm-dd hh:mm:ss. Em alternativa poders especificar um formato personalizado que poder ser usado com strftime(), por exemplo: $WCDATE=%a %b %d %I:%M:%S %p $. Para uma lista de caracteres de formatao disponveis, consulta o online reference [http://www.cppreference.com/stddate/strftime.html]. Substituda pela data/tempo corrente do sistema. Isto poder ser usado para indicar a altura de construo. A formatao do tempo pode ser usada como descrita para o $WCDATE$. Substituda pelo intervalo de revises actualizada na cpia de trabalho. Se a cpia de trabalho est num estado inconsistente, isto poder ser apenas uma reviso. Se a cpia de trabalho contem revises misturadas, seja devido a estar desactualizada, ou devido a uma actualizao para reviso deliberada, ento o intervalo de revises ser mostrado no formato 100:200 $WCMIXED?TText:FText$ substituda por TText se existem revises de actualizao misturadas, ou FText se no for o caso. $WCMODS?TText:FText$ substituda por TText se existem alteraes locais, ou FText se no for o caso.

$WCNOW$

$WCRANGE$

$WCMIXED$ $WCMODS$

158

O Programa SubWCRev

Keyword $WCURL$ $WCINSVN$ $WCNEEDSLOCK$

Descrio Substituda pelo URL do repositrio correspondente ao caminho da cpia de trabalho passada ao SubWCRev. $WCINSVN?TText:FText$ substituda pelo TText se a entrada versionada, ou FText se no o . $WCNEEDSLOCK?TText:FText$ substituda por TText se a entrada tiver a propriedade svn:needs-lock configurada, ou por FText se no for o caso. $WCISLOCKED?TText:FText$ substituda por TText se a entrada estiver bloqueada, ou por FText se no o estiver. Substituda pela data de bloqueio. A formatao do tempo poder ser usada de acordo com o descrito para o $WCDATE$. Substituda pelo nome do autor do bloqueio. Substituda pelo comentrio do bloqueio.

$WCISLOCKED$ $WCLOCKDATE$ $WCLOCKOWNER$ $WCLOCKCOMMENT$

Tabela 5.1. Lista de opes de linha de comando disponveis

Dica
Algumas dessas palavras-chave s se aplicam a um nico ficheiro, em vez de a toda a cpia de trabalho, pelo que s far sentido us-los quando o SubWCRev for chamado a examinar um nico ficheiro. Isto aplica-se ao $WCINSVN$, $WCNEEDSLOCK$, $WCISLOCKED$, $WCLOCKDATE$, $WCLOCKOWNER$ e $WCLOCKCOMMENT$.

5.3. Exemplo de Palavra-Chave


O exemplo abaixo mostra como palavras-chave num ficheiro template so substitudas no ficheiro de sada.

// Ficheiro de teste para o SubWCRev: testfile.tmpl char char char char char char *Revision *Modified *Date *Range *Mixed *URL = = = = = = "$WCREV$"; "$WCMODS?Modificado:No modificado$"; "$WCDATE$"; "$WCRANGE$"; "$WCMIXED?Reviso misturada CT:No misturada$"; "$WCURL$";

#if $WCMODS?1:0$ #error A fonte est modificada #endif // Fim de ficheiro Depois de correr o SubWCRev.exe path\to\workingcopy testfile.tmpl testfile.txt, o ficheiro de sada testfile.txt ir ficar assim:

// Ficheiro de teste para o SubWCRev: testfile.txt char char char char *Revision *Modified *Date *Range = = = = "3701"; "Modificado"; "2005/06/15 11:15:12"; "3699:3701";

159

O Programa SubWCRev

char *Mixed char *URL

= "Reviso misturada CT"; = "http://project.domain.org/svn/trunk/src";

#if 1 #error A fonte est modificada #endif //Fim de ficheiro

Dica
Um ficheiro como este ser includo na construo, pelo que tu esperas que ele esteja sob controlo de verses. Tem a certeza de versionares o ficheiro template e no o gerado, de outra maneira de cada vez que regenerares o ficheiro de verso, ters de submeter a alterao o que por sua vez significa que o ficheiro de verso necessita ento de ser actualizado.

5.4. Interface COM


Se necessitas de aceder informao de reviso do Subversion a partir de outros programas, podes usar a interface COM do SubWCRev. O objecto a criar o SubWCRev.object e os mtodos suportados so os seguintes: Mtodo .GetWCInfo Descrio Este mtodo percorre a cpia de trabalho, reunindo a informao de reviso. Naturalmente, devers chamar este mtodo antes de poderes aceder informao usando os restantes mtodos. O primeiro parmetro o caminho. O segundo parmetro dever ser true se queres incluir as revises das pastas. Equivalente opo de linha de comando -f. O terceiro parmetro dever ser true se queres incluir svn:externals. Equivalente opo de linha de comando -e. A mais alta reviso de submisso na cpia de trabalho. Equivalente ao $WCREV$ A data/tempo de submisso da mais alta reviso de submisso. Equivalente ao $WCDATE$ O autor da mais alta reviso de submisso, isto , a ltima pessoa que submeteu alteraes na cpia de trabalho. A reviso de actualizao mnima, como mostrada em $WCRANGE$ A reviso de actualizao mxima, como mostrado em $WCRANGE$ True se existem modificaes locais Substitudo com o URL do repositrio, do caminho de cpia de trabalho, usado em GetWCInfo. Equivalente a $WCURL$ True se o item versionado. True se o item tem a propriedade svn:needs-lock configurada. True se o item est bloqueado. String que representa a data em que o bloqueio foi criado, ou uma string vazia se o item no est bloqueado. String que representa o autor do bloqueio, ou uma string vazia se o item no est bloqueado. A mensagem introduzida quando o bloqueio foi criado.

.Revision .Date .Author .MinRev .MaxRev .HasModifications .Url .IsSvnItem .NeedsLocking .IsLocked .LockCreationDate .LockOwner .LockComment

Tabela 5.2. Mtodos COM/automao suportados

160

O Programa SubWCRev

O seguinte exemplo mostra como a interface pode ser usada.

// testCOM.js - javascript file // test script for the SubWCRev COM/Automation-object filesystem = new ActiveXObject("Scripting.FileSystemObject"); revObject1 revObject2 revObject3 revObject4 = = = = new new new new ActiveXObject("SubWCRev.object"); ActiveXObject("SubWCRev.object"); ActiveXObject("SubWCRev.object"); ActiveXObject("SubWCRev.object");

revObject1.GetWCInfo( filesystem.GetAbsolutePathName("."), 1, 1); revObject2.GetWCInfo( filesystem.GetAbsolutePathName(".."), 1, 1); revObject3.GetWCInfo( filesystem.GetAbsolutePathName("SubWCRev.cpp"), 1, 1); revObject4.GetWCInfo( filesystem.GetAbsolutePathName("..\\.."), 1, 1); wcInfoString1 = "Revision = " + revObject1.Revision + "\nMin Revision = " + revObject1.MinRev + "\nMax Revision = " + revObject1.MaxRev + "\nDate = " + revObject1.Date + "\nURL = " + revObject1.Url + "\nAuthor = " + revObject1.Author + "\nHasMods = " + revObject1.HasModifications + "\nIsSvnItem = " + revObject1.IsSvnItem + "\nNeedsLocking = " + revObject1.NeedsLocking + "\nIsLocked = " + revObject1.IsLocked + "\nLockCreationDate = " + revObject1.LockCreationDate + "\nLockOwner = " + revObject1.LockOwner + "\nLockComment = " + revObject1.LockComment; wcInfoString2 = "Revision = " + revObject2.Revision + "\nMin Revision = " + revObject2.MinRev + "\nMax Revision = " + revObject2.MaxRev + "\nDate = " + revObject2.Date + "\nURL = " + revObject2.Url + "\nAuthor = " + revObject2.Author + "\nHasMods = " + revObject2.HasModifications + "\nIsSvnItem = " + revObject2.IsSvnItem + "\nNeedsLocking = " + revObject2.NeedsLocking + "\nIsLocked = " + revObject2.IsLocked + "\nLockCreationDate = " + revObject2.LockCreationDate + "\nLockOwner = " + revObject2.LockOwner + "\nLockComment = " + revObject2.LockComment; wcInfoString3 = "Revision = " + revObject3.Revision + "\nMin Revision = " + revObject3.MinRev + "\nMax Revision = " + revObject3.MaxRev + "\nDate = " + revObject3.Date + "\nURL = " + revObject3.Url + "\nAuthor = " + revObject3.Author + "\nHasMods = " + revObject3.HasModifications + "\nIsSvnItem = " + revObject3.IsSvnItem + "\nNeedsLocking = " + revObject3.NeedsLocking + "\nIsLocked = " + revObject3.IsLocked + "\nLockCreationDate = " +

161

O Programa SubWCRev

revObject3.LockCreationDate + "\nLockOwner = " + revObject3.LockOwner + "\nLockComment = " + revObject3.LockComment; wcInfoString4 = "Revision = " + revObject4.Revision + "\nMin Revision = " + revObject4.MinRev + "\nMax Revision = " + revObject4.MaxRev + "\nDate = " + revObject4.Date + "\nURL = " + revObject4.Url + "\nAuthor = " + revObject4.Author + "\nHasMods = " + revObject4.HasModifications + "\nIsSvnItem = " + revObject4.IsSvnItem + "\nNeedsLocking = " + revObject4.NeedsLocking + "\nIsLocked = " + revObject4.IsLocked + "\nLockCreationDate = " + revObject4.LockCreationDate + "\nLockOwner = " + revObject4.LockOwner + "\nLockComment = " + revObject4.LockComment; WScript.Echo(wcInfoString1); WScript.Echo(wcInfoString2); WScript.Echo(wcInfoString3); WScript.Echo(wcInfoString4);

162

Captulo 6. Interface IBugtraqProvider


Para obter uma integrao mais intima com os seguidores de problemas, do que usar simplesmente as propriedades bugtraq:, o TortoiseSVN pode fazer uso de plugins COM. Com tais plugins possvel adquirir informao directamente do seguidor de problemas, interagir com o utilizador e providenciar informao de volta ao TortoiseSVN sobre problemas abertos, verificar mensagens de registo introduzidas pelo utilizador, ou mesmo correr aces, aps uma submisso com sucesso, para e.g. fechar um problema. Ns no podemos fornecer informao e tutoriais em como implementar um objecto COM na tua linguagem de programao preferida, mas temos exemplos de plugins em C++/ATL e C#, no nosso repositrio na pasta contrib/issue-tracker-plugins. Nessa pasta poders tambm encontrar requeridos ficheiros de include que necessitas para construir o teu plugin. . (Seco 3, O TortoiseSVN grtis! explica como aceder ao repositrio).

6.1. O interface do IBugtraqProvider


TortoiseSVN 1.5 can use plugins which implement the IBugtraqProvider interface. The interface provides a few methods which plugins can use to interact with the issue tracker.

HRESULT ValidateParameters ( // Janela Pai para cada UI que necessita de ser // mostrada durante a validao. [in] HWND hParentWnd, // O parametro de string que necessita de ser validada. [in] BSTR parameters, // A string valida? [out, retval] VARIANT_BOOL *valid ); This method is called from the settings dialog where the user can add and configure the plugin. The parameters string can be used by a plugin to get additional required information, e.g., the URL to the issue tracker, login information, etc. The plugin should verify the parameters string and show an error dialog if the string is not valid. The hParentWnd parameter should be used for any dialog the plugin shows as the parent window. The plugin must return TRUE if the validation of the parameters string is successful. If the plugin returns FALSE, the settings dialog won't allow the user to add the plugin to a working copy path.

HRESULT GetLinkText ( // Janela pai para qualquer (erro) de UI que necessite de ser mostrado. [in] HWND hParentWnd, // O parametro string, para o caso de necessitares de falar com o teu // web service (e.g.) para descobrires qual o texto correcto. [in] BSTR parameters, // Que texto queres mostrar? // Use the current thread locale. [out, retval] BSTR *linkText ); The plugin can provide a string here which is used in the TortoiseSVN commit dialog for the button which invokes the plugin, e.g., "Choose issue" or "Select ticket". Make sure the string is not too long, otherwise it might not fit into the button. If the method returns an error (e.g., E_NOTIMPL), a default text is used for the button.

HRESULT GetCommitMessage (

163

Interface IBugtraqProvider

// Janela pai para o UI do teu fornecedor. [in] HWND hParentWnd, // Parmetros para o teu fornecedor. [in] BSTR parameters, [in] BSTR commonRoot, [in] SAFEARRAY(BSTR) pathList, // O texto j presente na mensagem de registo. // O teu fornecedor dever incluir este texto na nova mensagem, // quando apropriado. [in] BSTR originalMessage, // O novo texto para a mensagem de registo. // Isto substituir a mensagem original. [out, retval] BSTR *newMessage ); This is the main method of the plugin. This method is called from the TortoiseSVN commit dialog when the user clicks on the plugin button. The parameters string is the string the user has to enter in the settings dialog when he configures the plugin. Usually a plugin would use this to find the URL of the issue tracker and/or login information or more. The commonRoot string contains the parent path of all items selected to bring up the commit dialog. Note that this is not the root path of all items which the user has selected in the commit dialog. The pathList parameter contains an array of paths (as strings) which the user has selected for the commit. The originalMessage parameter contains the text entered in the log message box in the commit dialog. If the user has not yet entered any text, this string will be empty. The newMessage return string is copied into the log message edit box in the commit dialog, replacing whatever is already there. If a plugin does not modify the originalMessage string, it must return the same string again here, otherwise any text the user has entered will be lost.

6.2. A interface IBugtraqProvider2


No TortoiseSVN 1.6 foi adicionada uma nova interface que providncia mais funcionalidades aos plugins. Esta interface IBugtraqProvider2 herda da IBugtraqProvider.

HRESULT GetCommitMessage2 ( // Janela pai para o UI do teu fornecedor. [in] HWND hParentWnd, // Parametros do teu fornecedor. [in] BSTR parameters, // O URL comum da submisso [in] BSTR commonURL, [in] BSTR commonRoot, [in] SAFEARRAY(BSTR) pathList, // O Texto j presente na tua mensagem de submisso. // O teu fornecedor dever incluir este texto na nova mensagem, // quando apropriado. [in] BSTR originalMessage, //Tu podes atribuir a uma submisso propriedades de reviso personalisadas // atravs da configurao dos dois prximos parmetros. // nota: Ambos os safearrays devero ser do mesmo comprimento. // Para cada nome de propriedade dever existir um valor de propriedade! // O contedo do campo bugID (se mostrado)

164

Interface IBugtraqProvider

[in] BSTR bugID, // Contedo modificado do campo bugID [out] BSTR * bugIDOut, // A lista de nomes das propriedades de reviso. [out] SAFEARRAY(BSTR) * revPropNames, // A lista de valores de propriedades de reviso. [out] SAFEARRAY(BSTR) * revPropValues, // O novo texto para a mensagem de submisso. // Isto substitui a mensagem original [out, retval] BSTR * newMessage ); This method is called from the TortoiseSVN commit dialog when the user clicks on the plugin button. This method is called instead of GetCommitMessage(). Please refer to the documentation for GetCommitMessage for the parameters that are also used there. The parameter commonURL is the parent URL of all items selected to bring up the commit dialog. This is basically the URL of the commonRoot path. The parameter bugID contains the content of the bug-ID field (if it is shown, configured with the property bugtraq:message). The return parameter bugIDOut is used to fill the bug-ID field when the method returns. The revPropNames and revPropValues return parameters can contain name/value pairs for revision properties that the commit should set. A plugin must make sure that both arrays have the same size on return! Each property name in revPropNames must also have a corresponding value in revPropValues. If no revision properties are to be set, the plugin must return empty arrays.

HRESULT CheckCommit ( [in] HWND hParentWnd, [in] BSTR parameters, [in] BSTR commonURL, [in] BSTR commonRoot, [in] SAFEARRAY(BSTR) pathList, [in] BSTR commitMessage, [out, retval] BSTR * errorMessage ); This method is called right before the commit dialog is closed and the commit begins. A plugin can use this method to validate the selected files/folders for the commit and/or the commit message entered by the user. The parameters are the same as for GetCommitMessage2(), with the difference that commonURL is now the common URL of all checked items, and commonRoot the root path of all checked items. The return parameter errorMessage must either contain an error message which TortoiseSVN shows to the user or be empty for the commit to start. If an error message is returned, TortoiseSVN shows the error string in a dialog and keeps the commit dialog open so the user can correct whatever is wrong. A plugin should therefore return an error string which informs the user what is wrong and how to correct it.

HRESULT OnCommitFinished ( // Janela pai para qualquer (erro) UI que precisa de ser mostrado. [in] HWND hParentWnd, // A raiz comum para todos os caminhos que foram submetidos. [in] BSTR commonRoot, // Todos os caminhos que foram submetidos. [in] SAFEARRAY(BSTR) pathList,

165

Interface IBugtraqProvider

// O texto j presente na mensagem de submisso. [in] BSTR logMessage, // A reviso da submisso. [in] ULONG revision,

// Um erro a mostrar ao utilizador se esta funo // retorna algo para alm de S_OK [out, retval] BSTR * error ); This method is called after a successful commit. A plugin can use this method to e.g., close the selected issue or add information about the commit to the issue. The parameters are the same as for GetCommitMessage2.

HRESULT HasOptions( // Para quando o fornecedor providenciar opes [out, retval] VARIANT_BOOL *ret ); This method is called from the settings dialog where the user can configure the plugins. If a plugin provides its own configuration dialog with ShowOptionsDialog, it must return TRUE here, otherwise it must return FALSE.

HRESULT ShowOptionsDialog( // Janela pai para a caixa de dilogo opes [in] HWND hParentWnd, // Parmetros para o teu fornecedor. [in] BSTR parameters, // A string parmetros [out, retval] BSTR * newparameters ); This method is called from the settings dialog when the user clicks on the "Options" button that is shown if HasOptions returns TRUE. A plugin can show an options dialog to make it easier for the user to configure the plugin. The parameters string contains the plugin parameters string that is already set/entered. The newparameters return parameter must contain the parameters string which the plugin constructed from the info it gathered in its options dialog. That paramameters string is passed to all other IBugtraqProvider and IBugtraqProvider2 methods.

166

Apndice A. Questes Mais Frequentes (FAQ)


Porque o TortoiseSVN est a ser desenvolvido a todo o momento, por vezes difcil manter a documentao completamente actualizada. Ns mantemos uma FAQ em linha [http://tortoisesvn.tigris.org/faq.html] que contm a seleco das questes que nos so perguntadas na maioria das listas de correio do TortoiseSVN, <dev@tortoisesvn.tigris.org> e <users@tortoisesvn.tigris.org>. Ns tambm mantemos um projecto Issue Tracker [http://issues.tortoisesvn.net] que te pode dizer sobre algumas das coisas que ns temos nas nossas listas de afazeres, e bugs que j foram resolvidos. Se pensas que encontraste um bug, ou queres pedir uma nova funcionalidade, verifica primeiro aqui para veres se algum j antes teve a mesma ideia. If you have a question which is not answered anywhere else, the best place to ask it is on one of the mailing lists. <users@tortoisesvn.tigris.org> is the one to use if you have questions about using TortoiseSVN. If you want to help out with the development of TortoiseSVN, then you should take part in discussions on <dev@tortoisesvn.tigris.org>.

167

Apndice B. Como Farei Para...


Este apndice contm solues para problemas/questes que poders ter tido ao usar o TortoiseSVN.

B.1. Mover/copiar muitos ficheiros de uma vez s


Mover/Copiar ficheiros simples poder ser feito usando o TortoiseSVN Renomear.... Mas se pretendes mover/copiar muitos ficheiros, desta maneira ser muito lento e trabalhoso. A forma recomendada ser atravs do arrastar com o boto direito dos ficheiros para uma nova localizao. Simplesmente clica com o boto direito nos ficheiros que queres mover/copiar, sem largar o boto do rato. Ento arrasta os ficheiros para uma nova localizao e ento larga o boto do rato. O menu de contexto ir aparecer, onde poders escolher Menu de Contexto SVN Copiar para aqui arquivos com controlo de verses ou Menu de Contexto SVN Mover para aqui item(s) com controlo de verses.

B.2. Forar utilizadores a introduzir uma mensagem de registo


Existem duas maneiras de impedir os utilizadores de submeter com uma mensagem de registo vazia. Uma especfica ao TortoiseSVN, a outra funciona para todos os clientes do Subversion mas requerendo acesso directo ao servidor.

B.2.1. Script-gancho no servidor


Se tens acesso directo ao servidor do repositrio, poders instalar um script de gancho pre-commit, que rejeita todas as submisses com uma mensagem de registo vazia ou muito curta. Na pasta do repositrio no servidor, existe uma subpasta hooks que contm alguns exemplos de scripts de gancho que podes usar. O ficheiro pre-commit.tmpl contm uma amostra de script que ir rejeitar submisses se no for fornecida mensagem de registo, ou a mesma for muito curta. O ficheiro tambm contm comentrios em como instalar/usar este script. Segue apenas as instrues nesse ficheiro. Este mtodo o mtodo recomendado se os teus utilizadores, para alm do TortoiseSVN, tambm usam outros clientes de Subversion. A desvantagem que a submisso rejeitada pelo servidor, e por isso os utilizadores iro obter uma mensagem de erro. O cliente no pode saber, antes da submisso, que ela ser rejeitada. Se queres que o TortoiseSVN tenha o boto OK desactivado, at que a mensagem de registo seja suficientemente longa, ento usa por favor o mtodo descrito abaixo.

B.2.2. Propriedades do projecto


O TortoiseSVN usa propriedades para controlar algumas das suas funcionalidades. Uma dessas propriedades a propriedade tsvn:logminsize.

168

Como Farei Para...

Se tu configuras essa propriedade numa pasta, ento o TortoiseSVN ir desactivar o boto OK em todas as caixas de dilogo submeter, at o utilizador introduza uma mensagem de registo com pelo menos um comprimento igual ao especificado na propriedade. Para informao detalhada sobre essas propriedades de projecto, por favor consulte Seco 4.17, Configuraes de Projecto

B.3. Actualizar ficheiros seleccionados a partir do repositrio


Normalmente tu actualizas a tua cpia de trabalho usando TortoiseSVN Actualizar. Mas se tu s queres seleccionar alguns ficheiros novos que um colega adicionou, sem simultaneamente integrar quaisquer alteraes em outros ficheiros, necessitas ento de uma abordagem diferente. Usa TortoiseSVN Verificar alteraes, e clica em Verificar repositrio para veres o que foi alterado no repositrio. Selecciona os ficheiros que queres actualizar localmente e usa o menu de contexto para actualizar apenas esses ficheiros.

B.4. Reverter (Anular) revises no repositrio


B.4.1. Usar a caixa de dilogo registo de reviso
A maneira mais fcil para reverter as alteraes de uma nica reviso, ou de um intervalo de revises, usar a caixa de dilogo registo de revises. Este tambm o mtodo a usar, se tu queres descartar alteraes recentes e criar uma reviso anterior nova HEAD. 1. Selecciona o ficheiro ou pasta na qual tu necessitas de reverter as alteraes. Se queres reverter todas as alteraes, esta dever ser a pasta de nvel de topo. 2. Selecciona TortoiseSVN Mostrar registo para mostrar uma lista de revises. Poders necessitar de usar os botes Mostrar Todos ou Prximos 100 para mostrar as revises em que ests interessado. 3. Selecciona a reviso que queres reverter. Se queres anular um intervalo de revises, selecciona o primeiro e mantm premida a tecla Shift enquanto seleccionas a ltima. Ter em conta que, para revises mltiplas, o intervalo dever ser continuo e sem falhas. Clicar com o boto direito nas revises seleccionadas e ento selecciona Menu de Contexto Reverter alteraes a partir desta reviso. 4. Ou se tu queres tornar uma reviso anterior a nova reviso HEAD, clica com o boto direito na reviso seleccionada e selecciona o Menu de Contexto Reverter para esta reviso. Isto ir descartar todas as alteraes aps a reviso seleccionada. Tu reverteste as alteraes na tua cpia de trabalho. Verifica os resultados, e ento submete as alteraes.

B.4.2. Usa a caixa de dilogo integrar


Para anular um grande intervalo de revises poders usar a caixa de dilogo Integrar. O mtodo anterior usa a integrao por detrs do pano; este mtodo usa-a explicitamente. 1. Na tua cpia de trabalho selecciona TortoiseSVN Integrar. 2. No campo De: introduz o URL completo da pasta do ramo ou etiqueta, contendo as alteraes que tu queres reverter na tua cpia de trabalho. Este dever surgir como o URL por defeito. 3. In the From Revision field enter the revision number that you are currently at. If you are sure there is no-one else making changes, you can use the HEAD revision. 4. make sure the Use "From:" URL checkbox is checked. 5. In the To Revision field enter the revision number that you want to revert to, namely the one before the first revision to be reverted.

169

Como Farei Para...

6. Click OK to complete the merge. Tu reverteste as alteraes na tua cpia de trabalho. Verifica os resultados, e ento submete as alteraes.

B.4.3. Usa o svndumpfilter


Visto que o TortoiseSVN nunca perde dados, as tuas revises revertidas ainda existem como revises intermdias no repositrio. S a reviso HEAD foi alterada para um estado anterior. Se tu queres fazer desaparecer completamente revises do teu repositrio, apagando todos os vestgios de qualquer existncia, ters de usar medidas mais extremas. A no ser que exista uma razo muito boa para o fazer, no recomendado. Uma possvel razo seria a que algum submetesse um documento confidencial num repositrio pblico. A nica maneira de remover dados do repositrio usar a ferramenta de linha de comando do Subversion svnadmin. Tu poders encontrar a descrio de como isto se processa em Repository Maintenance [http://svnbook.redbean.com/en/1.5/svn.reposadmin.maint.html].

B.5. Comparar duas revises de um ficheiro ou pasta


Se queres comparar duas revises na histria de um item, por exemplo as revises 100 e 200 do mesmo ficheiro, usa apenas TortoiseSVN Mostrar registo para listar a histria de revises desse ficheiro. Selecciona duas revises que queres comparar e ento usa Menu de Contexto Comparar Revises. Se queres comparar o mesmo item em duas rvores diferentes, por exemplo o trunk e um ramo, podes usar o navegador de repositrio para abrir ambas as rvores e seleccionar o ficheiro em ambos os locais, e ento usar Menu de Contexto Comparar Revises. Se tu queres comparar duas rvores para ver o que foi alterado, por exemplo o trunk e uma entrega etiquetada, podes usar TortoiseSVN Navegador de Repositrio Selecciona os dois ns a comparar e usa Menu de Contexto Comparar revises HEAD. Isto ir mostrar uma lista de ficheiros alterados, e tu podes ento seleccionar ficheiros individuais para ver as alteraes em detalhe. Tu podes tambm exportar a estrutura de rvore contendo todos os ficheiros alterados, ou simplesmente uma lista de ficheiros alterados. Consulta Seco 4.10.3, Comparando Pastas para mais informaes. Em alternativa usa Menu de Contexto Comparao Unificada de Revises HEAD para ver um sumrio de todas as diferenas com um contexto minimal.

B.6. Incluir um subprojecto comum


Por vezes tu querers incluir outro projecto na tua cpia de trabalho, talvez uma biblioteca de cdigo. Tu no querers criar um duplicado deste cdigo no teu repositrio, porque ento, tu irs perder ligao com o cdigo original (e mantido). Ou talvez tenhas vrios projectos que partilham cdigo aqui. Existem pelo menos 3 maneiras de lidar com isto.

B.6.1. Usa o svn:externals


Configurar a propriedade svn:externals para uma pasta no teu projecto. Esta propriedade consiste em uma ou mais linhas; cada linha tem o nome de uma subpasta que querers usar como pasta de checkout para cdigo comum, e o URL do repositrio do qual queres efectuar aqui checkout. Para mais detalhes consultar Seco 4.18, Itens Externos. Submeter a nova pasta. Agora quando actualizares, o Subversion trar uma cpia desse projecto do seu repositrio para a tua cpia de trabalho. As subpastas, se necessrio, sero automaticamente criadas. De cada vez que actualizares a tua principal cpia de trabalho, irs tambm receber a ltima verso de todos os projectos externos. If the external project is in the same repository, any changes you make there there will be included in the commit list when you commit your main project. Se o projecto externo est num repositrio diferente, qualquer alterao que fizeres no mesmo, ser notificada quando submeteres o teu projecto principal, no entanto, ters de submeter essas alteraes externas separadamente.

170

Como Farei Para...

Dos trs mtodos descritos, este o nico que no requer instalao no lado do cliente. Assim que os externos sejam especificados nas propriedades da pasta, todos os clientes iro adquirir pastas povoadas, assim que actualizarem.

B.6.2. Usar uma cpia de trabalho aninhada.


Create a new folder within your project to contain the common code, but do not add it to Subversion Selecciona TortoiseSVN Checkout para a nova pasta e efectua o checkout da cpia do cdigo comum l para dentro. Agora tu tens uma cpia de trabalho separada, aninhada na tua cpia de trabalho principal. As duas cpias de trabalho so independentes. Quando tu submetes alteraes na cpia pai as alteraes na CT aninhada so ignoradas. por sua vez quando tu actualizas o pai a CT aninhada no ser actualizada.

B.6.3. Usa uma localizao relativa


Se usas o mesmo ncleo de cdigo comum em vrios projectos, e no queres manter mltiplas cpias de trabalho em cada projecto que o usa, poders apenas efectuar um checkout numa localizao separada que estar relacionada com todos os outros projectos que a usam. Por exemplo:

C:\Projects\Proj1 C:\Projects\Proj2 C:\Projects\Proj3 C:\Projects\Common e referncia o cdigo comum recorrendo a um caminho relativo, e.g. ..\..\Common\DSPcore. Se os teus projectos esto espalhados por localizaes no relacionadas, poders usar uma variante que consiste em, colocar o cdigo comum numa localizao e usar uma letra de unidade de rede para mapear essa localizao para algo que possas fixar nos teus projectos, e.g. Efectuar checkout do cdigo comum para D:\Documents\Framework ou C:\Documents and Settings\{login}\My Documents\framework e ento usar

SUBST X: "D:\Documents\framework" para criar o mapeamento de unidade usado no teu cdigo. Ento o teu cdigo poder usar localizaes absolutas.

#include "X:\superio\superio.h" Este mtodo s ir funcionar num ambiente apenas-PCs, e precisars de documentar os mapeamentos de unidade de rede, para que a tua equipa saiba onde esto esses ficheiros misteriosos. Este mtodo para uso estrito em ambientes de desenvolvimento fechado e no recomendado para uso geral.

B.7. Criar um atalho para um repositrio


Se precisas com frequncia de abrir o navegador de repositrio numa localizao especfica, podes criar um atalho de ambiente de trabalho, usando o interface de automao para o TortoiseProc. Cria apenas um novo atalho e aponta-o para:

TortoiseProc.exe /command:repobrowser /path:"url/to/repository" claro que necessitas de inserir o URL do repositrio real.

B.8. Ignorar ficheiros que j esto versionados


Se tu acidentalmente adicionaste alguns ficheiros que deveriam ter sido ignorados, como que os tiras do controlo de verses sem os perderes? Talvez tenhas o teu prprio ficheiro de configurao do IDE, que no faz parte do projecto, mas que levou bastante tempo a configurar ao teu modo.

171

Como Farei Para...

Se ainda no submeteste a adio, ento tudo o que tens de fazer usa o TortoiseSVN Reverter... para anular a adio. Devers ento adicionar o(s) ficheiro(s) lista de ignorados, para que eles no sejam adicionados outra vez por engano. If the files are already in the repository, you have to do a little more work. 1. Hold the Shift key to get the extended context menu and use TortoiseSVN Delete (keep local) to mark the file/folder for deletion from the repository without losing the local copy. 2. TortoiseSVN Commit the parent folder. 3. Add the file/folder to the ignore list so you don't get into the same trouble again.

B.9. Remover uma cpia de trabalho do controlo de verses


Se tu tens uma cpia de trabalho que queres converter de volta a uma pasta simples, sem as pastas .svn, podes simplesmente export-la para ela prpria. Consulta Seco 4.26.1, Remover uma cpia de trabalho do controlo de verses para descobrir como o fazer.

B.10. Remover uma cpia de trabalho


Se tu tens uma cpia de trabalho que j no necessitas, como te livrares dela de modo correcto? Fcil - apenas apaga-a no Explorador do Windows! Cpias de trabalho so entidades locais privadas auto contidas.

172

Apndice C. Dicas teis para Administradores


Este anexo contm solues para problemas/questes que tu possas ter quando s responsvel por instalar o TortoiseSVN em mltiplos computadores clientes.

C.1. Instalar o TortoiseSVN via politicas de grupo


O instalador do TortoiseSVN um ficheiro MSI, o que significa que no devers ter problemas a adicionar esse ficheiro MSI s polticas de grupo do teu controlador de domnio. Uma boa abordagem de como fazer isso poder ser encontrada no artigo 314934 da base de conhecimento da Microsoft: http://support.microsoft.com/?kbid=314934. As verses 1.3.0 e superior do TortoiseSVN tm de ser instaladas sob Configuration de Computador e no sob Configurao de Utilizador. Isto porque essas verses necessitam das novas DLLs CRT e MFC, que s podem ser instaladas por computador e no por utilizador. Se precisas mesmo de instalar o TortoiseSVN numa base por utilizador, ento deves primeiro instalar o pacote MFC e CRT verso 8 da Microsoft em cada computador, se queres instalar o TortoiseSVN como por utilizador.

C.2. Redireccionar a verificao de actualizao


O TortoiseSVN, com a periodicidade de alguns dias, verifica se existe uma nova verso disponvel. Se existir disponvel uma nova verso, uma caixa de dilogo aparece a informar o utilizador sobre esse facto.

Figura C.1. A Caixa de Dilogo Actualizao


Se s responsvel por muitos utilizadores num domnio poders querer que os teus utilizadores s usem verses que tu aprovaste, e no tenham instalada a ltima verso. Provavelmente no querers que aparea a caixa de dilogo de actualizao, para que os teus utilizadores no vo imediatamente actualizar. As verses 1.4.0 e superior do TortoiseSVN permitem-te redireccionar a verificao de actualizao para o teu servidor de intranec. Tu podes configurar a chave do registo HKCU\Software\TortoiseSVN\UpdateCheckURL (valor string) para um URL a apontar para um ficheiro de texto na tua intranet. Esse ficheiro de texto tem de ter o seguinte formato:

1.4.1.6000 Est disponvel uma nova verso do TortoiseSVN para descarregares!! http://192.168.2.1/downloads/TortoiseSVN-1.4.1.6000-svn-1.4.0.msi

173

Dicas teis para Administradores

A primeira linha desse ficheiro a string da verso. Devers ter a certeza que esta condiz com a string da verso exacta do pacote de instalao do TortoiseSVN. A segunda linha um texto personalizado mostrado na caixa de dilogo de actualizao. Podes escrever aqui o que entenderes. Tem apenas em ateno que o espao limitado, mensagens muito longas sero truncadas! A terceira linha o URL para o pacote da nova instalao. Este URL aberto quando o utilizador clica na mensagem personalizada na caixa de dilogo de actualizao. Tu tambm podes apenas apontar o utilizador para uma pgina web em vez de directamente para um ficheiro MSI. O URL aberto com o browser por defeito, pelo que se especificares uma pgina web, essa pgina aberta e mostrada ao utilizador. Se especificares o pacote MSI o browser ir interrogar o utilizador a guardar o ficheiro MSI localmente.

C.3. Configurar a varivel de ambiente SVN_ASP_DOT_NET_HACK


As of version 1.4.0 and later, the TortoiseSVN installer doesn't provide the user with the option to set the SVN_ASP_DOT_NET_HACK environment variable anymore, since that caused many problems and confusions with users which always install everything no matter if they know what it is for. Mas essa opo est s escondida para o utilizador. Podes ainda forar o instalador do TortoiseSVN a configurar essa varivel de ambiente fixando a propriedade ASPDOTNETHACK a TRUE. Por exemplo, tu podes arrancar o instalador da seguinte forma: msiexec /i TortoiseSVN-1.4.0.msi ASPDOTNETHACK=TRUE

C.4. Desactivar entradas do menu de contexto


Como na verso 1.5.0 e superior, o TortoiseSVN permite-te desactivar (na realidade, esconder) entradas do menu de contexto. Visto que esta funcionalidade, que no dever ser usada de nimo leve mas s se existir uma razo forte, no tem GUI para isto e ter de ser feita directamente no registo. Isto pode ser usado para desactivar certos comandos para que os utilizadores no os usem. Mas por favor, tem em conta que s as entradas do menu de contexto no explorador so escondidos, e os comandos continuam disponveis atravs de outros meios, e.g. a linha de comandos ou mesmo noutras caixas de dilogo no prprio TortoiseSVN! As chaves de registo que guardam a informao de que entradas de menu de contexto so mostradas, so HKEY_CURRENT_USER\Software\TortoiseSVN\ContextMenuEntriesMaskLow e HKEY_CURRENT_USER\Software\TortoiseSVN\ContextMenuEntriesMaskHigh. Cada uma dessas entradas de registo um valor DWORD, com cada bit a corresponder a uma entrada especfica do menu. Um bit activo, significa que a entrada de menu correspondente est desactivada. Valor 0x0000000000000001 0x0000000000000002 0x0000000000000004 0x0000000000000008 0x0000000000000010 0x0000000000000020 0x0000000000000040 0x0000000000000080 0x0000000000000100 0x0000000000000200 0x0000000000000400 0x0000000000000800 0x0000000000001000 0x0000000000002000 Entrada de menu Checkout Actualizar Submeter Adicionar Reverter Limpar Resolver Trocar Importar Exportar Criar repositrio aqui Ramo/Etiqueta Integrar Remover

174

Dicas teis para Administradores

Valor 0x0000000000004000 0x0000000000008000 0x0000000000010000 0x0000000000020000 0x0000000000040000 0x0000000000080000 0x0000000000100000 0x0000000000200000 0x0000000000400000 0x0000000000800000 0x0000000001000000 0x0000000002000000 0x0000000004000000 0x0000000008000000 0x0000000010000000 0x0000000020000000 0x0000000040000000 0x0000000080000000 0x2000000000000000 0x4000000000000000 0x8000000000000000

Entrada de menu Alterar nome Actualizar para reviso Comparar Mostrar Registo Editar Conflitos Reposicionar Verificar alteraes Ignorar Navegador de Repositrio Responsabilizar Criar Correco Aplicar Correco Grfico de revises Bloquear Libertar Bloqueio Propriedades Comparar com URL Remover itens no versionados Preferncias Ajuda Sobre

Tabela C.1. Entradas de menu e seus valores


Exemplo: para desactivar as entradas de menu Reposicionar, o Remover itens no versionados e o Preferncias, adiciona os valores atribuidos a essas entradas do seguinte modo:

0x0000000000080000 + 0x0000000080000000 + 0x2000000000000000 = 0x2000000080080000 o valor DWORDo mais baixo (0x80080000) dever ser ento armazenado na HKEY_CURRENT_USER\Software\TortoiseSVN\ContextMenuEntriesMaskLow, o valor DWORD mais alto (0x20000000) em HKEY_CURRENT_USER\Software\TortoiseSVN\ContextMenuEntriesMaskHigh. Para re-activar de novo as entradas do menu, simplesmente apaga as duas chaves de registo.

175

Apndice D. Automatizar o TortoiseSVN


Visto que todos os comandos do TortoiseSVN so controlados atravs de parmetros de linha de comandos, tu podes automatiz-los com scripts de batch ou arrancar comandos especficos e caixas de dilogo a partir de outros comandos (e.g. o teu editor de texto preferido).

Importante
Lembra-te que o TortoiseSVN um cliente de GUI e este guia de automao mostra-te como fazer as caixas de dilogo do TortoiseSVN aparecer, para colectar a entrada do utilizador. Se tu queres escrever um script que no requer entrada de dados, devers usar em alternativa, o cliente de linha de comandos oficial do Subversion.

D.1. Comandos TortoiseSVN


O programa de GUI do TortoiseSVN chama-se TortoiseProc.exe. Todos os comandos so especificados com o parmetro /command:abcd onde abcd o nome do comando requerido. A maioria desses comandos necessitam pelo menos de um argumento de caminho, que dado com /path:"some\path". Na tabela seguinte o comando refere-se ao parmetro /command:abcd e o caminho refere-se ao parmetro /path:"some \path". Visto que alguns dos comandos podem necessitar de uma lista de caminhos de destinos (e.g. submeter vrios ficheiros especficos), o parmetro /path pode requerer vrios caminhos, separados pelo caracter *. O TortoiseSVN usa ficheiros temporrios para passar mltiplos argumentos entre a extenso da shell e o programa principal. A partir do TortoiseSVN 1.5.0 o parmetro /notempfile obsoleto e no mais necessrio adicion-lo. A caixa de dilogo que usada para submisses, actualizaes e muitos mais comandos fica usualmente aberta depois do comando ter acabado at o utilizador premir o boto OK. Isto pode ser alterado ao verificar a opo correspondente na caixa de dilogo preferncias. Mas ao usar essa preferncia, ir-se- fechar a caixa de dilogo de progresso independentemente de iniciares o comando a partir de um ficheiro de batch ou a partir do menu de contexto do TortoiseSVN. Para especificar uma localizao diferente para o ficheiro de configurao, usa o parmetro / configdir:"path\to\config\directory". Isto ir substituir o caminho por defeito, incluindo qualquer configurao do registo. To close the progress dialog at the end of a command automatically without using the permanent setting you can pass the /closeonend parameter. /closeonend:0 no fechar automaticamente a caixa de dilogo /closeonend:1 fechar automaticamente se no existem erros /closeonend:2 fechar automaticamente se no existem erros e conflitos /closeonend:3 fechar automaticamente se no existem erros, conflitos e integraes /closeonend:4 auto close if no errors, conflicts and merges for local operations A tabela abaixo lista todos os comandos que podem ser acedidos usando a linha de comandos TortoiseProc.exe. Como descrito acima, esses devero ser usados na forma /command:abcd. Na tabela omitido o prefixo / command por questes de espao. Comando :about Descrio Mosta a caixa de dilogo Sobre. Esta tambm mostrada se no dado nenhum comando.

176

Automatizar o TortoiseSVN

Comando :log

Descrio Opens the log dialog. The /path specifies the file or folder for which the log should be shown. Three additional options can be set: /startrev:xxx, / endrev:xxx and /strict Abre a caixa de dilogo checkout. O /path especfica a directoria destino e o / url especfica o URL de onde efectuar o checkout. Abre a caixa de dilogo importar. O /path especfica a pasta com os dados a importar. Updates the working copy in /path to HEAD. If the option /rev is given then a dialog is shown to ask the user to which revision the update should go. To avoid the dialog specify a revision number /rev:1234. Other options are /nonrecursive and /ignoreexternals. Abre a caixa de dilogo submeter. O /path especfica a pasta de destino ou a lista de ficheiros a submeter. Tu podes tambm especificar a opo /logmsg para passar uma mensagem de registo pr-definida para a caixa de dilogo submeter. Ou se no queres passar a mensagem de registo na linha de comandos, usa / logmsgfile:path, onde o path aponta para um ficheiro que contm a mensagem de registo. Para pr-preencher a caixa do ID-Problema ( no caso de teres configurado correctamente a integrao com os seguidores de bugs), podes usar para isso o /bugid:"the bug id here". Adiciona ao controlo de verses os ficheiros em /path Reverte as modificaes locais de uma cpia de trabalho. O /path diz quais os itens a reverter. Cleans up interrupted or aborted operations and unlocks the working copy in / path. Marca um ficheiro em conflito em /path como resolvido. Se for dado o /noquestion ento a resoluo feita sem perguntar primeiro ao utilizador se ela dever ser mesmo feita. Cria um repositrio em /path Abre a caixa de dilogo trocar. O /path especfica a pasta destino. Exporta a cpia de trabalho em /path para outra pasta. Se o /path apontar para uma pasta no versionada, a caixa de dilogo perguntar por um URL para exportar para a pasta em /path. Abre a caixa de dilogo integrar. O /path especfica a pasta de destino. Para integrar um intervalo de revises esto disponveis as seguintes opes: / fromurl:URL, /revrange:string. Para integrar duas rvores de repositrio, esto disponveis as seguintes opes: /fromurl:URL, /tourl:URL, / fromrev:xxx e /torev:xxx. Estas pr-preencher os campos relevantes na caixa de dilogo integrar. Abre a caixa de dilogo integrar todos. O /path especfica a pasta de destino. Mostra a caixa de dilogo ramo/etiqueta. O /path a cpia de trabalho de onde efectuar o ramo/etiqueta. E o /url o URL destino. Tu tambm podes especificar a opo /logmsg para passar uma mensagem de registo pr-definida para a caixa de dilogo ramo/etiqueta. Ou se no queres passar a mensagem de registo na linha de comandos, usa o /logmsgfile:path, onde o path aponta para um ficheiro que contm a mensagem de registo. Abre a caixa de dilogo preferncias. Remove do controlo de verses o(s) ficheiro(s) em /path.

:checkout :import :update

:commit

:add :revert :cleanup :resolve

:repocreate :switch :export

:merge

:mergeall :copy

:settings :remove

177

Automatizar o TortoiseSVN

Comando :rename

Descrio Altera o nome do ficheiro em /path. O novo nome do ficheiro ser pedido numa caixa de dilogo. Para evitar a pergunta sobre alterar o nome a ficheiros similares num s passo, passa /noquestion. Starts the external diff program specified in the TortoiseSVN settings. The /path specifies the first file. If the option /path2 is set, then the diff program is started with those two files. If /path2 is omitted, then the diff is done between the file in / path and its BASE. To explicitly set the revision numbers use /startrev:xxx and /endrev:xxx. If /blame is set and /path2 is not set, then the diff is done by first blaming the files with the given revisions. Dependendo dos URLs e revises a comparar, isto ou mostra uma comparao unificada (se a opo unified for usada), uma caixa de dilogo com a lista de ficheiros que foram alterados, ou se os URLs apontam para ficheiros arranca o visualizador de comparao para esses dois ficheiros. As opes url1, url2, revision1 e revision2 devem ser especificadas. As opes pegrevision, ignoreancestry, blame and unified so opcionais.

:diff

:showcompare

:conflicteditor :relocate :help :repostatus :repobrowser

Arranca o editor de conflitos especificado nas preferncias do TortoiseSVN com os ficheiros correctos para o ficheiro em conflito no /path. Abre a caixa de dilogo reposicionar. O /path especifica o caminho da cpia de trabalho a reposicionar. Abre o ficheiro de ajuda. Opens the check-for-modifications dialog. The /path specifies the working copy directory. Arranca o navegador de repositrio apontando para o URL da cpia de trabalho dada pelo /path, ou o /path aponta directamente para um URL. Uma opo adicional /rev:xxx, pode ser usada para especificar qual a reviso que o navegador de repositrio deve mostrar. Se for omitido o /rev:xxx, ser por defeito HEAD. Se o /path apontar para um URL, o /projectpropertiespath:path/to/ wc especifica o caminho de onde deve ler e usar as propriedades do projecto. Adiciona todos os objectos em /path lista de ignorados, i.e. adiciona a propriedade svn:ignore a esses ficheiros. Abre a caixa de dilogo responsabilizar paa o ficheiro especificado em /path. Se as opes /startrev e /endrev so usadas, ento a caixa de dilogo que pergunta pelo intervalo de responsabilidade no ser mostrada, e em alternativa ser usado os valores dessas opes. Se a opo /line:nnn for usada, o TortoiseBlame ir abrir mostrando a linha cujo nmero foi especificado. As opes /ignoreeol, /ignorespaces e /ignoreallspaces so tambm suportadas.

:ignore :blame

:cat

Guarda um ficheiro de um URL ou cpia de trabalho dada em /path para a localizao especificada em /savepath:path. A reviso dada em / revision:xxx. Isto pode ser usado para obter um ficheiro com uma reviso especfica. Cria um ficheiro de correo para o caminho dado em /path. Mostra o grfico de revises para o caminho dado em /path.

:createpatch :revisiongraph

178

Automatizar o TortoiseSVN

Comando :lock

Descrio Bloqueia um ficheiro ou todos os ficheiros numa pasta dada por /path. mostrada a caixa de dilogo 'Bloquear' para que o utilizador possa introduzir um comentrio para o bloqueio. Desbloqueia um ficheiro ou todos os ficheiros numa pasta dada por /path. Reconstri a cache de cones do windows. Usa s isto no caso de os cones do Windows ficarem corrompidos. Um efeito secundrio disto (que no pode ser evitado) que os cones no ambiente de trabalho so reordenados. Para suprimir a caixa de mensagem, passa o /noquestion. Mostra a caixa de dilogo propriedades para o caminho dado por /path.

:unlock :rebuildiconcache

:properties

Tabela D.1. Lista de comandos e opes disponveis


Exemplos (que deveram ser introduzidos numa s linha):

TortoiseProc.exe /command:commit /path:"c:\svn_wc\file1.txt*c:\svn_wc\file2.txt" /logmsg:"test log message" /closeonend:0 TortoiseProc.exe /command:update /path:"c:\svn_wc\" /closeonend:0 TortoiseProc.exe /command:log /path:"c:\svn_wc\file1.txt" /startrev:50 /endrev:60 /closeonend:0

D.2. Comandos TortoiseIDiff


A ferramenta de comparao de imagem tem algumas opes de linha de comandos que tu podes usar para controlar o modo como a ferramenta arranca. O programa chama-se TortoiseIDiff.exe. A tabela abaixo lista todas as opes que podem ser passadas, a partir da linha de comandos, para a ferramenta de comparao de imagens. Opo :left :lefttitle :right :righttitle :overlay :fit :showinfo Descrio Caminho para o ficheiro mostrado esquerda. A string de ttulo. Esta string usada no ttulo da vista da imagem em vez do caminho completo para o ficheiro da mesma. Caminho para o ficheiro mostrado direita. A string de ttulo. Esta string usada no ttulo da vista da imagem em vez do caminho completo para o ficheiro da mesma. Se especificada, a ferramenta de comparao de imagens comuta para o modo sobreposio (alpha blend). Se especificada, a ferramenta de comparao de imagens encaixa as duas imagens juntas. Mostra a caixa de informaes da imagem.

Tabela D.2. Lista de opes disponveis


Exemplo (que dever ser introduzido numa linha s):

TortoiseIDiff.exe /left:"c:\images\img1.jpg" /lefttitle:"image 1" /right:"c:\images\img2.jpg" /righttitle:"image 2"

179

Automatizar o TortoiseSVN

/fit /overlay

180

Apndice E. Referncia Cruzada da Interface de Linha de Comandos


Por vezes este manual refere-se principal documentao do Subversion, que descreve o Subversion em termos da Interface de Linha de Comandos (ILC). Para te ajudar a compreender o que o tortoise faz nos bastidores, ns compilmos uma lista mostrando os comandos ILC equivalentes, para cada comando do GUI do TortoiseSVN.

Nota
Mesmo que hajam ILC equivalentes para o que o TortoiseSVN faz, lembra-te que o TortoiseSVN no chama o ILC mas usa directamente a biblioteca do Subversion. Se pensas que encontraste um bug no TortoiseSVN, podemos pedir-te para o reproduzir, usando o ILC, para que possamos distinguir os problemas do TortoiseSVN dos do Subversion. Esta referncia diz qual o comando a tentar.

E.1. Convenes e Regras Bsicas


In the descriptions which follow, the URL for a repository location is shown simply as URL, and an example might be http://tortoisesvn.googlecode.com/svn/trunk. The working copy path is shown simply as PATH, and an example might be C:\TortoiseSVN\trunk.

Importante
Porque o TortoiseSVN uma extenso da Shell do Windows, no capaz de usar a noo de pasta corrente de trabalho. Todos os caminhos da cpia de trabalho devero ser fornecidos usando o caminho absoluto e no o caminho relativo. Certos itens so opcionais, e esses no TortoiseSVN so frequentemente controlados por caixas de verificao ou botes de rdio. Essas opes so mostradas em [parnteses rectos] nas definies da linha de comandos.

E.2. Comandos TortoiseSVN


E.2.1. Checkout
svn checkout [-N] [--ignore-externals] [-r rev] URL PATH If Only checkout the top folder is checked, use the -N switch. Se estiver verificada a Omitir externos, usa o parmetro --ignore-externals Se estiveres efectuar checkout a uma reviso especfica, especifica o URL usando o parmetro -r.

E.2.2. Actualizar
svn info URL_of_WC svn update [-r rev] PATH O actualizar de itens mltiplos no correntemente uma actividade atmica no Subversion. Ento o TortoiseSVN procura primeiro a reviso HEAD do repositrio e s ento actualiza todos os itens para o nmero de reviso em particular, para evitar criar de uma cpia de trabalho com revises misturadas. Se s um item est seleccionado para actualizar ou os itens seleccionados no so todos do mesmo repositrio, o TortoiseSVN apenas actualiza para a HEAD.

181

Referncia Cruzada da Interface de Linha de Comandos No so usadas aqui opes de linha de comandos. O Actualizar para reviso tambm implementa o comando actualizar, mas oferece mais opes.

E.2.3. Actualizar para Reviso


svn info URL_of_WC svn update [-r rev] [-N] [--ignore-externals] PATH If Only update the top folder is checked, use the -N switch. Se estiver verificada a Omitir externos, usa o parmetro --ignore-externals

E.2.4. Submeter
No TortoiseSVN a caixa de dilogo submeter usa vrios comandos do Subversion. A primeira fase uma verificao de estado, que determina quais os itens, na tua cpia de trabalho, que podem ser potencialmente submetidos. Tu podes rever a lista, compara os ficheiros com a BASE, e seleccionar quais os itens que queres incluir na submisso.

svn status -v PATH Se a Mostrar ficheiros no versionados est verificada, o TortoiseSVN ir tambm mostrar todos os ficheiros e pastas no versionadas na hierarquia da cpia de trabalho, tendo em conta as regras de ignorar. Esta funcionalidade em particular, no tem equivalente no Subversion j que o comando svn status no desce s pastas no versionadas. Se tu seleccionares qualquer pasta ou ficheiro no versionado, esses itens sero primeiro adicionados tua cpia de trabalho

svn add PATH... Quando clicas no OK efectuada a submisso Subversion. Se deixaste todas as caixas de seleco de ficheiros no seu estado por defeito, o TortoiseSVN usa uma nica submisso recursiva da cpia de trabalho. Se desseleccionaste alguns ficheiros, ento ser usada uma submisso no recursiva (-N), e cada caminho ter de ser especificado individualmente na linha de comandos da submisso.

svn commit -m "LogMessage" [-N] [--no-unlock] PATH... A LogMessage representa aqui o contedo da caixa de edio da mensagem de registo. Esta pode ser vazia. Se a Manter bloqueios estiver verificada, usa o parmetro --no-unlock.

E.2.5. Comparar
svn diff PATH Se usa o Comparar a partir do menu de contexto principal, estars a comparar o ficheiro modificado com a sua reviso BASE. A sada do comando ILC acima, tambm faz isto e produz a sada no formato comparao-unificada. No entanto este no o que o TortoiseSVN est a usar. O TortoiseSVN usa o TortoiseMerge (ou um programa de comparao tua escolha) para mostrar visualmente as diferenas entre os ficheiros de texto integral, pelo que no existe nenhum ILC equivalente. Tu tambm podes comparar quaisquer 2 ficheiros usando o TortoiseSVN, estejam eles ou no sob controlo de verses. O TortoiseSVN apenas carrega os dois ficheiros, para o programa de comparao escolhido, e deixa-o descobrir onde esto as diferenas.

182

Referncia Cruzada da Interface de Linha de Comandos

E.2.6. Mostrar Registo


svn log -v -r 0:N --limit 100 [--stop-on-copy] PATH or svn log -v -r M:N [--stop-on-copy] PATH Por defeito, o TortoiseSVN tenta obter 100 mensagens de registo usando o mtodo --limit. Se as preferncias lhe dizem para usar as APIs antigas, ento uma segunda forma usada para obter as mensagens de registo de 100 revises do repositrio. Se Parar ao copiar/mudar nome estiver verificado, usa a opo --stop-on-copy.

E.2.7. Verificar Modificaes


svn status -v PATH or svn status -u -v PATH A verificao do estado inicial olha s para a tua cpia de trabalho. Se clicares em Verificar repositrio ento o repositrio tambm verificado para ver que ficheiros poderam ter sido alterados por uma actualizao, o que requer a opo -u. Se a Mostrar ficheiros no versionados est verificada, o TortoiseSVN ir tambm mostrar todos os ficheiros e pastas no versionadas na hierarquia da cpia de trabalho, tendo em conta as regras de ignorar. Esta funcionalidade em particular, no tem equivalente no Subversion j que o comando svn status no desce s pastas no versionadas.

E.2.8. Revision Graph


O grfico de revises uma funcionalidade s do TortoiseSVN. No existe um equivalente no cliente de linha de comandos. O que faz o TortoiseSVN um svn info URL_of_WC svn log -v URL onde o URL a raiz do repositrio, e ento analisa os dados retornados.

E.2.9. Repo Browser


svn info URL_of_WC svn list [-r rev] -v URL Podes usar o svn info para determinar a raiz do repositrio, que o nvel de topo mostrado no navegador de repositrio. Tu no podes navegar Para cima para alm deste nvel. Este comando tambm retorna toda a informao de bloqueio, mostrada no navegador de repositrio. A chamada svn list ir listar os contedos de uma pasta, dado o URL e reviso.

E.2.10. Editar Conflitos


Este comando no tem equivalente ILC. Ele invoca o TortoiseMerge ou, uma ferramenta externa de comparao/integrao de 3 modos, para olhar para os ficheiros envolvidos no conflito e determinar quais as linhas a usar.

E.2.11. Resolved

183

Referncia Cruzada da Interface de Linha de Comandos svn resolved PATH

E.2.12. Alterar nome


svn rename CURR_PATH NEW_PATH

E.2.13. Remover
svn delete PATH

E.2.14. Reverter
svn status -v PATH A primeira fase uma verificao do estado, que determina quais os itens na tua cpia de trabalho, que podem potencialmente ser revertidos. Tu podes rever a lista, comparar os ficheiros com a BASE e seleccionar os itens que queres que sejam includos na reverso. Quando tu clicas no OK, toma lugar a reverso Subversion. Se deixaste todas as caixas de seleco de ficheiros no seu estado por defeito, o TortoiseSVN usa uma reverso simples e recursiva (-R) da cpia de trabalho. Se desseleccionaste alguns ficheiros, ento cada caminho deve ser individualmente especificado na linha de comando da reverso.

svn revert [-R] PATH...

E.2.15. Limpar
svn limpar PATH

E.2.16. Obter "Lock"


svn status -v PATH A primeira fase uma verificao de estado, que determina os ficheiros na tua cpia de trabalho que podem potencialmente ser bloqueados. Tu podes seleccionar os itens que queres que sejam bloqueados.

svn lock -m "LockMessage" [--force] PATH... LockMessage representa aqui os contedos da caixa de edio da mensagem de bloqueio. Isto pode ser vazio. Se estiver verificada a Roubar bloqueios usa a opo --force.

E.2.17. Libertar "Lock"


svn unlock PATH

E.2.18. Ramo/Etiqueta
svn copy -m "LogMessage" URL URL or svn copy -m "LogMessage" URL@rev URL@rev

184

Referncia Cruzada da Interface de Linha de Comandos or svn copy -m "LogMessage" PATH URL A caixa de dilogo Ramo/Etiqueta executa uma cpia para o repositrio. Existem 3 botes de rdio com opes: A reviso HEAD do repositrio Specific revision in repository Cpia de trabalho que correspondem s 3 variantes de linha de comando acima mostradas. A LogMessage representa aqui o contedo da caixa de edio da mensagem de registo. Esta pode ser vazia.

E.2.19. Trocar
svn info URL_of_WC svn switch [-r rev] URL PATH

E.2.20. Integrar
svn merge [--dry-run] --force From_URL@revN To_URL@revM PATH O Integrao de Teste executa a mesma integrao com a opo --dry-run.

svn diff From_URL@revN To_URL@revM A Comparao unificada mostra a operao de comparao que ser usada para executar a integrao.

E.2.21. Exportar
svn export [-r rev] [--ignore-externals] URL Export_PATH Esta forma usada quando acedido a partir de uma pasta no versionada, e a pasta usada como destino. Exportar uma cpia de trabalho para uma localizao diferente, efectuada sem o uso da biblioteca do Subversion, pelo que no existe comando de linha equivalente. O que o TortoiseSVN faz copiar todos os ficheiros para uma nova localizao, enquanto mostra o progresso da operao. Ficheiros/pastas no versionados podero ser tambm exportados, opcionalmente. Em ambos os casos, se est verificada a Omitir externos, usa a opo --ignore-externals.

E.2.22. Reposicionar
svn switch --relocate From_URL To_URL

E.2.23. Criar Repositrio Aqui


svnadmin create --fs-type fsfs PATH

E.2.24. Adicionar

185

Referncia Cruzada da Interface de Linha de Comandos svn add PATH... Se seleccionaste uma pasta, o TortoiseSVN primeiro examina-a recursivamente procura de itens que podem ser adicionados.

E.2.25. Importar
svn import -m LogMessage PATH URL A LogMessage representa aqui o contedo da caixa de edio da mensagem de registo. Esta pode ser vazia.

E.2.26. Responsabilizar
svn blame -r N:M -v PATH svn log -r N:M PATH Se usares o TortoiseBlame para ver a informao de responsabilidade, tambm requerido o ficheiro de registo para mostrar as mensagens de registo numa etiqueta de dica. Se vires a responsabilidade como um ficheiro de texto esta informao no ento requerida.

E.2.27. Addicionar list de tems a ignorar


svn propget svn:ignore PATH > tempfile {edit new ignore item into tempfile} svn propset svn:ignore -F tempfile PATH Porque a propriedade svn:ignore frequentemente um valor multi-linha, mostrado aqui como sendo alterado via um ficheiro de texto em vez de directamente na linha de comandos.

E.2.28. Criar Correco


svn diff PATH > patch-file O TortoiseSVN cria um ficheiro de correco no formato comparao-unificada ao comparar a cpia de trabalho com a sua verso BASE.

E.2.29. Aplicar Correco


Aplicar correces um trabalho complicado, a no ser que a correco e a cpia de trabalho estejam na mesma reviso. Afortunadamente para ti, poders usar o TortoiseMerge, que no tem equivalente directo no Subversion.

186

Apndice F. Pormenores de Implemtao


This appendix contains a more detailed discussion of the implementation of some of TortoiseSVN's features.

F.1. Sobreposio de cones


Every file and folder has a Subversion status value as reported by the Subversion library. In the command line client, these are represented by single letter codes, but in TortoiseSVN they are shown graphically using the icon overlays. Because the number of overlays is very limited, each overlay may represent one of several status values.

The Conflicted overlay is used to represent the conflicted state, where an update or switch results in conflicts between local changes and changes downloaded from the repository. It is also used to indicate the obstructed state, which can occur when an operation is unable to complete.

The Modified overlay represents the modified state, where you have made local modifications, the merged state, where changes from the repository have been merged with local changes, and the replaced state, where a file has been deleted and replaced by another different file with the same name.

The Deleted overlay represents the deleted state, where an item is scheduled for deletion, or the missing state, where an item is not present. Naturally an item which is missing cannot have an overlay itself, but the parent folder can be marked if one of its child items is missing.

The Added overlay is simply used to represent the added status when an item has been added to version control.

The In Subversion overlay is used to represent an item which is in the normal state, or a versioned item whose state is not yet known. Because TortoiseSVN uses a background caching process to gather status, it may take a few seconds before the overlay updates.

The Needs Lock overlay is used to indicate when a file has the svn:needs-lock property set. For working copies which were created using Subversion 1.4.0 and later, the svn:needs-lock status is cached locally by Subversion and this is used to determine when to show this overlay. For working copies which are in pre-1.4.x format, TortoiseSVN shows this overlay when the file has read-only status. Note that Subversion automatically upgrades working copies when you update them, although the caching of the svn:needs-lock property may not happen until the file itself is updated.

The Locked overlay is used when the local working copy holds a lock for that file.

187

Pormenores de Implemtao

The Ignored overlay is used to represent an item which is in the ignored state, either due to a global ignore pattern, or the svn:ignore property of the parent folder. This overlay is optional.

The Unversioned overlay is used to represent an item which is in the unversioned state. This is an item in a versioned folder, but which is not under version control itself. This overlay is optional. If an item has subversion status none (the item is not within a working copy) then no overlay is shown. If you have chosen to disable the Ignored and Unversioned overlays then no overlay will be shown for those files either. An item can only have one Subversion status value. For example a file could be locally modified and it could be marked for deletion at the same time. Subversion returns a single status value - in this case deleted. Those priorities are defined within Subversion itself. When TortoiseSVN displays the status recursively (the default setting), each folder displays an overlay reflecting its own status and the status of all its children. In order to display a single summary overlay, we use the priority order shown above to determine which overlay to use, with the Conflicted overlay taking highest priority. In fact, you may find that not all of these icons are used on your system. This is because the number of overlays allowed by Windows is limited to 15. Windows uses 4 of those, and the remaining 11 can be used by other applications. If there are not enough overlay slots available, TortoiseSVN tries to be a Good Citizen (TM) and limits its use of overlays to give other apps a chance. Normal, Modified and Conflicted are always loaded and visible. Deleted is loaded if possible, but falls back to Modified if there are not enough slots. Read-Only is loaded if possible, but falls back to Normal if there are not enough slots. Locked is only loaded if there are fewer than 13 overlays already loaded. It falls back to Normal if there are not enough slots. Added is only loaded if there are fewer than 14 overlays already loaded. It falls back to Modified if there are not enough slots.

188

Apndice G. Proteco de Svnserve com SSH


This section provides a step-by-step guide to setting up Subversion and TortoiseSVN to use the svn+ssh protocol. If you already use authenticated SSH connections to login to your server, then you are already there and you can find more detail in the Subversion book. If you are not using SSH but would like to do so to protect your Subversion installation, this guide gives a simple method which does not involve creating a separate SSH user account on the server for every subversion user. In this implementation we create a single SSH user account for all subversion users, and use different authentication keys to differentiate between the real Subversion users. In this appendix we assume that you already have the subversion tools installed, and that you have created a repository as detailed elsewhere in this manual. Note that you should not start svnserve as a service or daemon when used with SSH. Much of the information here comes from a tutorial provided by Marc Logemann, which can be found at www.logemann.org [http://www.logemann.org/2007/03/13/subversion-tortoisesvn-ssh-howto/] Additional information on setting up a Windows server was provided by Thorsten Mller. Thanks guys!

G.1. Instalao de um servidor Linux


You need to have SSH enabled on the server, and here we assume that you will be using OpenSSH. On most distributions this will already be installed. To find out, type:

ps xa | grep sshd and look for ssh jobs. One point to note is that if you build Subversion from source and do not provide any argument to ./configure, Subversion creates a bin directory under /usr/local and places its binaries there. If you want to use tunneling mode with SSH, you have to be aware that the user logging in via SSH needs to execute the svnserve program and some other binaries. For this reason, either place /usr/local/bin into the PATH variable or create symbolic links of your binaries to the /usr/sbin directory, or to any other directory which is commonly in the PATH. To check that everything is OK, login in as the target user with SSH and type:

which svnserve This command should tell you if svnserve is reachable. Create a new user which we will use to access the svn repository:

useradd -m svnuser Be sure to give this user full access rights to the repository.

G.2. Instalao de um servidor Windows


Install Cygwin SSH daemon as described here: http://pigtail.net/LRP/printsrv/cygwin-sshd.html Create a new Windows user account svnuser which we will use to access the repository. Be sure to give this user full access rights to the repository.

189

Proteco de Svnserve com SSH

If there is no password file yet then create one from the Cygwin console using:

mkpasswd -l > /etc/passwd

G.3. Utilitrios de client SSH para utilizao com TortoiseSVN


Grab the tools we need for using SSH on the windows client from this site: http://www.chiark.greenend.org.uk/ ~sgtatham/putty/ Just go to the download section and get Putty, Plink, Pageant and Puttygen.

G.4. Criao de certificados OpenSSH


The next step is to create a key pair for authentication. There are two possible ways to create keys. The first is to create the keys with PuTTYgen on the client, upload the public key to your server and use the private key with PuTTY. The other is to create the key pair with the OpenSSH tool ssh-keygen, download the private key to your client and convert the private key to a PuTTY-style private key.

G.4.1. Criar chaves com ssh-keygen


Login to the server as root or svnuser and type:

ssh-keygen -b 1024 -t dsa -N passphrase -f keyfile substituting a real pass-phrase (which only you know) and key file. We just created a SSH2 DSA key with 1024 bit key-phrase. If you type

ls -l keyfile* you will see two files, keyfile and keyfile.pub. As you might guess, the .pub file is the public key file, the other is the private one. Append the public key to those in the .ssh folder within the svnuser home directory:

cat keyfile.pub >> /home/svnuser/.ssh/authorized_keys In order to use the private key we generated, we have to convert it to a putty format. This is because the private key file format is not specified by a standards body. After you download the private key file to your client PC, start PuTTYgen and use Conversions Import key. Browse to your file keyfile which you got from the server the passphrase you used when creating the key. Finally click on Save private key and save the file as keyfile.PPK.

G.4.2. Criar chaves com PuTTYgen


Use PuTTYgen to generate a public-key/private-key pair and save it. Copy the public key to the server and append it to those in the .ssh folder within the svnuser home directory:

cat keyfile.pub >> /home/svnuser/.ssh/authorized_keys

G.5. Testar com PuTTY


To test the connection we will use PuTTY. Start the program and on the Session tab set the hostname to the name or IP address of your server, the protocol to SSH and save the session as SvnConnection or whatever name you prefer. On the SSH tab set the preferred SSH protocol version to 2 and from Auth set the full path to the .PPK private key file you converted earlier. Go back to the Sessions tab and hit the Save button. You will now see SvnConnection in the list of saved sessions.

190

Proteco de Svnserve com SSH

Click on Open and you should see a telnet style login prompt. Use svnuser as the user name and if all is well you should connect directly without being prompted for a password. You may need to edit /etc/sshd_config on the server. Edit lines as follows and restart the SSH service afterwards.

PubkeyAuthentication yes PasswordAuthentication no PermitEmptyPasswords no ChallengeResponseAuthentication no

G.6. Testar SSH com TortoiseSVN


So far we have only tested that you can login using SSH. Now we need to make sure that the SSH connection can actually run svnserve. On the server modify /home/svnuser/.ssh/authorized_keys as follows to allow many subversion authors to use the same system account, svnuser. Note that every subversion author uses the same login but a different authentication key, thus you have to add one line for every author. Note: This is all on one very long line.

command="svnserve -t -r <ReposRootPath> --tunnel-user=<author>", no-port-forwarding,no-agent-forwarding,no-X11-forwarding, no-pty ssh-rsa <PublicKey> <Comment> There are several values that you need to set according to your setup. <ReposRootPath> should be replaced with the path to the directory containing your repositories. This avoids the need to specify full server paths within URLs. Note that you must use forward slashes even on a Windows server, e.g. c:/svn/reposroot. In the examples below we assume that you have a repository folder within the repository root called repos. <author> should be replaced with the svn author that you want to be stored on commit. This also allows svnserve to use its own access rights within svnserve.conf. <PublicKey> should be replaced with the public key that you generated earlier. <Comment> can be any comment you like, but it is useful for mapping an svn author name to the person's real name. Right click on any folder in Windows Explorer and select TortoiseSVN Repo-Browser. You will be prompted to enter a URL, so enter one in this form:

svn+ssh://svnuser@SvnConnection/repos What does this URL mean? The Schema name is svn+ssh which tells TortoiseSVN how to handle the requests to the server. After the double slash, you specify the user to connect to the server, in our case svnuser. After the @ we supply our PuTTY session name. This session name contains all details like where to find the private key and the server's IP or DNS. Lastly we have to provide the path to the repository, relative to the repository root on the server, as specified in the authorized_keys file. Click on OK and you should be able to browse the repository content. If so you now have a running SSH tunnel in conjunction with TortoiseSVN. Note that by default TortoiseSVN uses its own version of Plink to connect. This avoids a console window popping up for every authentication attempt, but it also means that there is nowhere for error messages to appear. If you receive the error Unable to write to standard output, you can try specifying Plink as the client in TortoiseSVN's network settings. This will allow you to see the real error message generated by Plink.

191

Proteco de Svnserve com SSH

G.7. Variantes de Configurao de SSH


One way to simplify the URL in TortoiseSVN is to set the user inside the PuTTY session. For this you have to load your already defined session SvnConnection in PuTTY and in the Connection tab set Auto login user to the user name, e.g. svnuser. Save your PuTTY session as before and try the following URL inside TortoiseSVN:

svn+ssh://SvnConnection/repos This time we only provide the PuTTY session SvnConnection to the SSH client TortoiseSVN uses (TortoisePlink.exe). This client will check the session for all necessary details. At the time of writing PuTTY does not check all saved configurations, so if you have multiple configurations with the same server name, it will pick the first one which matches. Also, if you edit the default configuration and save it, the auto login user name is not saved. Many people like to use Pageant for storing all their keys. Because a PuTTY session is capable of storing a key, you don't always need Pageant. But imagine you want to store keys for several different servers; in that case you would have to edit the PuTTY session over and over again, depending on the server you are trying to connect with. In this situation Pageant makes perfect sense, because when PuTTY, Plink, TortoisePlink or any other PuTTY-based tool is trying to connect to an SSH server, it checks all private keys that Pageant holds to initiate the connection. For this task, simply run Pageant and add the private key. It should be the same private key you defined in the PuTTY session above. If you use Pageant for private key storage, you can delete the reference to the private key file in your saved PuTTY session. You can add more keys for other servers, or other users of course. If you don't want to repeat this procedure after every reboot of your client, you should place Pageant in the auto-start group of your Windows installation. You can append the keys with complete paths as command line arguments to Pageant.exe The last way to connect to an SSH server is simply by using this URL inside TortoiseSVN:

svn+ssh://svnuser@100.101.102.103/repos svn+ssh://svnuser@mydomain.com/repos As you can see, we don't use a saved PuTTY session but an IP address (or domain name) as the connection target. We also supply the user, but you might ask how the private key file will be found. Because TortoisePlink.exe is just a modified version of the standard Plink tool from the PuTTY suite, TortoiseSVN will also try all the keys stored in Pageant. If you use this last method, be sure you do not have a default username set in PuTTY. We have had reports of a bug in PuTTY causing connections to close in this case. To remove the default user, simply clear HKEY_CURRENT_USER\Software\SimonTatham\Putty\Sessions\Default%20Settings\HostName

192

Glossrio
Actualizar This Subversion command pulls down the latest changes from the repository into your working copy, merging any changes made by others with local changes in the working copy. A Subversion command that is used to add a file or directory to your working copy. The new items are added to the repository when you commit. A Berkeley DB. Uma base de dados extensamente testada em aplicaes de "backend" que no utilizvel em "shares" de rede. Opo automtica para repositrios anteriores verso 1.2. When you take out a lock on a versioned item, you mark it in the repository as non-committable, except from the working copy where the lock was taken out. A Subversion command which creates a local working copy in an empty directory by downloading versioned files from the repository. Shorthand for Show Differences. Very useful when you want to see exactly what changes have been made. When changes from the repository are merged with local changes, sometimes those changes occur on the same lines. In this case Subversion cannot automatically decide which version to use and the file is said to be in conflict. You have to edit the file manually and resolve the conflict before you can commit any further changes. In a Subversion repository you can create a copy of a single file or an entire tree. These are implemented as cheap copies which act a bit like a link to the original in that they take up almost no space. Making a copy preserves the history of the item in the copy, so you can trace changes made before the copy was made. This is your local sandbox, the area where you work on the versioned files, and it normally resides on your local hard disk. You create a working copy by doing a Checkout from a repository, and you feed your changes back into the repository using Commit. This command produces a copy of a versioned folder, just like a working copy, but without the local .svn folders. A proprietary Subversion filesystem backend for repositories. Can be used on network shares. Default for 1.2 and newer repositories. Objecto de politica de grupo Show the revision history of a file or folder. Also known as Log. Subversion command to import an entire folder hierarchy into the repository in a single revision. The process by which changes from the repository are added to your working copy without disrupting any changes you have already made locally. Sometimes these changes cannot be reconciled automatically and the working copy is said to be in conflict. Merging happens automatically when you update your working copy. You can also merge specific changes from another branch using TortoiseSVN's Merge command. Adicionar BDB

Bloquear Checkout Comparar Conflito

Cpia

Cpia de Trabalho

Exportar FSFS GPO Histria Importar Integrar

193

Glossrio

Limpar

To quote from the Subversion book: Recursively clean up the working copy, removing locks and resuming unfinished operations. If you ever get a working copy locked error, run this command to remove stale locks and get your working copy into a usable state again. Note that in this context lock refers to local filesystem locking, not repository locking. In addition to versioning your directories and files, Subversion allows you to add versioned metadata - referred to as properties to each of your versioned directories and files. Each property has a name and a value, rather like a registry key. Subversion has some special properties which it uses internally, such as svn:eol-style. TortoiseSVN has some too, such as tsvn:logminsize. You can add your own properties with any name and value you choose. Just as files can have properties, so can each revision in the repository. Some special revprops are added automatically when the revision is created, namely: svn:date svn:author svn:log which represent the commit date/time, the committer and the log message respectively. These properties can be edited, but they are not versioned, so any change is permanent and cannot be undone. A term frequently used in revision control systems to describe what happens when development forks at a particular point and follows 2 separate paths. You can create a branch off the main development line so as to develop a new feature without rendering the main line unstable. Or you can branch a stable release to which you make only bug fixes, while new developments take place on the unstable trunk. In Subversion a branch is implemented as a cheap copy. Show the revision history of a file or folder. Also known as History. If a working copy has changes to text files only, it is possible to use Subversion's Diff command to generate a single file summary of those changes in Unified Diff format. A file of this type is often referred to as a Patch, and it can be emailed to someone else (or to a mailing list) and applied to another working copy. Someone without commit access can make changes and submit a patch file for an authorized committer to apply. Or if you are unsure about a change you can submit a patch for others to review. When you delete a versioned item (and commit the change) the item no longer exists in the repository after the committed revision. But of course it still exists in earlier repository revisions, so you can still access it. If necessary, you can copy a deleted item and resurrect it complete with history. If your repository moves, perhaps because you have moved it to a different directory on your server, or the server domain name has changed, you need to relocate your working copy so that its repository URLs point to the new location. Note: you should only use this command if your working copy is referring to the same location in the same repository, but the repository itself has moved. In any other circumstance you probably need the Switch command instead.

Propriedade

Propriedade de Reviso (revprop)

Ramo

Registo Remendo

Remover

Reposicionar

Repositrio

A repository is a central place where data is stored and maintained. A repository can be a place where multiple databases or files are located for distribution over a network, or a repository can be a location that is directly accessible to the user without having to travel across a network. When files in a working copy are left in a conflicted state following a merge, those conflicts must be sorted out by a human using an editor (or perhaps

Resolver

194

Glossrio

TortoiseMerge). This process is referred to as Resolving Conflicts. When this is complete you can mark the conflicted files as being resolved, which allows them to be committed. Responsabilizar This command is for text files only, and it annotates every line to show the repository revision in which it was last changed, and the author who made that change. Our GUI implementation is called TortoiseBlame and it also shows the commit date/time and the log message when you hover the mouse of the revision number. Subversion keeps a local pristine copy of each file as it was when you last updated your working copy. If you have made changes and decide you want to undo them, you can use the revert command to go back to the pristine copy. Every time you commit a set of changes, you create one new revision in the repository. Each revision represents the state of the repository tree at a certain point in its history. If you want to go back in time you can examine the repository as it was at revision N. In another sense, a revision can refer to the set of changes that were made when that revision was created. Reviso BASE The current base revision of a file or folder in your working copy. This is the revision the file or folder was in, when the last checkout, update or commit was run. The BASE revision is normally not equal to the HEAD revision. The latest revision of a file or folder in the repository. This Subversion command is used to pass the changes in your local working copy back into the repository, creating a new repository revision. Abreviao de Subversion frequentement utilizada. The name of the Subversion custom protocol used by the svnserve repository server. Trocar Just as Update-to-revision changes the time window of a working copy to look at a different point in history, so Switch changes the space window of a working copy so that it points to a different part of the repository. It is particularly useful when working on trunk and branches where only a few files differ. You can switch your working copy between the two and only the changed files will be transferred.

Reverter

Reviso

Reviso HEAD Submeter SVN

195

ndice Remissivo
Smbolos
"plugin", 163 "Shell" de Wiindows, 1 .svn folder, 157 _svn folder, 157

cpia de trabalho, 9 copy files, 79 correco, 111 corretor ortogrfico, 3 Create Command Line Client, 14 TortoiseSVN, 14 create repository, 14 create working copy, 40 culpa, 112

A
a bloquear, 107 Access, 15 add, 78 add files to repository, 38 anotar, 112 Apache, 24 ASP projects, 174 authentication, 37 Authorization, 27 auto-props, 90 automation, 176, 179

D
delete, 82 deploy, 173 detach from repository, 171 dicionrio, 3 diff, 73, 111 diff tools, 78 diff unificado, 111 diffing, 57 disable functions, 174 domain controller, 173 domaincontroller, 28 drag handler, 36 drag-n-drop, 36

B
backup, 17 branch, 79, 95 bug tracker, 125 bug tracking, 125 bugtracker, 125

E
edit log/author, 68 empty message, 168 exclude pattern, 130 expand keywords, 88 explorador, 1 Explorer Columns, 55 export, 122 export changes, 75 externos, 92, 170

C
case change, 84 changelist, 58 changes, 170 check in, 43 check new version, 173 checkout link, 18 cleanup, 86 CLI, 181 client hooks, 151 COM, 158, 163 COM SubWCRev interface, 160 command line, 176, 179 command line client, 181 commit, 43 commit message, 168 commit messages, 60 common projects, 170 compare, 73 compare files, 170 compare folders, 170 compare revisions, 75 conflito, 8, 49 context menu, 34 context menu entries, 174 Controle de verses, 1 cpia, 95, 115

F
FAQ, 167 fetch changes, 48 filter, 69

G
global ignore, 130 globbing, 81 GPO, 173 graph, 118 group policies, 173, 174

H
history, 60 hook scripts, 17, 151 hooks, 17

I
IBugtraqProvider, 163

196

ndice Remissivo

icons, 54 ignore, 80 image diff, 77 import in place, 40 Importar, 38 Index of projects, 27 instalar, 2 integrar, 98 duas rvores, 102 faixa de reviso, 99 re-integrar, 101 issue tracker, 125, 163

R
re-integrar integrao, 106 readonly, 107 registry, 155 relocate, 124 remove, 82 remove versioning, 171 rename, 83, 115, 168 rename files, 79 reorganize, 168 repo viewer, 129 repo-browser, 115 repositrio, 4, 38 repositrios externos, 92 repository URL changed, 124 resolve, 49 revert, 85, 169 revision, 11, 118 revision graph, 118 revision properties, 68 revprops, 68 right drag, 36 right-click, 34 rollback, 169

K
keywords, 88

L
link, 18 Livro sobre Subversion, 4 log, 60 log cache, 148 log message, 168 log messages, 60

M
marcar verso, 95 maximize, 38 merge conflicts, 105 merge tools, 78 merge tracking log, 67 modifications, 56 mod_authz_svn, 25, 27 Monitorizar a integrao, 105 move, 83 move files, 79 moved server, 124 moving, 168 msi, 173 Multiple authentication, 29

S
SASL, 22 send changes, 43 server moved, 124 server side hook scripts, 17 server viewer, 115 server-side actions, 115 settings, 129 shortcut, 171 sounds, 130 special files, 40 SSL, 30 SSPI, 28 statistics, 69 status, 54, 55 SUBST drives, 142 Subversion properties, 87 SubWCRev, 158 SVN exportar, 40 SVNParentPath, 26, 27 SVNPath, 26 svnserve, 19, 20 SVN_ASP_DOT_NET_HACK, 174 switch, 97

N
Network share, 15 NTLM, 28

O
overlays, 54, 187

P
pacotes de linguas, 3 pattern matching, 81 praise, 112 prioridade de sobreposio, 187 project properties, 91 properties, 86 Propriedades do TortoiseSVN, 91 proxy server, 143

T
tag, 79, 95 temporary files, 38 TortoiseIDiff, 77 TortoiseSVN link, 18 tradues, 3 tree conflict, 49

197

ndice Remissivo

U
UNC paths, 15 undo, 85 undo change, 169 undo commit, 169 unversion, 124, 171 unversioned 'working copy', 122 unversioned files/folders, 80 update, 48, 169 upgrade check, 173 URL changed, 124

V
vendor projects, 170 version, 173 version extraction, 158 version new files, 78 version number in files, 158 view changes, 54 ViewVC, 129 VS2003, 174

W
web view, 129 WebDAV, 24 website, 18 WebSVN, 129 Windows domain, 28 working copy status, 54

198

Potrebbero piacerti anche