本文档尚在编写中,内容可能会发生重大变化,可能无法准确描述任何已发布的 Apache™ Subversion® 软件版本。将此页面添加书签或推荐给其他人可能不是一个好主意。请访问 https://svnbook.subversion.org.cn/ 获取本书的稳定版本。

使用 Subversion 进行版本控制 [草稿]

适用于 Subversion 1.8

(编译自 r6065)

Ben Collins-Sussman

Brian W. Fitzpatrick

C. Michael Pilato

本作品根据知识共享署名许可证授权。要查看此许可证的副本,请访问 http://creativecommons.org/licenses/by/2.0/ 或致函知识共享,地址:559 Nathan Abbott Way,斯坦福,加利福尼亚州 94305,美国。


目录

前言
序言
什么是 Subversion?
Subversion 是否是合适的工具?
Subversion 的历史
Subversion 的架构
Subversion 的组件
Subversion 的新功能
目标受众
如何阅读本书
本书的组织结构
本书免费提供
致谢
I. 了解 Subversion
1. 基本概念
版本控制基础
仓库
工作副本
版本控制模型
文件共享问题
锁定-修改-解锁解决方案
复制-修改-合并解决方案
Subversion 版本控制方式
Subversion 仓库
修订版
仓库地址
Subversion 工作副本
工作副本的工作原理
工作副本的基本交互
混合修订版工作副本
总结
2. 基本用法
帮助!
将数据导入仓库
导入文件和目录
推荐的仓库布局
名称的意义
创建工作副本
基本工作流程
更新工作副本
进行更改
查看更改
查看更改概览
检查本地修改的详细信息
修复错误
解决冲突
交互式查看冲突差异
交互式解决冲突差异
推迟冲突解决
手动解决冲突
放弃更改,转而使用新获取的修订版
使用 svn revert 来放弃更改
提交更改
查看历史记录
查看历史更改的详细信息
查看本地更改
比较工作副本与仓库
比较仓库修订版
生成历史更改列表
浏览仓库
显示文件内容
显示逐行更改归属
列出版本控制目录
获取旧的仓库快照
有时需要清理
处理工作副本
从中断中恢复
处理结构冲突
树冲突示例
总结
3. 高级主题
修订版说明符
修订版关键字
修订版日期
基准修订版和操作修订版
属性
为什么需要属性?
操作属性
属性与 Subversion 工作流程
继承的属性
自动设置属性
Subversion 的保留属性
版本控制的属性
未版本控制的属性
文件可移植性
文件内容类型
文件可执行性
行尾字符序列
忽略未版本控制的项目
关键字替换
稀疏目录
锁定
创建锁定
发现锁定
解除和窃取锁定
锁定通信
外部定义
变更列表
创建和修改变更列表
变更列表作为操作过滤器
变更列表限制
网络模型
请求和响应
客户端凭据
缓存凭据
禁用密码缓存
移除缓存的凭据
命令行身份验证
身份验证总结
在没有工作副本的情况下工作
远程命令行客户端操作
使用 svnmucc
总结
4. 分支和合并
什么是分支?
使用分支
创建分支
使用分支
分支背后的关键概念
基本合并
变更集
保持分支同步
子树合并和子树合并信息
重新整合分支
合并信息和预览
撤消更改
恢复已删除的项目
高级合并
Cherrypicking
合并语法:完整披露
没有合并信息的合并
关于合并冲突的更多信息
阻止更改
对合并敏感的日志和注释
注意或忽略祖先关系
合并和移动
防止天真的客户端提交合并
关于合并跟踪的最后说明
遍历分支
标签
创建简单标签
创建复杂标签
分支维护
仓库布局
数据生命周期
常见的分支模式
发布分支
功能分支
供应商分支
通用供应商分支管理流程
来自外部仓库的供应商分支
来自镜像源的供应商分支
是否需要创建分支?
总结
5. 仓库管理
Subversion 仓库定义
仓库部署策略
规划仓库组织结构
决定仓库的托管位置和方式
控制对仓库的访问权限
创建和配置仓库
创建仓库
实现仓库钩子
钩子脚本环境配置
钩子脚本的常见用途
查找钩子脚本或编写自己的脚本
FSFS 配置
仓库维护
管理员工具包
svnadmin
svnlook
svndumpfilter
svnrdump
svnsync
fsfs-reshard.py
提交日志消息修正
管理磁盘空间
Subversion 如何节省磁盘空间
移除无效事务
打包 FSFS 文件系统
将仓库数据迁移到其他位置
使用 svnadmin 迁移仓库数据
使用 svnrdump 迁移仓库数据
过滤仓库历史记录
仓库复制
使用 svnsync 进行复制
使用 svnsync 进行部分复制
创建镜像的快速技巧
复制总结
仓库备份
管理仓库 UUID
移动和删除仓库
总结
6. 服务器配置
概述
选择服务器配置
svnserve 服务器
通过 SSH 运行 svnserve
Apache HTTP 服务器
建议
svnserve,自定义服务器
启动服务器
作为守护进程运行 svnserve
通过 inetd 运行 svnserve
通过 xinetd 运行 svnserve
通过隧道运行 svnserve
作为 Windows 服务运行 svnserve
作为 launchd 作业运行 svnserve
内置的身份验证和授权
创建用户文件和领域
设置访问控制
将 svnserve 与 SASL 一起使用
使用 SASL 进行身份验证
SASL 加密
通过 SSH 建立隧道
SSH 配置技巧
初始设置
控制启动的命令
svnserve 配置参考
通用配置
Cyrus SASL 配置
httpd,Apache HTTP 服务器
先决条件
基本 Apache 配置
身份验证选项
基本身份验证
摘要式身份验证
授权选项
整体访问控制
按目录访问控制
禁用基于路径的检查
仓库中版本控制的访问文件
使用 SSL 保护网络流量
Subversion 服务器 SSL 证书配置
Subversion 客户端 SSL 证书管理
性能调优
KeepAlive
批量更新
额外功能
仓库浏览
Apache 日志记录
直写代理
其他 Apache 功能
Subversion Apache HTTP 服务器配置参考
mod_dav_svn 配置指令
mod_authz_svn 配置指令
基于路径的授权
基于路径的访问控制入门
访问控制组
用户名别名
高级访问控制功能
访问控制中的一些注意事项
高级日志记录
服务器优化
数据缓存
数据的网络压缩
支持多种仓库访问方法
7. 自定义您的 Subversion 体验
运行时配置区域
配置区域布局
配置和 Windows 注册表
运行时配置选项
通用配置
按服务器配置
本地化
了解区域设置
Subversion 的区域设置使用
使用外部编辑器
使用外部差异和合并工具
外部 diff
外部 diff3
外部 merge
总结
8. 嵌入 Subversion
分层库设计
仓库层
仓库访问层
客户端层
使用 API
Apache 可移植运行时库
函数和 Baton
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 Explorer
文件浏览器 WebDAV 扩展
Microsoft 网络文件夹
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. 版本控制时间 - 第三维!

表格列表

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 状态爬虫
TortoiseSVN 官方中文版 1.14.7 发布