This text is a work in progress—highly subject to change—and may not accurately describe any released version of the Apache™ Subversion® software. Bookmarking or otherwise referring others to this page is probably not such a smart idea. Please visit http://www.svnbook.com/ for stable versions of this book.

Subversion 版本控制 [草稿]

针对 Subversion 1.8

(编译自 r5722)

Ben Collins-Sussman

Brian W. Fitzpatrick

C. Michael Pilato

本书使用创作共享署名授权协议 (Creative Commons Attribution License), 访问网站 http://creativecommons.org/licenses/by/2.0/ 或写信到 Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA, 阅读协议的副本.

本书英文版和中文版的源代码托管在 https://sourceforge.net/projects/svnbook/.


Table of Contents

写在前面
前言
什么是 Subversion?
Subversion 是正确的工具吗?
Subversion 的历史
Subversion 的架构
Subversion 的组件
Subversion 的演化
目标听众
如何阅读本书
本书组织
本书是免费的
致谢
I. 初识 Subversion
1. 基本概念
版本控制基础
仓库
工作副本
版本控制模型
文件共享的问题
加锁-修改-解锁 解决方案
复制-修改-合并 解决方案
Subversion 的版本控制方法
Subversion 的仓库
版本号
仓库寻址
Subversion 的工作副本
工作副本的工作原理
工作副本的基本操作
版本号混合的工作副本
小结
2. 基本用法
帮助!
往仓库中添加数据
导入文件和目录
推荐的仓库布局
名字中有什么
创建工作副本
基本工作周期
更新工作副本
修改
审核修改
查看修改的整体概述
查看修改的细节
修正错误
解决冲突
交互式地查看冲突差异
交互式地解决冲突差异
推迟解决冲突
手动地解决冲突
只使用从服务器收到的更新
使用 svn revert
提交修改
检查历史
查看历史修订的细节
查看本地修改
比较工作副本和仓库
比较仓库的版本号
生成历史修改列表
浏览仓库
显示文件的内容
显示每一行的修改属性
列出被版本控制的文件
获取老的仓库快照
有时候你需要的只是清理一下
删除工作副本
从中断中恢复
处理结构性冲突
目录冲突示例
小结
3. 高级主题
版本号指示器
版本号关键字
版本号日期
挂勾版本号与实施版本号
属性
为什么需要属性?
操作属性
属性和 Subversion 工作流程
继承的属性
自动属性设置
Subversion 的保留属性
版本化的属性
未版本化的属性
文件的可移植性
文件内容类型
文件的可执行性
行结束标记
忽略未被版本控制的项目
关键字替换
稀疏目录
创建锁
发现锁
破坏与窃取锁
锁通信
外部定义
变更列表
创建与修改变更列表
变更列表用作操作过滤器
变更列表的限制
网络模型
请求与响应
客户端证书
缓存证书
禁止密码缓存
删除已缓存的证书
命令行认证
认证小结
在没有工作副本的情况下工作
远程客户端命令行操作
使用 svnmucc
小结
4. 分支与合并
什么是分支
使用分支
创建分支
在分支上工作
分支背后的关键概念
基本合并
变更集
保持分支同步
子目录合并与子目录合并信息
重新整合分支
合并信息和预览
撤消修改
恢复已删除的文件
高级合并
精选
合并语法详解
没有合并信息的合并
关于合并冲突的更多内容
拦截修改
对合并敏感的日志与注释
关注或忽略祖先
合并与移动
禁止不支持合并跟踪的客户端
关于合并跟踪的最后一点内容
遍历分支
标签
创建简单的标签
创建复杂的标签
分支维护
仓库布局
数据的寿命
常见的分支模式
发布分支
特性分支
供方分支
通常的供方分支管理过程
来自外部仓库的供方分支
来自镜像源的供方分支
分支, 还是不分支?
小结
5. 仓库管理
仓库的定义
仓库部署策略
规划仓库的组织方式
确定仓库的托管方式和位置
仓库的访问控制
创建与配置仓库
创建仓库
实现仓库钩子
钩子脚本环境配置
钩子脚本的常见用法
搜索或自己编写钩子脚本
FSFS 配置
仓库维护
管理员工具箱
svnadmin
svnlook
svndumpfilter
svnrdump
svnsync
fsfs-reshard.py
修正提交日志消息
管理磁盘空间
Subversion 如何节约磁盘空间
删除僵死的事务
FSFS 文件系统压缩
迁移仓库数据
使用 svnadmin 迁移仓库数据
使用 svnrdump 迁移仓库数据
过滤仓库历史
仓库复制
使用 svnsync 复制仓库
使用 svnsync 进行部分复制
创建镜像的小窍门
复制小结
仓库备份
管理仓库的 UUID
移动与删除仓库
小结
6. 服务器配置
概览
选择一种服务器配置
svnserve 服务器
svnserve + SSH
Apache HTTP 服务器
建议
svnserve, 一个定制化的服务器
调用服务器
svnserve 作为守护进程
由 inetd 调用 svnserve
由 xinetd 调用 svnserve
基于隧道的 svnserve
svnserve 作为 Windows 服务
svnserve 作为 launchd 作业
内建的认证与授权
创建一个用户文件和领域
设置访问控制
svnserve 使用 SASL
使用 SASL 进行认证
SASL 加密
SSH 隧道
SSH 配置技巧
初始化设置
控制被调用的命令
svnserve 配置参考
通用配置
Cyrus SASL 配置
httpd, the Apache HTTP Server
Prerequisites
Basic Apache Configuration
Authentication Options
Basic authentication
Digest authentication
Authorization Options
Blanket access control
Per-directory access control
Disabling path-based checks
Versioned in repository access files
Protecting network traffic with SSL
Subversion server SSL certificate configuration
Subversion client SSL certificate management
Tuning for Performance
KeepAlive
Bulk updates
Extra Goodies
Repository browsing
Apache logging
Write-through proxying
Other Apache features
Subversion Apache HTTP Server Configuration Reference
mod_dav_svn configuration directives
mod_authz_svn configuration directives
Path-Based Authorization
Getting Started with Path-Based Access Control
Access Control Groups
Username Aliases
Advanced Access Control Features
Some Gotchas with Access Control
High-level Logging
Server Optimization
Data Caching
Network Compression of Data
Supporting Multiple Repository Access Methods
7. Customizing Your Subversion Experience
Runtime Configuration Area
Configuration Area Layout
Configuration and the Windows Registry
Runtime Configuration Options
General configuration
Per-server configuration
Localization
Understanding Locales
Subversion's Use of Locales
Using External Editors
Using External Differencing and Merge Tools
External diff
External diff3
External merge
Summary
8. Embedding Subversion
Layered Library Design
Repository Layer
Repository Access Layer
Client Layer
Using the APIs
The Apache Portable Runtime Library
Functions and Batons
URL and Path Requirements
Using Languages Other Than C and C++
Code Samples
Summary
II. Subversion Command Reference
I. svn Reference—Subversion Command-Line Client
svn add
svn blame (praise, annotate, ann)
svn cat
svn changelist (cl)
svn checkout (co)
svn cleanup
svn commit (ci)
svn copy (cp)
svn delete (del, remove, rm)
svn diff (di)
svn export
svn help (h, ?)
svn import
svn info
svn list (ls)
svn lock
svn log
svn merge
svn mergeinfo
svn mkdir
svn move (mv)
svn patch
svn propdel (pdel, pd)
svn propedit (pedit, pe)
svn propget (pget, pg)
svn proplist (plist, pl)
svn propset (pset, ps)
svn relocate
svn resolve
svn resolved
svn revert
svn status (stat, st)
svn switch (sw)
svn unlock
svn update (up)
svn upgrade
II. svnadmin Reference—Subversion Repository Administration
svnadmin crashtest
svnadmin create
svnadmin deltify
svnadmin dump
svnadmin freeze
svnadmin help (h, ?)
svnadmin hotcopy
svnadmin list-dblogs
svnadmin list-unused-dblogs
svnadmin load
svnadmin lock
svnadmin lslocks
svnadmin lstxns
svnadmin pack
svnadmin recover
svnadmin rmlocks
svnadmin rmtxns
svnadmin setlog
svnadmin setrevprop
svnadmin setuuid
svnadmin unlock
svnadmin upgrade
svnadmin verify
III. svnlook Reference—Subversion Repository Examination
svnlook author
svnlook cat
svnlook changed
svnlook date
svnlook diff
svnlook dirs-changed
svnlook filesize
svnlook help (h, ?)
svnlook history
svnlook info
svnlook lock
svnlook log
svnlook propget (pget, pg)
svnlook proplist (plist, pl)
svnlook tree
svnlook uuid
svnlook youngest
IV. svnserve Reference—Custom Subversion Server
svnserve
V. svnversion Reference—Subversion Working Copy Version Info
svnversion
VI. svnsync Reference—Subversion Repository Mirroring
svnsync copy-revprops
svnsync help
svnsync info
svnsync initialize (init)
svnsync synchronize (sync)
VII. svnrdump Reference—Remote Subversion Repository Data Migration
svnrdump dump
svnrdump help
svnrdump load
VIII. svndumpfilter Reference—Subversion History Filtering
svndumpfilter exclude
svndumpfilter include
svndumpfilter help
IX. svnmucc Reference—Subversion Multiple URL Command Client
svnmucc
X. Subversion Repository Hook Reference
start-commit
pre-commit
post-commit
pre-revprop-change
post-revprop-change
pre-lock
post-lock
pre-unlock
post-unlock
III. Appendices
A. Subversion Quick-Start Guide
Installing Subversion
High-Speed Tutorial
B. Subversion for CVS Users
Revision Numbers Are Different Now
Directory Versions
More Disconnected Operations
Distinction Between Status and Update
Status
Update
Branches and Tags
Metadata Properties
Conflict Resolution
Binary Files and Translation
Versioned Modules
Authentication
Converting a Repository from CVS to Subversion
C. WebDAV and Autoversioning
What Is WebDAV?
Autoversioning
Client Interoperability
Standalone WebDAV Applications
Microsoft Office, Dreamweaver, Photoshop
cadaver, DAV Explorer
File-Explorer WebDAV Extensions
Microsoft Web Folders
Nautilus, Konqueror
WebDAV Filesystem Implementation
WebDrive, NetDrive
Mac OS X
Linux davfs2
D. The Berkeley DB Legacy Filesystem
Configuring Your Berkeley DB Environment
Limitations of Berkeley DB
Architectural Limitations
Network Share Deployment
Fault Tolerance and the Need for Recovery
Maintaining Berkeley DB Repositories
Berkeley DB Recovery
Purging unused Berkeley DB logfiles
Berkeley DB Utilities
E. Copyright
Index

List of Figures

1. Subversion 的架构
1.1. 典型的客户端/服务器系统
1.2. 需要避免的情况
1.3. 加锁-修改-解锁 解决方案
1.4. 复制-修改-合并 解决方案
1.5. 复制-修改-合并 解决方案 (续)
1.6. 文件系统树在时间上的变化
1.7. 仓库的文件系统
4.1. 分支示意图
4.2. 仓库的起始布局
4.3. 创建了分支后的仓库
4.4. 一个文件历史的分叉
8.1. Files and directories in two dimensions
8.2. Versioning time—the third dimension!

List of Tables

1.1. 访问仓库的 URL 参数
2.1. 常见的日志请求
4.1. 分支与合并命令
6.1. 各种 Subversion 服务器选项的比较
C.1. Common WebDAV clients

List of Examples

4.1. 合并跟踪的看门狗—钩子脚本 start-commit
5.1. hooks-env (配置钩子脚本环境)
5.2. 要求客户端必须支持合并跟踪的钩子 start-commit
5.3. txn-info.sh (打印未完成的事务)
5.4. 镜像仓库的 pre-revprop-change 钩子脚本
5.5. 镜像仓库的 start-commit 钩子脚本
6.1. svnserve 的 launchd 作业定义的一个示例
6.2. A sample configuration for anonymous access
6.3. A sample configuration for authenticated access
6.4. A sample configuration for mixed authenticated/anonymous access
6.5. Disabling path checks altogether
6.6. Using single versioned in repo access file
6.7. Using per repository in repo access files
7.1. Sample registration entries (.reg) file
7.2. diffwrap.py
7.3. diffwrap.bat
7.4. diff3wrap.py
7.5. diff3wrap.bat
7.6. mergewrap.py
7.7. mergewrap.bat
8.1. Using the repository layer
8.2. Using the repository layer with Python
8.3. A Python status crawler