本手册旨在描述 Subversion 1.6.x 系列。如果您运行的是其他版本的 Subversion,强烈建议您访问 https://svnbooks.subversion.org.cn/ 并查阅与您 Subversion 版本匹配的手册版本。

使用 Subversion 进行版本控制

适用于 Subversion 1.6

(从 r6065 编译)

Ben Collins-Sussman

Brian W. Fitzpatrick

C. Michael Pilato

本作品采用知识共享署名许可协议授权。要查看本许可协议的副本,请访问 http://creativecommons.org/licenses/by/2.0/ 或写信给知识共享,地址:559 Nathan Abbott Way, Stanford, California 94305, USA。

(待定)


目录

前言
序言
什么是 Subversion?
Subversion 是否是正确的工具?
Subversion 的历史
Subversion 的架构
Subversion 的组件
Subversion 的新特性
目标读者
如何阅读本书
本书的组织结构
本书免费提供
致谢
1. 基本概念
版本控制基础
版本库
工作副本
版本控制模型
文件共享问题
锁定-修改-解锁解决方案
复制-修改-合并解决方案
Subversion 式的版本控制
Subversion 版本库
版本
版本库地址
Subversion 工作副本
工作副本的工作原理
基本的工作副本交互
混合版本工作副本
总结
2. 基本用法
帮助!
将数据导入版本库
导入文件和目录
推荐的版本库布局
名称的意义
创建工作副本
基本工作流程
更新工作副本
进行修改
查看修改
查看修改概述
查看本地修改的详细信息
修复错误
解决冲突
交互式查看冲突差异
交互式解决冲突差异
推迟冲突解决
手动合并冲突
丢弃修改,使用新获取的版本
放弃:使用 svn revert
提交修改
查看历史记录
查看历史修改的详细信息
查看本地修改
比较工作副本与版本库
比较版本库版本
生成历史修改列表
浏览版本库
svn cat
svn list
获取旧的版本库快照
有时您只需要清理
删除工作副本
从中断中恢复
处理结构冲突
树冲突示例
总结
3. 高级主题
版本说明符
版本关键字
版本日期
基版本和操作版本
属性
为什么要使用属性?
操作属性
属性与 Subversion 工作流程
自动设置属性
文件可移植性
文件内容类型
文件可执行性
行尾字符序列
忽略未版本控制的项目
关键字替换
稀疏目录
锁定
创建锁定
查看锁定
解除锁定和窃取锁定
锁定通信
外部定义
变更列表
创建和修改变更列表
变更列表作为操作过滤器
变更列表限制
网络模型
请求和响应
客户端凭据
缓存凭据
禁用密码缓存
删除缓存的凭据
命令行身份验证
身份验证总结
总结
4. 分支与合并
什么是分支?
使用分支
创建分支
使用分支
分支背后的关键概念
基本合并
变更集
保持分支同步
重新集成分支
mergeinfo 和预览
撤消修改
恢复已删除的项目
高级合并
Cherrypick
合并语法:全面揭示
不使用 mergeinfo 的合并
关于合并冲突的更多信息
阻止修改
保持重新集成的分支存活
对合并敏感的日志和注释
注意或忽略祖先
合并和移动
阻止天真的客户端提交合并
关于合并跟踪的最后一点
遍历分支
标签
创建简单标签
创建复杂标签
分支维护
版本库布局
数据生命周期
常见的分支模式
发布分支
功能分支
供应商分支
通用供应商分支管理流程
svn_load_dirs.pl
总结
5. 版本库管理
Subversion 版本库定义
版本库部署策略
规划版本库组织
确定版本库的托管位置和方式
选择数据存储
Berkeley DB
FSFS
创建和配置版本库
创建版本库
实现版本库钩子
Berkeley DB 配置
FSFS 配置
版本库维护
管理员工具包
svnadmin
svnlook
svndumpfilter
svnsync
fsfs-reshard.py
Berkeley DB 工具
修正提交日志消息
管理磁盘空间
Subversion 如何节省磁盘空间
删除无效事务
清除未使用的 Berkeley DB 日志文件
压缩 FSFS 文件系统
Berkeley DB 恢复
将版本库数据迁移到其他位置
过滤版本库历史记录
版本库复制
版本库备份
管理版本库 UUID
移动和删除版本库
总结
6. 服务器配置
概述
选择服务器配置
svnserve 服务器
通过 SSH 使用 svnserve
Apache HTTP 服务器
建议
svnserve,自定义服务器
调用服务器
svnserve 作为守护进程
svnserve 通过 inetd
svnserve 通过隧道
svnserve 作为 Windows 服务
svnserve 作为 launchd 任务
内置身份验证和授权
创建用户文件和领域
设置访问控制
svnserve 与 SASL 配合使用
使用 SASL 进行身份验证
SASL 加密
通过 SSH 建立隧道
SSH 配置技巧
初始设置
控制调用的命令
httpd,Apache HTTP 服务器
先决条件
基本 Apache 配置
身份验证选项
基本身份验证
摘要身份验证
授权选项
整体访问控制
按目录访问控制
禁用基于路径的检查
使用 SSL 保护网络流量
Subversion 服务器 SSL 证书配置
Subversion 客户端 SSL 证书管理
额外的好东西
版本库浏览
Apache 日志记录
直写代理
其他 Apache 功能
基于路径的授权
高级日志记录
支持多种版本库访问方法
7. 自定义 Subversion 体验
运行时配置区域
配置区域布局
配置和 Windows 注册表
配置选项
服务器
Config
本地化
了解语言环境
Subversion 如何使用语言环境
使用外部编辑器
使用外部差异和合并工具
外部 diff
外部 diff3
外部 merge
总结
8. 嵌入 Subversion
分层库设计
版本库层
版本库访问层
客户端层
工作副本管理区域内部
Entries 文件
原始副本和属性文件
使用 API
Apache 可移植运行时库
函数和 baton
URL 和路径要求
使用除 C 和 C++ 之外的其他语言
代码示例
总结
9. Subversion 完整参考
svn—Subversion 命令行客户端
svn 选项
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)
svnadmin—Subversion 仓库管理
svnadmin 选项
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
svnlook—Subversion 仓库检查
svnlook 选项
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
svnsync—Subversion 仓库镜像
svnsync 选项
svnsync 子命令
svnsync copy-revprops
svnsync help
svnsync info
svnsync initialize (init)
svnsync synchronize (sync)
svnserve—自定义 Subversion 服务器
svnserve 选项
svndumpfilter—Subversion 历史记录过滤
svndumpfilter 选项
svndumpfilter 子命令
svndumpfilter exclude
svndumpfilter include
svndumpfilter help
svnversion—Subversion 工作副本版本信息
svnversion
mod_dav_svn—Subversion Apache HTTP 服务器模块
mod_dav_svn 配置指令
mod_authz_svn—Subversion Apache HTTP 授权模块
mod_authz_svn 配置指令
Subversion 属性
版本化属性
非版本化属性
仓库钩子
start-commit
pre-commit
post-commit
pre-revprop-change
post-revprop-change
pre-lock
post-lock
pre-unlock
post-unlock
A. Subversion 快速入门指南
安装 Subversion
快速教程
B. 针对 CVS 用户的 Subversion
版本号现在不同了
目录版本
更多断开操作
状态和更新之间的区别
状态
更新
分支和标签
元数据属性
冲突解决
二进制文件和翻译
版本化模块
身份验证
将仓库从 CVS 转换为 Subversion
C. WebDAV 和自动版本控制
什么是 WebDAV?
自动版本控制
客户端互操作性
独立 WebDAV 应用程序
Microsoft Office、Dreamweaver、Photoshop
cadaver、DAV Explorer
文件浏览器 WebDAV 扩展
Microsoft Web Folders
Nautilus、Konqueror
WebDAV 文件系统实现
WebDrive、NetDrive
Mac OS X
Linux davfs2
D. 版权
索引

图示目录

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
2.1. 常见的日志请求
4.1. 分支和合并命令
5.1. 仓库数据存储比较
6.1. Subversion 服务器选项比较
C.1. 常见的 WebDAV 客户端

示例目录

4.1. 合并跟踪门卫 start-commit 钩子脚本
5.1. txn-info.sh (报告未完成的事务)
5.2. 镜像仓库的 pre-revprop-change 钩子脚本
5.3. 镜像仓库的 start-commit 钩子脚本
6.1. 一个示例 svnserve launchd 作业定义
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. 使用仓库层
8.2. 使用 Python 仓库层
8.3. Python 状态爬虫
TortoiseSVN 官方中文版 1.14.7 发布