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

(编译自 r6066)

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


目录

写在前面
前言
什么是 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, Apache HTTP 服务器
先决条件
Apache 基本配置
认证选项
Basic 认证
Digest 认证
授权选项
完全访问控制
每个目录的访问控制
禁止基于路径的检查
存放在仓库内的访问权限配置文件
使用 SSL 保护网络流量
Subversion 服务器 SSL 证书配置
Subversion 客户端 SSL 证书管理
优化性能
KeepAlive
批量更新
其他好处
仓库浏览
Apache 日志
直写代理
Apache 的其他特性
Subversion Apache HTTP 服务器配置参考
mod_dav_svn 配置指令
mod_authz_svn 配置指令
基于路径的授权
基于路径的访问控制
用户组
用户别名
访问权限控制的高级特性
访问权限控制的一些陷阱
高层日志记录
服务器优化
数据缓存
网络数据压缩
支持多种仓库访问方法
7. 定制自己的 Subversion 体验
运行时配置区域
配置区域的布局
配置与 Windows 系统注册表
运行时配置选项
通用配置选项
每服务器配置
本地化
理解地区
Subversion 对本地化的支持
使用外部编辑器
使用外部差异比较与合并工具
外部差异比较工具
外部三路差异比较工具
外部合并工具
小结
8. 嵌入 Subversion
层次化的函数库设计
仓库层
仓库访问层
客户端层
使用 API
Apache 可移植运行库
函数与不透明数据
URL 和路径要求
使用除了 C 和 C++ 之外的语言
代码示例
小结
II. Subversion 命令行参考手册
I. svn 参考手册—Subversion 命令行客户端
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 参考手册—Subversion 仓库管理工具
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 参考手册—Subversion 仓库检查工具
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 参考手册—定制化的 Subversion 服务器
svnserve
V. svnversion 参考手册—Subversion 工作副本版本信息
svnversion
VI. svnsync 参考手册—Subversion 仓库镜像工具
svnsync copy-revprops
svnsync help
svnsync info
svnsync initialize (init)
svnsync synchronize (sync)
VII. svnrdump 参考手册—Subversion 远程仓库数据迁移
svnrdump dump
svnrdump help
svnrdump load
VIII. svndumpfilter 参考手册—Subversion 历史过滤工具
svndumpfilter exclude
svndumpfilter include
svndumpfilter help
IX. svnmucc 参考手册—Subversion 多 URL 命令行客户端
svnmucc
X. Subversion 仓库钩子参考手册
start-commit
pre-commit
post-commit
pre-revprop-change
post-revprop-change
pre-lock
post-lock
pre-unlock
post-unlock
III. 附录
A. Subversion 快速入门
安装 Subversion
快速入门教程
B. 针对 CVS 用户的 Subversion 介绍
版本号的编号不再相同
目录的版本
更多的无连接操作
状态与更新的区别
状态
更新
分支与标签
元数据属性
冲突解决
二进制文件与转换
版本化的模块
认证
把 CVS 仓库转换成 Subversion 仓库
C. WebDAV 与自动版本控制
什么是 WebDAV?
自动版本控制
客户端互操作性
独立的 WebDAV 应用程序
Microsoft Office, Dreamweaver, Photoshop
cadaver, DAV 浏览器
文件浏览器 WebDAV 扩展
Microsoft Web Folders
Nautilus, Konqueror
WebDAV 文件系统实现
WebDrive, NetDrive
Mac OS X
Linux davfs2
D. 传统的 Berkeley DB 后端存储
配置 Berkeley DB 环境
Berkeley DB 的限制
体系结构上的限制
网络共享目录部署
错误容忍与恢复
维护 Berkeley DB 仓库
Berkeley DB 恢复
清除不再有用的 Berkeley DB 日志文件
Berkeley DB 实用工具
E. 版权
索引

插图清单

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. 二维坐标系下的文件与目录
8.2. Subversion 目录树的三维表示

表格清单

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

范例清单

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. 匿名访问的配置示例
6.3. 认证访问的配置示例
6.4. 匿名/认证混合访问的配置示例
6.5. 完全禁止路径检查
6.6. 为多个仓库指定同一个位于仓库内的访问配置文件
6.7. 为每个仓库都指定一个仓库内的访问配置文件
7.1. 系统注册表项文件 (.reg) 的一个示例
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. 使用仓库层
8.2. 使用 Python 访问仓库层
8.3. 用 Python 实现 svn status