本手册旨在介绍 Subversion 1.0。如果您正在运行更新版本的 Subversion,我们强烈建议您访问 https://svnbooks.subversion.org.cn/ 并参考适合您 Subversion 版本的本手册版本。

使用 Subversion 进行版本控制

适用于 Subversion 1.0

(手册编译自版本 10945)

Ben Collins-Sussman

Brian W. Fitzpatrick

C. Michael Pilato

本作品采用知识共享署名许可证授权。要查看此许可证的副本,请访问 http://creativecommons.org/licenses/by/2.0/ 或向知识共享基金会发送信件,地址:559 Nathan Abbott Way, Stanford, California 94305, USA。

(待定)


目录

前言
序言
读者对象
如何阅读本书
本书使用的约定
排版约定
图标
本书的组织结构
本书免费
致谢
Ben Collins-Sussman 的致谢
Brian W. Fitzpatrick 的致谢
C. Michael Pilato 的致谢
1. 概述
什么是 Subversion?
Subversion 的历史
Subversion 的特性
Subversion 的架构
安装 Subversion
Subversion 的组件
快速入门
2. 基本概念
版本库
版本控制模型
文件共享的问题
锁定-修改-解锁解决方案
复制-修改-合并解决方案
Subversion 的实际应用
工作副本
版本
工作副本如何跟踪版本库
混合版本限制
总结
3. 导览
求助!
导入
版本:编号、关键字和日期,哦!
版本编号
版本关键字
版本日期
初始检出
基本工作流程
更新您的工作副本
对工作副本进行修改
查看您的修改
svn status
svn diff
svn revert
解决冲突(合并他人的修改)
手动合并冲突
将文件复制到您的工作副本中
放弃修改:使用 svn revert
提交您的修改
查看历史记录
svn log
svn diff
查看本地修改
比较工作副本与版本库
比较版本库与版本库
svn cat
svn list
关于历史记录的最后说明
其他有用的命令
svn cleanup
svn import
总结
4. 分支与合并
什么是分支?
使用分支
创建分支
使用您的分支
分支背后的关键概念
在分支之间复制修改
复制特定修改
合并的最佳实践
手动跟踪合并
预览合并
注意或忽略祖先
合并的常见用例
将整个分支合并到另一个分支
撤销修改
恢复已删除的项
切换工作副本
标签
创建简单标签
创建复杂标签
分支维护
版本库布局
数据生命周期
总结
5. 版本库管理
版本库基础知识
了解事务和版本
未版本化的属性
Berkeley DB
创建和配置版本库
钩子脚本
Berkeley DB 配置
版本库维护
管理员工具包
svnlook
svnadmin
svndumpfilter
svnshell.py
Berkeley DB 实用程序
版本库清理
管理磁盘空间
版本库恢复
迁移版本库
版本库备份
添加项目
选择版本库布局
创建布局,并导入初始数据
总结
6. 服务器配置
概述
网络模型
请求和响应
客户端凭据缓存
svnserve,自定义服务器
调用服务器
内置身份验证和授权
创建“users”文件和域
设置访问控制
SSH 身份验证和授权
httpd,Apache HTTP 服务器
先决条件
基本 Apache 配置
身份验证选项
基本 HTTP 身份验证
SSL 证书管理
授权选项
全局访问控制
按目录访问控制
额外功能
版本库浏览
其他功能
支持多种版本库访问方法
7. 高级主题
运行时配置区域
配置区域布局
配置和 Windows 注册表
配置选项
服务器
配置
属性
为什么使用属性?
操作属性
特殊属性
svn:executable
svn:mime-type
svn:ignore
svn:keywords
svn:eol-style
svn:externals
自动设置属性
外部定义
供应商分支
供应商分支的一般管理流程
svn_load_dirs.pl
8. 开发者信息
分层库设计
版本库层
版本库访问层
RA-DAV(使用 HTTP/DAV 的版本库访问)
RA-SVN(自定义协议版本库访问)
RA-Local(直接版本库访问)
您的 RA 库在此
客户端层
使用 API
Apache 可移植运行时库
URL 和路径要求
使用除 C 和 C++ 之外的语言
工作副本管理区域内部
Entries 文件
原始副本和属性文件
WebDAV
使用内存池进行编程
为 Subversion 做贡献
加入社区
获取源代码
熟悉社区政策
进行修改并测试
捐赠您的修改
9. Subversion 完整参考
Subversion 命令行客户端:svn
svn 选项
svn 子命令
svn add
svn blame
svn cat
svn checkout
svn cleanup
svn commit
svn copy
svn delete
svn diff
svn export
svn help
svn import
svn info
svn list
svn log
svn merge
svn mkdir
svn move
svn propdel
svn propedit
svn propget
svn proplist
svn propset
svn resolved
svn revert
svn status
svn switch
svn update
svnadmin
svnadmin 选项
svnadmin 子命令
svnadmin create
svnadmin deltify
svnadmin dump
svnadmin help
svnadmin hotcopy
svnadmin list-dblogs
svnadmin list-unused-dblogs
svnadmin load
svnadmin lstxns
svnadmin recover
svnadmin rmtxns
svnadmin setlog
svnadmin verify
svnlook
svnlook 选项
svnlook
svnlook author
svnlook cat
svnlook changed
svnlook date
svnlook diff
svnlook dirs-changed
svnlook help
svnlook history
svnlook info
svnlook log
svnlook propget
svnlook proplist
svnlook tree
svnlook uuid
svnlook youngest
svnserve
svnserve 选项
A. 针对 CVS 用户的 Subversion
版本编号现在不同了
目录版本
更多断开操作
状态和更新的区别
分支和标签
元数据属性
冲突解决
二进制文件和翻译
版本化模块
身份验证
将版本库从 CVS 转换为 Subversion
B. 故障排除
常见问题
使用 Subversion 遇到的问题
每次尝试访问版本库时,Subversion 客户端都会挂起。
每次尝试运行 svn 时,它都会提示我的工作副本已锁定。
我遇到找不到或打开版本库的错误,但我确信我的版本库 URL 正确。
如何在 file:// URL 中指定 Windows 驱动器盘符?
我在对网络上的 Subversion 版本库执行写入操作时遇到了问题。
在 Windows XP 中,Subversion 服务器有时似乎会发送损坏的数据。
跟踪 Subversion 客户端与 Apache 服务器之间的对话的最佳方法是什么?
我刚构建了发行版二进制文件,当我尝试检出 Subversion 时,我遇到了关于“无法识别的 URL 方案”的错误。
为什么“svn revert”命令需要显式目标?为什么它不是默认递归的?这种行为与几乎所有其他子命令不同。
当我启动 Apache 时,mod_dav_svn 会抱怨“数据库版本错误”,它发现的是 db-3.X,而不是 db-4.X。
我在 RedHat 9 上遇到“功能未实现”错误,什么也无法正常工作。如何解决?
为什么日志显示“(无作者)”用于通过 Apache(ra_dav)提交或导入的文件?
我在 Windows 上偶尔会遇到“拒绝访问”错误。它们似乎随机发生。
在 FreeBSD 上,某些操作(特别是 svnadmin create)有时会挂起。
我可以在 Web 浏览器中看到我的版本库,但“svn checkout”提示关于“301 Moved Permanently”的错误。
我尝试查看文件的旧版本,但 svn 提示关于“找不到路径”的错误。
C. WebDAV 和自动版本控制
基本 WebDAV 概念
纯 WebDAV
DeltaV 扩展
Subversion 和 DeltaV
将 Subversion 映射到 DeltaV
自动版本控制支持
mod_dav_lock 替代方案
自动版本控制互操作性
Win32 WebFolders
Mac OS X
Unix:Nautilus 2
Linux davfs2
D. 第三方工具
客户端和插件
语言绑定
版本库转换器
高级工具
版本库浏览工具
E. 版权

插图列表

1.1. Subversion 的架构
2.1. 典型的客户端/服务器系统
2.2. 要避免的问题
2.3. 锁定-修改-解锁解决方案
2.4. 复制-修改-合并解决方案
2.5. 复制-修改-合并解决方案(续)
2.6. 版本库的文件系统
2.7. 版本库
4.1. 开发分支
4.2. 初始版本库布局
4.3. 包含新副本的版本库
4.4. 一个文件的历史分支
8.1. 二维的目录和文件
8.2. 版本控制时间——第三维!

表格列表

2.1. 版本库访问 URL
6.1. 网络服务器比较
8.1. Subversion 库简要清单

示例列表

5.1. 使用 svnshell 导航版本库
5.2. txn-info.sh (报告未完成的事务)
6.1. 匿名访问的示例配置。
6.2. 认证访问的示例配置。
6.3. 混合认证/匿名访问的示例配置。
7.1. 示例注册条目 (.reg) 文件。
8.1. 使用版本库层
8.2. 使用 Python 操作版本库层
8.3. 用于检出工作副本的简单脚本。
8.4. 典型 .svn/entries 文件内容
8.5. 有效地使用池
TortoiseSVN 官方中文版 1.14.7 发布