使用Subversion进行版本控制

针对 Subversion 1.4(根据r2866编译)

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)


目录

前言
序言
读者
怎样阅读本书
本书约定
排版习惯
图标
本书的结构
本书是免费的
致谢
来自 Ben Collins-Sussman
来自 Brian W. Fitzpatrick
来自 C. Michael Pilato
Subversion是什么?
Subversion的历史
Subversion的特性
Subversion的架构
Subversion的组件
1. 基本概念
版本库
版本模型
文件共享的问题
锁定-修改-解锁 方案
拷贝-修改-合并 方案
Subversion实践
Subversion版本库URL
工作拷贝
修订版本
工作拷贝怎样跟踪版本库
混合修订版本的工作拷贝
更新和提交是分开的
混合修订版本很常见
混合版本很有用
混合版本有限制
总结
2. 基本使用
求助!
导入数据到你的版本库
svn import
推荐的版本库布局
初始化检出
禁用密码缓存
用其它身份认证
基本的工作周期
更新你的工作拷贝
修改你的工作拷贝
检查你的修改
查看你的修改概况
检查你的本地修改的详情
取消本地修改
解决冲突(合并别人的修改)
手工合并冲突
复制文件到你的工作文件
脚注:使用svn revert
提交你的修改
检验历史
产生历史修改列表
检查历史修改的详情
比较本地修改
比较工作拷贝和版本库
比较版本库与版本库
浏览版本库
svn cat
svn list
获得旧的版本库快照
有时你只需要清理
总结
3. 高级主题
版本清单
修订版本关键字
版本日期
属性
为什么需要属性?
操作属性
属性和 Subversion 工作流程
自动设置属性
文件移植性
文件内容类型
文件的可执行性
行结束字符串
忽略未版本控制的条目
关键字替换
锁定
创建锁定
发现锁定
解除和偷窃锁定
锁定交流
外部定义
Peg和实施修订版本
网络模型
请求和响应
客户端凭证缓存
4. 分支与合并
什么是分支?
使用分支
创建分支
在分支上工作
分支背后的关键概念
在分支间复制修改
复制特定的修改
合并背后的关键概念
合并的最佳实践
手工跟踪合并
预览合并
合并冲突
关注还是忽视祖先
合并和移动
常见用例
合并分支到另一分支
取消修改
找回删除的项目
常用分支模式
发布分支
特性分支
使用分支
标签
建立简单标签
建立复杂标签
分支维护
版本库布局
数据的生命周期
供方分支
常规的供方分支管理过程
svn_load_dirs.pl
总结
5. 版本库管理
Subversion 版本库的定义
版本库开发策略
规划你的版本库结构
决定在哪里与如何部署你的版本库
选择数据存储格式
Berkeley DB
FSFS
创建和配置你的版本库
创建版本库
实现版本库钩子
Berkeley DB 配置
版本库维护
管理员的工具箱
svnadmin
svnlook
svndumpfilter
svnsync
Berkeley DB 工具
修正提交消息
管理磁盘空间
Subversion如何节约磁盘空间
删除终止的事务
删除不使用的Berkeley DB日志文件
Berkeley DB 恢复
版本库数据的移植
过滤版本库历史
版本库复制
版本库备份
总结
6. 服务配置
概述
选择一个服务器配置
svnserve服务器
svnserve使用SSH通道
Apache 的 HTTP 服务器
推荐
svnserve,一个自定义的服务器
调用服务器
svnserve作为守护进程
使用svnserve通过inetd
通过通道使用svnserve
svnserve作为Windows服务
内置的认证和授权
创建一个用户文件和认证域
设置访问控制
SSH 隧道
SSH 配置技巧
初始设置
控制调用的命令
httpd,Apache的HTTP服务器
先决条件
基本的 Apache 配置
认证选项
基本HTTP认证
SSL 证书管理
授权选项
整体访问控制
每目录访问控制
禁用基于路径的检查
额外的糖果
版本库浏览
Apache 日志
其它特性
基于路径的授权
支持多种版本库访问方法
7. 定制你的Subversion体验
运行配置区
配置区布局
配置和Windows注册表
配置选项
服务器
配置
本地化
理解地区
Subversion对区域设置的支持
使用外置比较工具
外置 diff
外置 diff3
8. 嵌入Subversion
分层的库设计
版本库层
版本库访问层
客户端层
进入工作拷贝的管理区
条目文件
原始拷贝和属性文件
使用API
Apache可移植运行库
URL 和路径需求
使用 C 和 C++ 以外的语言
代码样例
9. Subversion 完全参考
Subversion 命令行客户端:svn
svn选项
svn子命令
svnadmin
svnadmin选项
svnadmin子命令
svnlook
svnlook选项
svnlook子命令
svnsync
svnsync选项
svnsync子命令
svnserve
svnserve选项
svnversion
mod_dav_svn
Subversion属性
版本控制的属性
未版本控制的属性
版本库钩子
A. Subversion 快速入门指南
安装 Subversion
快速指南
B. CVS用户的Subversion指南
版本号现在不同了
目录的版本
更多离线操作
区分状态和更新
状态
更新
分支和标签
元数据属性
解决冲突
二进制文件和行结束标记转换
版本化的模块
认证
迁移CVS版本库到Subversion
C. WebDAV和自动版本
什么是WebDAV ?
自动版本化
客户端交互性
独立的 WebDAV 应用程序
Microsoft Office,Dreamweaver,Photoshop
Cadaver,DAV 浏览器
文件浏览器 WebDAV 扩展
Microsoft Web 文件夹
Nautilus,Konqueror
WebDAV文件系统实现
WebDrive,NetDrive
Mac OS X
Linux davfs2
D. 第三方工具
E. Copyright
索引

插图清单

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. 版本时间—第三维!

表格清单

1.1. 版本库访问URL
5.1. 版本库数据存储对照表
6.1. Subversion服务器选项比较
C.1. 常用WebDAV客户端

范例清单

5.1. txn-info.sh(报告异常事务)
5.2. 镜像版本库的 pre-revprop-change 钩子
5.3. 镜像版本库的 start-commit 钩子
6.1. 匿名访问的配置实例。
6.2. 一个认证访问的配置实例。
6.3. 一个混合认证/匿名访问的配置实例。
6.4. 禁用所有的路径检查
7.1. 注册表条目(.reg)样本文件。
7.2. diffwrap.sh
7.3. diffwrap.bat
7.4. diff3wrap.sh
7.5. diff3wrap.bat
8.1. 使用版本库层
8.2. 使用 Python 处理版本库层
8.3. 一个Python状态爬虫