9/10/2006

SVN FAQ(zz)

出处: http://blog.sina.com.cn/u/5595d514010005o2

要谢谢dongyu同学的整理 :)
SVNFAQ:
1. Q:SVN服务启动的方法?
A:svnd或者apache(HTTP)
2. Q:SVN怎么创建版本库?
A:svnadmin create /path/to/repos
3. Q:SVN版本库的存储方式有什么?
A:一种是使用Berkeley DB,一种是使用本地文件系统(FSFS)
4. Q:我们可以对SVN的那些部分进行开发?
A:client端,hook,repository tools(如svnlook)
5. Q:本地的文件于服务器上文件的区别是什么?
A:在本地只储存文件的某个具体版本,而服务器上储存了整个的版本树(服务器上FSFS通过写入与上一个版本比较的变化来记录新版)
6. Q:SVN版本库的目录结构是什么?
A:包含有conf/ dav/ db/ format hooks/ locks/ README.txt,具体的见附1
7. Q:svnadmin的主要参数都有什么?
A:create等,具体见附2
8. Q:svnlook的主要参数都有什么?
A:cat等,具体见附3
9. Q:hook的中种类有哪些?
A:目前Subversion有已实现了五种钩子(start-commit,pre-commit,post-commit,pre-revprop-change,post-revprop-change),具体见附4
10.Q:svn commit有哪些参数?
A:svn commit [PATH...]
--message (-m) TEXT
--file (-F) FILE
--quiet (-q)
--non-recursive (-N)
--targets FILENAME
--force-log
--username USER
--password PASS
--no-auth-cache
--non-interactive
--encoding ENC
--config-dir DIR
11.svn中是怎么调用hook的?
A:把hook当成可执行的文件或者脚本,利用system.exec(shell)调用


附1:
SVN版本库的目录结构:
conf
一个存储版本库配置文件的目录。
dav
提供给Apache和mod_dav_svn的目录,让它们存储自己的数据。
db
你所有的受版本控制数据的所在之处。这个目录或者是个Berkeley DB环境(满是数据表和其他东西),或者是一个包含修订版本文件的FSFS环境。
format
包含了用来表示版本库布局版本号的整数。
hooks
一个存储钩子脚本模版的目录(还有钩子脚本本身, 如果你安装了的话)。
locks
一个存储Subversion版本库锁定数据的目录,被用来追踪对版本库的访问。
README.txt
这个文件只是用来告诉它的阅读者,他现在看的是 Subversion 的版本库。

附2:
svnadmin命令列表:
create
创建一个新的Subversion版本库。
deltify
在指定的修订版本范围内,对其中修改过的路径做增量化操作。如果没有指定修订版本,这条命令会修改HEAD修订版本。
dump
导出版本库修订一定版本范围内的内容,使用可移植转储格式。
hotcopy
对版本库做热拷贝,用这个方法你能任何时候安全的备份版本库而无需考虑是否正在使用。
list-dblogs
(Berkeley DB版本库专有)列出Berkeley DB中与版本库有关的日志文件清单。这个清单包括所有的日志文件—仍然被版本库使用的和不再使用的。
list-unused-dblogs
(Berkeley DB版本库专有)列出Berkeley DB版本库有关的不在使用日志文件路径清单。你能安全的从版本库中删除那些日志文件,也可以将它们存档以用来在灾难事件后版本库的恢复。
load
导入由dump子命令导出的可移植转储格式的一组修订版本。
lstxns
列出刚刚在版本库的没有提交的Subversion事务清单。
recover
恢复版本库,通常在版本库发生了致命错误的时候,例如阻碍进程干净的关闭同版本库的连接的错误。
rmtxns
从版本库中清除Subversion事务(通过加工lstxns子命令的输出即可)。
setlog
替换给定修订版本的svn:log(提交日志信息)属性值。
verify
验证版本库的内容,包括校验比较本地版本化数据和版本库。

附3:
svnlook命令参数列表:
author
显示该树的作者。
cat
显示树中某文件的内容。
changed
显示树中修改过的所有文件和目录。
date
显示该树的时间戳。
diff
使用统一区别格式显示被修改的文件。
dirs-changed
显示树中本身被修改或者其中文件被修改的目录。
history
显示受到版本控制的路径(更改和复制发生过的地方)中重要的历史点。
info
显示树的作者、时间戳、日志大小和日志信息。
log
显示树的日志信息。
propget
显示树中路径的属性值。
proplist
显示树中属性集合的名字与值。
tree
显示树列表,可选的显示与路径有关的文件系统节点的修订版本号。
uuid
显示版本库的UUID—全局唯一标示。
youngest
显示最年轻的修订版本号。

附4:
目前Subversion有实现的五种钩子:

start-commit
它在提交事务产生前已运行,通常用来判定一个用户是否有权提交。版本库传给该程序两个参数:到版本库的路径,和要进行提交的用户名。如果程序返回一个非零值,会在事务产生前停止该提交操作。如果钩子程序要在stderr中写入数据,它将排队送至客户端。

pre-commit
在事务完成提交之前运行,通常这个钩子是用来保护因为内容或位置(例如,你要求所有到一个特定分支的提交必须包括一个bug追踪的ticket号,或者是 要求日志信息不为空)而不允许的提交。版本库传递两个参数到程序:版本库的路径和正在提交的事务名称,如果程序返回非零值,提交会失败,事务也会删除。如 果钩子程序在stderr中写入了数据,也会传递到客户端。
Subversion的分发版本包括了一些访问控制脚本(在Subversion源文件目录树的tools/hook-scripts目录),可以用来被 pre-commit调用来实现精密的写访问控制。另一个选择是使用Apache的httpd模块mod_authz_svn,可以对单个目录进行读写访 问控制(见“每目录访问控制”一节)。在未来的Subversion版本中,我们计划直接在文件系统中实现访问控制列表(ACLs)。

post-commit
它在事务完成后运行,创建一个新的修订版本。大多数人用这个钩子来发送关于提交的描述性电子邮件,或者作为版本库的备份。版本库传给程序两个参数:到版本库的路径和被创建的新的修订版本号。退出程序会被忽略。
Subversion分发版本中包括mailer.py和commit-email.pl脚本(存于Subversion源代码树中的 tools/hook-scripts/目录中)可以用来发送描述给定提交的email(并且或只是追加到一个日志文件),这个mail包含变化的路径清 单,提交的日志信息、日期和作者以及修改文件的GNU区别样式输出。
Subversion提供的另一个有用的工具是hot-backup.py脚本(在Subversion源代码树中的tools/backup/目录 中)。这个脚本可以为Subversion版本库进行热备份(Berkeley DB数据库后端支持的一种特性),可以制作版本库每次提交的快照作为归档和紧急情况的备份。

pre-revprop-change
因为Subversion的修订版本属性不是版本化的,对这类属性的修改(例如提交日志属性svn:log)将会永久覆盖以前的属性值。因为数据在此可能 丢失,所以Subversion提供了这种钩子(及与之对应的post-revprop-change),因此版本库管理员可用一些外部方法记录变化。作 为对丢失未版本化属性数据的防范,Subversion客户端不能远程修改修订版本属性,除非为你的版本库实现这个钩子。
这个钩子在对版本库进行这种修改时才会运行,版本库给钩子传递四个参数:到版本库的路径,要修改属性的修订版本,经过认证的用户名和属性自身的名字。

post-revprop-change
我们在前面提到过,这个钩子与pre-revprop-change对应。事实上,因为多疑的原因,只有存在pre-revprop-change时这个 脚本才会执行。当这两个钩子都存在时,post-revprop-change在修订版本属性被改变之后运行,通常用来发送包含新属性的email。版本 库传递四个参数给该钩子:到版本库的路径,属性存在的修订版本,经过校验的产生变化的用户名,和属性自身的名字。
Subversion分发版本中包含propchange-email.pl脚本(在Subversion源代码树中的tools/hook- scripts/目录中),可以用来发送修订版本属性修改细节的email(并且或只是追加到一个日志文件)。这个email包含修订版本和发生变化的属 性名,作出修改的用户和新属性值。

0 Comments: