Version Control with Subversion

针对 Subversion 1.6

(编译自 r3821/r4233)

Ben Collins-Sussman

Brian W. Fitzpatrick

C. Michael Pilato

本书使用创作共用许可证。可以访问 http://creativecommons.org/licenses/by/2.0/ 或发送邮件到 Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA,以查看本许可证。

(TBA)


目录

前言
序言
1. Subversion 是什么?
1.1. Subversion 是正确的工具吗?
1.2. Subversion 的历史
1.3. Subversion 的架构
1.4. Subversion 的组件
1.5. Subversion 有什么新东西?
2. 读者
3. 怎样阅读本书
4. 本书的结构
5. 本书是免费的
6. 致谢
1. 基本概念
1. 版本控制基础概念
1.1. 版本库
1.2. 工作副本
1.3. 版本模型
1.3.1. 文件共享的问题
1.3.2. “锁定-修改-解锁”方案
1.3.3. “拷贝-修改-合并”方案
2. Subversion 的版本控制
2.1. Subversion 版本库
2.2. 修订版本
2.3. 版本库的地址
2.4. Subversion 的工作副本
2.4.1. 工作副本的工作方式
2.4.2. 工作副本基本交互操作
2.4.3. 混合版本的工作副本
3. 总结
2. 基本使用
1. 求助!
2. 导入数据到你的版本库
2.1. 导入文件和目录
2.2. 推荐的版本库布局
2.3. 名称中有什么?
3. 创建工作副本
4. 基本的工作循环
4.1. 更新你的工作副本
4.2. 开始修改
4.3. 检查你的修改
4.3.1. 查看你的修改概况
4.3.2. 检查你的本地修改的详情
4.4. 修正错误
4.5. 解决冲突
4.5.1. 交互式的查看冲突区别
4.5.2. 交互式的解决冲突区别
4.5.3. 延后解决冲突
4.5.4. 手工合并冲突
4.5.5. 丢弃你的修改而接收新获取的修订版本
4.5.6. Punting: using svn revert
4.6. 提交你的修改
5. 检验历史
5.1. 检查历史修改详情
5.1.1. 检查本地修改
5.1.2. 比较工作副本和版本库
5.1.3. 比较版本库中的版本
5.2. 产生历史修改列表
5.3. 浏览版本库
5.3.1. svn cat
5.3.2. svn list
5.4. 获得旧的版本库快照
6. 有时你只需要清理
6.1. 处理你的工作副本
6.2. 从中断中恢复
7. 处理结构性冲突
7.1. An Example Tree Conflict
8. 总结
3. 高级主题
1. 版本清单
1.1. 修订版本关键字
1.2. 版本日期
2. Peg 和实施修订版本
3. 属性
3.1. 为什么需要属性?
3.2. 操作属性
3.3. 属性和 Subversion 工作流程
3.4. 自动设置属性
4. 文件移植性
4.1. 文件内容类型
4.2. 文件的可执行性
4.3. 行结束字符序列
5. 忽略未版本控制的条目
6. 关键字替换
7. 稀疏目录
8. 锁定
8.1. 创建锁定
8.2. 发现锁定
8.3. 解除和偷窃锁定
8.4. 锁定交流
9. 外部定义
10. 修改列表
10.1. 创建和更新修改列表
10.2. 用修改列表作为操作过滤器
10.3. 修改列表的限制
11. 网络模型
11.1. 请求和响应
11.2. 客户端凭证
11.2.1. 缓存凭证
11.2.2. 禁用密码缓存
11.2.3. 删除缓存的凭证
11.2.4. 命令行认证
11.2.5. 认证总结
12. 总结
4. 分支与合并
1. 什么是分支?
2. 使用分支
2.1. 创建分支
2.2. 在分支上工作
2.3. 分支背后的关键概念
3. 基本合并
3.1. 变更集
3.2. 保持分支同步
3.3. 重新集成分支
3.4. 合并信息和预览
3.5. 取消修改
3.6. 找回删除的项目
4. 高级合并
4.1. 摘录合并
4.2. 合并的语法:完整的描述
4.3. 不使用合并信息的合并
4.4. 合并冲突
4.5. 阻塞修改
4.6. Keeping a Reintegrated Branch Alive
4.7. 感知合并的日志和注解
4.8. 关注还是忽视祖先
4.9. 合并和移动
4.10. 阻塞不知道合并的客户端
4.11. 合并跟踪的最终信息
5. 使用分支
6. 标签
6.1. 建立简单标签
6.2. 建立复杂标签
7. 维护分支
7.1. 版本库布局
7.2. 数据的生命周期
8. 常用分支模式
8.1. 发布分支
8.2. 特性分支
9. 供方分支
9.1. 常规的供方分支管理过程
9.2. svn_load_dirs.pl
10. 总结
5. 版本库管理
1. Subversion 版本库的定义
2. 版本库开发策略
2.1. 规划你的版本库结构
2.2. 决定在哪里与如何部署你的版本库
2.3. 选择数据存储格式
2.3.1. Berkeley DB
2.3.2. FSFS
3. 创建和配置你的版本库
3.1. 创建版本库
3.2. 实现版本库钩子
3.3. Berkeley DB 配置
3.4. FSFS 配置
4. 版本库维护
4.1. 管理员的工具箱
4.1.1. svnadmin
4.1.2. svnlook
4.1.3. svndumpfilter
4.1.4. svnsync
4.1.5. fsfs-reshard.py
4.1.6. Berkeley DB 工具
4.2. 修正提交消息
4.3. 管理磁盘空间
4.3.1. 让 Subversion 节约磁盘空间
4.3.2. 删除终止的事务
4.3.3. 删除不使用的 Berkeley DB 日志文件
4.3.4. 打包 FSFS 文件系统
4.4. Berkeley DB 恢复
4.5. 版本库数据的移植
4.6. 过滤版本库历史
4.7. 版本库复制
4.8. 版本库备份
4.9. 管理版本库的 UUID
5. 移动和删除版本库
6. 总结
6. 服务配置
1. 概述
2. 选择一个服务器配置
2.1. svnserve 服务器
2.2. 穿越 SSH 隧道的 svnserve 服务器
2.3. Apache 的 HTTP 服务器
2.4. 推荐
3. svnserve - 定制的服务器
3.1. 调用服务器
3.1.1. svnserve 与守护进程
3.1.2. 通过 inetd 调用 svnserve
3.1.3. 通过隧道调用 svnserve
3.1.4. svnserve as a Windows service
3.1.5. svnserve as a launchd job
3.2. 内置的认证和授权
3.2.1. 创建一个用户文件和认证域
3.2.2. 设置访问控制
3.3. 让 svnserve 使用 SASL
3.3.1. 使用 SASL 认证
3.3.2. SASL 加密
3.4. 穿越 SSH 隧道
3.5. SSH Configuration Tricks
3.5.1. 初始设置
3.5.2. 控制调用的命令
4. httpd - Apache 的 HTTP 服务器
4.1. 先决条件
4.2. 基本的 Apache 配置
4.3. 认证选项
4.3.1. Basic authentication
4.3.2. Digest authentication
4.4. 授权选项
4.4.1. 整体访问控制
4.4.2. 每目录访问控制
4.4.3. 禁用基于路径的检查
4.5. Protecting network traffic with SSL
4.5.1. Subversion server SSL certificate configuration
4.5.2. Subversion client SSL certificate management
4.6. 额外的糖果
4.6.1. 版本库浏览
4.6.2. Apache 日志
4.6.3. 通过代理写
4.6.4. 其它的 Apache 特性
5. 基于路径的授权
6. High-level Logging
7. 支持多种版本库访问方法
7. 定制你的 Subversion 体验
1. 运行配置区
1.1. 配置区布局
1.2. 配置和 Windows 注册表
1.3. 配置选项
1.3.1. 服务器
1.3.2. 配置
2. 本地化
2.1. 理解区域设置
2.2. Subversion 对区域设置的使用
3. 使用外置编辑器
4. 使用外置比较与合并工具
4.1. 外置 diff
4.2. 外置 diff3
4.3. External merge
5. 总结
8. 嵌入 Subversion
1. 分层的库设计
1.1. 版本库层
1.2. 版本库访问层
1.3. 客户端层
2. 进入工作副本的管理区
2.1. 条目文件
2.2. 原始副本和属性文件
3. 使用 API
3.1. Apache 可移植运行库
3.2. Functions and Batons
3.3. URL 和路径需求
3.4. 使用 C 和 C++ 以外的语言
3.5. 代码样例
4. 总结
9. Subversion 完全参考
1. svn—Subversion Command-Line Client
1.1. svn 选项
1.2. svn 子命令
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 propdel (pdel, pd)
svn propedit (pedit, pe)
svn propget (pget, pg)
svn proplist (plist, pl)
svn propset (pset, ps)
svn resolve
svn resolved
svn revert
svn status (stat, st)
svn switch (sw)
svn unlock
svn update (up)
2. svnadmin—Subversion Repository Administration
2.1. svnadmin 选项
2.2. svnadmin 子命令
svnadmin crashtest
svnadmin create
svnadmin deltify
svnadmin dump
svnadmin help (h, ?)
svnadmin hotcopy
svnadmin list-dblogs
svnadmin list-unused-dblogs
svnadmin load
svnadmin lslocks
svnadmin lstxns
svnadmin pack
svnadmin recover
svnadmin rmlocks
svnadmin rmtxns
svnadmin setlog
svnadmin setrevprop
svnadmin setuuid
svnadmin upgrade
svnadmin verify
3. svnlook—Subversion Repository Examination
3.1. svnlook 选项
3.2. svnlook 子命令
svnlook author
svnlook cat
svnlook changed
svnlook date
svnlook diff
svnlook dirs-changed
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
4. svnsync—Subversion Repository Mirroring
4.1. svnsync 选项
4.2. svnsync 子命令
svnsync copy-revprops
svnsync help
svnsync info
svnsync initialize (init)
svnsync synchronize (sync)
5. svnserve—Custom Subversion Server
5.1. svnserve 选项
6. svndumpfilter—Subversion History Filtering
6.1. svndumpfilter 选项
6.2. svndumpfilter 子命令
svndumpfilter exclude
svndumpfilter include
svndumpfilter help
7. svnversion—Subversion Working Copy Version Info
svnversion
8. mod_dav_svn—Subversion Apache HTTP Server Module
mod_dav_svn 配置指令
9. mod_authz_svn—Subversion Apache HTTP Authorization Module
mod_authz_svn 配置指令
10. Subversion 属性
10.1. 版本控制的属性
10.2. 未版本控制的属性
11. 版本库钩子
start-commit
pre-commit
post-commit
pre-revprop-change
post-revprop-change
pre-lock
post-lock
pre-unlock
post-unlock
A. Subversion 快速入门指南
1. 安装 Subversion
2. 快速指南
B. CVS 用户的 Subversion 指南
1. 版本号现在不同了
2. 目录的版本
3. 更多离线操作
4. 区分状态和更新
4.1. 状态
4.2. 更新
5. 分支和标签
6. 元数据属性
7. 解决冲突
8. 二进制文件和行结束标记转换
9. 版本化的模块
10. 认证
11. 迁移 CVS 版本库到 Subversion
C. WebDAV 和自动版本
1. 什么是 WebDAV?
2. 自动版本化
3. 客户端交互性
3.1. 独立的 WebDAV 应用程序
3.1.1. Microsoft Office,Dreamweaver,Photoshop
3.1.2. Cadaver,DAV 浏览器
3.2. 文件浏览器的 WebDAV 扩展
3.2.1. Microsoft Web 文件夹
3.2.2. Nautilus,Konqueror
3.3. WebDAV 的文件系统实现
3.3.1. WebDrive,NetDrive
3.3.2. Mac OS X
3.3.3. Linux davfs2
D. 版权
索引

插图清单

1. Subversion 的架构
1.1. 一个典型的客户/服务器系统
1.2. 需要避免的问题
1.3. “锁定-修改-解锁”方案
1.4. “拷贝-修改-合并”方案
1.5. “拷贝-修改-合并”方案(续)
1.6. Tree changes over time
1.7. 版本库的文件系统
4.1. 分支与开发
4.2. 开始规划版本库
4.3. 版本库与复制
4.4. 一个文件的分支历史
8.1. 二维的文件和目录
8.2. 版本时间 - 第三维!

表格清单

1.1. 版本库访问 URL
2.1. 常用日志操作
4.1. 分支与合并命令
5.1. 版本库数据存储对照表
6.1. Subversion 服务器选项比较
C.1. 常用的 WebDAV 客户端

范例清单

4.1. Merge-tracking gatekeeper start-commit hook script
5.1. txn-info.sh (报告异常事务)
5.2. 镜像版本库的 pre-revprop-change 钩子
5.3. 镜像版本库的 start-commit 钩子
6.1. A sample svnserve launchd job definition
6.2. 匿名访问的配置样例
6.3. 认证访问的配置样例
6.4. 混合认证/匿名访问的配置样例
6.5. 禁用所有的路径检查
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. Using the repository layer
8.2. Using the repository layer with Python
8.3. 一个 Python 状态爬虫