Controle de Versão com Subversion

Para Subversion 1.4

(Compilado da revisão 365)

Ben Collins-Sussman

Brian W. Fitzpatrick

C. Michael Pilato

Este trabalho está licenciado sob a licença Creative Commons Attribution License. Para obter uma cópia dessa licença, visite http://creativecommons.org/licenses/by/2.0/ ou envie uma carta para Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

(TBA)


Índice

Apresentação
Prefácio
Público-Alvo
Como Ler Este Livro
Convenções Usadas Neste Livro
Convenções tipográficas
Ícones
Organização Deste Livro
Este Livro é Livre
Agradecimentos
Agradecimentos de Ben Collins-Sussman
Agradecimentos de Brian W. Fitzpatrick
Agradecimentos de C. Michael Pilato
O Que é o Subversion?
Histórico do Subversion
Características do Subversion
Arquitetura do Subversion
Componentes do Subversion
1. Conceitos Fundamentais
O Repositório
Modelos de Versionamento
O Problema do Compartilhamento de Arquivos
A Solução Lock-Modify-Unlock
A Solução Copy-Modify-Merge
Subversion em Ação
URLs do Repositório Subversion
Cópias de Trabalho, ou Cópias Locais
Revisões
Como as Cópias de Trabalho Acompanham o Repositório
Revisões Locais Mistas
Atualizações e Submissões são Separados
Revisões misturadas são normais
Revisões mistas são úteis
Revisões mistas têm limitações
Sumário
2. Uso Básico
Help!
Colocando dados em seu Repositório
svn import
Layout de repositório recomendado
Checkout Inicial
Desabilitando o Cache de Senhas
Autenticando como um Usuário Diferente
Ciclo Básico de Trabalho
Atualizando Sua Cópia de Trabalho
Fazendo Alterações em Sua Cópia de Trabalho
Verificando Suas Alterações
Obtendo uma visão geral de suas alterações
Examinando os detalhes de suas alterações locais
Desfazendo Modificações de Trabalho
Resolvendo Conflitos (Combinando Alterações de Outros)
Mesclando Conflitos na Mão
Copiando um Arquivo em Cima de Seu Arquivo de Trabalho
Punting: Usando o svn revert
Registrando Suas Alterações
Examinando o Histórico
Gerando uma lista de alterações históricas
Examinando os detalhes das alterações históricas
Examinando Alterações Locais
Comparando a Cópia de Trabalho com o Repositório
Comparando o Repositório com o Repositório
Navegando pelo repositório
svn cat
svn list
Retornando o repositório a momentos antigos
Às Vezes Você Só Precisa Limpar
Sumário
3. Tópicos Avançados
Especificadores de Revisão
Termos de Revisão
Datas de Revisão
Propriedades
Por que Propriedades?
Manipulando Propriedades
Propriedades e o Fluxo de Trabalho no Subversion
Definição Automática de Propriedades
Portabilidade de Arquivo
Tipo de Conteúdo do Arquivo
Executabilidade de Arquivo
Seqüência de Caracteres de Fim-de-Linha
Ignorando Itens Não-Versionados
Substituição de Palavra-Chave
Travamento
Criando travas
Descobrindo as travas
Quebrando e roubando travas
Comunicação de Travas
Definições Externas
Revisões Marcadoras e Revisões Operativas
Modelo de Rede
Solicitações e Respostas
Armazenando Credenciais no Cliente
4. Fundir e Ramificar
O que é um Ramo?
Usando Ramos
Criando um Ramo
Trabalhando com o seu Ramo
Os conceitos chave por trás de ramos
Copiando Modificações Entre Ramos
Copiando modificações específicas
O conceito chave sobre fusão
Melhores práticas sobre Fusão
Rastreando Fusões manualmente
Visualizando Fusões
Fundir conflitos
Percebendo ou Ignorando os Ancestrais
Fusões e Movimentações
Casos Comuns de Utilização
Mesclando um Ramo Inteiro para Outro
Desfazendo Alterações
Ressucitando Itens Excluídos
Padrões Comuns de Ramificação
Ramos para Distribuição (Releases)
Ramos de Novos Recursos (Features)
Atravessando Ramos
Rótulos
Criando um rótulo simples
Criando um rótulo complexo
Manutenção de Ramos
Estrutura de Repositório
Ciclo de Vida dos Dados
Ramos de fornecedores
Procedimento Geral para Manutenção de Ramos de Fornecedores
svn_load_dirs.pl
Sumário
5. Administração do Repositório
O Repositório Subversion, Definição
Estratégias para Implementação de Repositórios
Planejando a Organização do Repositório
Decidindo Onde e Como Hospedar Seu Repositório
Escolhendo uma Base de Dados
Berkeley DB
FSFS
Criando e Configurando Seu Repositório
Criando o Repositório
Implementando Ganchos de Repositório
Configuração do Berkeley DB
Manutenção do Repositório
Um Kit de Ferramentas do Administrador
svnadmin
svnlook
svndumpfilter
svnsync
Utilitários Berkeley DB
Corrigindo Mensagens de Log Submetidas
Gerenciando Espaço em Disco
Como o Subversion economiza espaço em disco
Removendo transações mortas
Remover completamente arquivos de log não usados do Berkeley DB
Recuperação do Berkeley DB
Migrando Dados do Repositório Para Outro Local
Filtrando o Histórico do Repositório
Replicação do Repositório
Backup de Repositório
Sumário
6. Configuração do Servidor
Visão Geral
Escolhendo uma Configuração de Servidor
O Servidor svnserve
svnserve sobre SSH
O Servidor Apache HTTP
Recomendações
svnserve, um servidor especializado
Invocando o Servidor
svnserve como Daemon
svnserve através do inetd
svnserve sobre um Túnel
svnserve como um Serviço do Windows
Autenticação e autorização internos
Criar um arquivo 'users' e um domínio
Definindo controles de acesso
Tunelamento sobre SSH
Dicas de configuração do SSH
Configuração inicial
Controlando o comando invocado
httpd, o servidor HTTP Apache
Pré-requisitos
Configuração Básica do Apache
Opções de Autenticação
Autenticação HTTP Básica
Gerência de Certificados SSL
Opções de Autorização
Controle de Acesso Geral
Controle de Acesso por Diretório
Desabilitando Verificação baseada em Caminhos
Facilidades Extras
Navegação de Repositório
Logs do Apache
Outros Recursos
Autorização Baseada em Caminhos
Dando Suporte a Múltiplos Métodos de Acesso ao Repositório
7. Customizando sua Experiência com Subversion
Área de Configuração do Tempo de Execução
Estrutura da Área de Configuração
Configuração e o Registro do Windows
Opções de Configuração
Servidores
Configuração
Localização
Compreendendo localidades
Uso de localidades do Subversion
Usando Ferramentas Externas de Diferenciação
Ferramentas diff Externas
Ferramentas diff3 Externas
8. Incorporando o Subversion
Projeto da Biblioteca em Camadas
Camada de Repositório
Camada de Acesso ao Repositório
Camada Cliente
Por dentro da Área de Administração da Cópia de Trabalho
Os Arquivos de Entrada
Cópias Inalteradas e Propriedade de Arquivos
Usando as APIs
A Biblioteca Apache Portable Runtime
Requisitos de URL e Caminho
Usando Outras Linguagens além de C e C++
Exemplos de Código
9. Referência Completa do Subversion
O Cliente de Linha de Comando do Subversion: svn
Opções do svn
Subcomandos svn
svn add
svn blame
svn cat
svn checkout
svn cleanup
svn commit
svn copy
svn delete
svn diff
svn export
svn help
svn import
svn info
svn list
svn lock
svn log
svn merge
svn mkdir
svn move
svn propdel
svn propedit
svn propget
svn proplist
svn propset
svn resolved
svn revert
svn status
svn switch
svn unlock
svn update
svnadmin
Opções do svnadmin
Subcomandos do svnadmin
svnadmin create
svnadmin deltify
svnadmin dump
svnadmin help
svnadmin hotcopy
svnadmin list-dblogs
svnadmin list-unused-dblogs
svnadmin load
svnadmin lslocks
svnadmin lstxns
svnadmin recover
svnadmin rmlocks
svnadmin rmtxns
svnadmin setlog
svnadmin verify
svnlook
Opções do svnlook
Sub-comandos do svnlook
autor svnlook
svnlook cat
svnlook changed
svnlook date
svnlook diff
svnlook dirs-changed
svnlook help
svnlook history
svnlook info
svnlook lock
svnlook log
svnlook propget
svnlook proplist
svnlook tree
svnlook uuid
svnlook youngest
svnsync
Opções do svnsync
Subcomandos do svnsync
svnsync copy-revprops
svnsync initialize
svnsync synchronize
svnserve
Opções do svnserve
svnversion
svnversion
mod_dav_svn
Diretivas de Configuração do mod_dav_svn
Propriedades do Subversion
Propriedades Versionadas
Propriedades Não-Versionadas
Ganchos do Repositório
start-commit
pre-commit
post-commit
pre-revprop-change
post-revprop-change
pre-lock
post-lock
pre-unlock
post-unlock
A. Guia Rápido de Introdução ao Subversion
Instalando o Subversion
Tutorial "Alta Velocidade"
B. Subversion para Usuários de CVS
Os Números de Revisão Agora São Diferentes
Versões de Diretório
Mais Operações Desconectadas
Distinção Entre Status e Update
Status
Update
Ramos e Rótulos
Propriedades de Metadados
Resolução de Conflitos
Arquivos Binários e Tradução
Módulos sob Controle de Versão
Autenticação
Convertendo um Repositório de CVS para Subversion
C. WebDAV e Autoversionamento
O que é WebDAV?
Autoversionamento
Interoperabilidade com Softwares Clientes
Aplicações WebDAV Independentes
Microsoft Office, Dreamweaver, Photoshop
Cadaver, DAV Explorer
Extensões WebDAV para gerenciadores de arquivos
Microsoft Web Folders
Nautilus, Konqueror
Implementações de sistemas de arquivos WebDAV
WebDrive, NetDrive
Mac OS X
Linux davfs2
D. Ferramentas de Terceiros
E. Copyright
Índice Remissivo

Lista de Figuras

1. Arquitetura do Subversion
1.1. Um típico sistema cliente/servidor
1.2. O problema para evitar
1.3. A solução lock-modify-unlock
1.4. A solução copy-modify-merge
1.5. A solução copy-modify-merge (continuando)
1.6. O Sistema de Arquivos do Repositório
1.7. O Repositório
4.1. Ramos de desenvolvimento
4.2. Layout Inicial do Repositório
4.3. Repositório com uma nova cópia
4.4. Ramificação do histórico de um arquivo
8.1. Arquivos e diretórios em duas dimensões
8.2. Versionando o tempo—a terceira dimensão!

Lista de Tabelas

1.1. URLs de Acesso ao Repositório
5.1. Comparativo dos Mecanismos de Armazenamento
6.1. Comparação das Opções para o Servidor Subversion
C.1. Clientes WebDAV Comuns

Lista de Exemplos

5.1. txn-info.sh (Obtendo Informações Sobre Transações Pendentes)
5.2. Script de hook pre-revprop-change para operação de espelhamento
5.3. Script de hook start-commit para operação de espelhamento
6.1. Um exemplo de configuração para acesso anônimo.
6.2. Um exemplo de configuração para acesso autenticado.
6.3. Um exemplo de configuração para acesso misto autenticado/anônimo.
6.4. Desabilitando verificações de caminho como um todo
7.1. Arquivo (.reg) com Entradas de Registro de Exemplo.
7.2. diffwrap.sh
7.3. diffwrap.bat
7.4. diff3wrap.sh
7.5. diff3wrap.bat
8.1. Usando a Camada de Repositório
8.2. Usando a Camada de Repositório com Python
8.3. Um Rastreador de Status em Python