English

本文根据原文r31819,由Subversion中文站的中文化翻译小组翻译,欢迎各位参与翻译工作,加入地址:http://code.google.com/p/svncndoc/。参与翻译的志愿者包括rocksun、akeybupt2004和luowei1983。

Subversion工具和贡献

在subverion仓库目录包含有tools和contrib两个子目录, 其中的代码都是与subversion的功能实现相关,但是subversion的常规操作并不依赖于它们。

在tools子目录下面的文件都是由subversion项目共同维护的,和subversion使用相同的开源版权。

在contrib/子目录下的代码都是开源代码,但是可能持有和subversion本身不同的许可证或版权。subversion项目本身并不维护这些程序代码,仅仅只是为了用户使用方便而发布它们。

代码按照以下子目录分组:

关键字索引

backup

hot-backup.py (tools/backup)

对BDB版本库进行热备份。 (同时在备份结束后清除掉所有旧的日志文件。)

bdb

erase-all-text-data.py (tools/bdb)

删除一个BDB版本库中所有文件的内容。

相关文件: skel.py svnfs.py

svn-bdb-view.py (tools/bdb)

一个输出美观的查看器,用来查看BDB版本库的数据库内容。

相关文件: skel.py svnfs.py

whatis-rep.py (tools/bdb)

打印Subversion文件系统中某个节点变化的描述信息(包含数据,路经和修订版本),会根据定位数据(例如做一个表扫描)的需要尽可能多的扫描变更数据库表。

相关文件: skel.py svnfs.py

cgi

mirror_dir_through_svn.cgi (contrib/cgi)

这个CGI脚本通过一个SVN的版本库作为中介,把一个源目录镜像到一个目标目录。它以CGI的脚本写成,这样当远程用户在对一个WebDAV文件夹作了修改的时候,服务器能够将相应的WebDAV文件夹的内容镜像到系统的另外一个子目录。请看下文的用例示范。

同时请看 mirror_dir_through_svn.README

tweak-log.cgi (contrib/cgi)

直接通过web访问来修改SVN版本库中已提交的日志信息。

client-side

asvn (contrib/client-side)

Archive SVN可以记录一些通常svn不能处理的文件类型信息,目前这些记录信息包括设备,符号链接和文件所有权和访问权限。

bash_completion (tools/client-side)

针对SVN在bash环境下的命令行可编程自动补齐功能。

相关文件: bash_completion_test

diff-to-logmsg.vim (contrib/client-side/vim)

将'diff -urp'命令输出的内容转换成日志信息结构。

diff3wrap.bat (contrib/client-side)

对diff3/merge程序做了简单的封装.

diffwrap.bat (contrib/client-side)

对diff程序进行了简单的封装.

dsvn.el (contrib/client-side/emacs/dsvn.el)

提供给Emacs的SVN接口,类似于CVS提供的pcl-cvs接口。

同时参看 psvn.el.

svnmucc.c (tools/client-side/svnmucc)

多个URL命令的客户端(Multiple URL Command Client):可以将通过URL方式提交的一系列mv、cp和rm命令合并成一个提交命令。

相关文件: svnmucc-test.py

psvn.el (contrib/client-side/emacs/psvn.el)

提供给Emacs的SVN接口,类似于CVS提供的pcl-cvs接口。

同时参看 dsvn.el.

search-svnlog.pl (contrib/client-side)

根据匹配字符串检索特定的日志信息

server-version.py (tools/client-side)

显示Subersion服务器的版本号。

server-version.py 的前身为server-vsn.py

showchange.pl (tools/client-side)

显示一个修订版本的日志信息和精确修改内容。

svn-clean (contrib/client-side)

从本地工作拷贝中删除所有未被版本控制的文件。

svn-graph.pl (tools/client-side)

为某一个节点的分支修订历史生成一个名为GraphViz .dot的统计图。

svn-log.pl (contrib/client-side)

为Subersion的版本库生成一个美观的日志格式。

svn-push.c (contrib/client-side/svn-push)

将一个可连接到的版本库的修改集提交到另外一个可连接到的版本库(通过网络)。

svn-resolve (contrib/client-side)

用Filemerge来解决Subersion的修订冲突。

(FileMerge是Mac OS中X开发工具软件包中的一个图形化的比较工具。)

svn-viewdiff (contrib/client-side)

FileMerge的diff接口封装,该脚本基于GNU协议。(译者注:该脚本的接口和diff工具一致,输出的内容则会通过FileMerge的接口传给FileMerge程序。)

(FileMerge是Mac OS中X开发工具软件包中的一个优秀的图形化的比较工具。)

svn.vim (contrib/client-side/vim)

使Vim能够高亮显示SVN提交日志模板语法的VIM插件。

svn2cl.sh (contrib/client-side/svn2cl)

针对svn2cl.xsl的前端shell脚本,以正确的参数调用xsltproc。

同时参看README

相关文件: svn2cl.1 svn2cl.xsl svn2html.css svn2html.xsl

svn_all_diffs.pl (contrib/client-side)

一个perl脚本,用来获取修改了某个特定文件或者子目录的所有修订版本,并且显示用'svn diff'命令输出的所有这些修订版本的修改内容。非常适用于追踪和观察一个文件中特定某一行的改变。

svn_apply_autoprops.py (contrib/client-side)

这个脚本会从$HOME/.subversion/config中读取预定义的自动属性(auto-property)(译者注:自动属性是SVN根据不同文件类型自动添加在每个新增的文件/文件夹上的属性),然后将其递归应用到当前工作拷贝中的所有文件/文件夹。

svn_export_empty_files.py (contrib/client-side)

这个脚本用来从subversion版本库中导出目录文件结构,但是不包含原始文件上的内容,也就是说每个文件都是0字节文件。同时.svn目录也不会被导出,这个主要用于快速检索文件,而不是作为实际开发使用的工作拷贝。

svn_load_dirs.pl (contrib/client-side/svn_load_dirs)

这个perl脚本是设计用来向subversion服务器中导入若干个子目录。当用户有一个包含有大量.zip文件或者tar.{Z,gz,bz2}文件的文件包想要导入到subversion服务器中时,这个脚本尤其有用。

同时参看 svn_load_dirs.README.

相关文件: svn_load_dirs_property_table.example

svn_update.pl (contrib/client-side)

运行svn update,并把那些原本将会被diff3进行合并的文件视为冲突处理。

工作区issue 2048在r13383中得到解决并且在svn 1.2.0中发布。

svncopy.pl (contrib/client-side/svncopy)

用于分支和标记拷贝的实用脚本。

参看svncopy.README

相关文件: testsvncopy.pl

svnmerge.py (contrib/client-side/svnmerge)

用于跟踪合并过程的脚本。

同时参看 svnmerge.README

svnmerge.sh (contrib/client-side/svnmerge)

用于跟踪合并过程的脚本,是svnmerge.py的前身。

vc-svn.el (contrib/client-side/emacs)

Subversion的Emacs接口,使Subversion能够集成到Emacs的VC中。(译者注:vc是emacs的版本控制模式。)

需要注意的是,在SVN的版本目录下的vc_svn_el并不是主开发版本,最新的版本是放置在FSF Emacs版本目录下,可以通过http://savannah.gnu.org/cgi-bin/viewcvs/emacs/emacs/lisp/vc-svn.el 来访问。这里的版本只是为了兼容以前旧版本的Emacs而维护的,因为FSF版本库中还没有将此文件打包到任何一个Emacs官方发行包中。

wcgrep (contrib/client-side)

在一个在Subersion的工作目录中进行字符串查找的很有用工具,在本质上和grep命令的功能是一样的。

dev

check-license.py (tools/dev)

检查一个文件中是否有正确的许可证。

contribulyze.py (tools/dev)

一些subversion项目的日志信息里面包含某些元数据,可以解析跟踪出哪些用户对该项目做出过修改。这个脚本就是用来收集这些数据的。

datecheck.py (tools/dev)

这个一个调试脚本用来测试一个SVN版本库的时间排序。

gcov.patch (tools/dev)

这个补丁是用来生成一个报告文件,显示测试组件运行时覆盖到的C代码。

getsigs.pl (tools/dist)

这个脚本用来验证并获取发行的tar文件的签名,我们在声明中会使用这些内容。

gnuify-changelog.pl (tools/dev)

一个用来将svn的日志输出转换成GNU ChangeLog风格的脚本。

graph-dav-servers.py (tools/dev)

这原先是用来在svn的DAV服务器上生成一副不错的图片用的。

ff2csv.py (tools/dev/iz)

把find-fix.py的输出转换成excel可以处理的csv文件格式。

find-fix.py (tools/dev/iz)

为subversion的IZ数据库生成一个查找/修复报告文件。

run-queries.sh (tools/dev/iz)

运行某些IssueZilla查询命令。

lock-check.py (tools/dev)

版本库锁定检查器。对给定的版本库进行最高级的锁定,然后运行db_stat检查看锁定 计数器是否已经被置位为0。如果没有,则打印出本次运行查看的时间戳和累加计数的信息。

mlpatch.py (tools/dev)

非常令人讨厌的是,http://svn.haxx.se/的Subversion邮件列表存档把内嵌的补丁弄得一团糟, 并且不提供下载(除了存储整个月的邮件信息的mbox)。因此我写了这个脚本,来把他们重新归整,这个脚本并不是很完美,它还得对一些空格进行猜测,但至少能够正常工作。

normalize-dump.py (tools/dev)

读取Subversion的转储文件(Dumpfile)(如果没有指定文件,则从标准输入设备中读取),然后格式化其中包含的所有元信息,并输出经过统计的,已排序的信息。这在生成不同样式的转储文件方面比较有用。

po-merge.py (tools/dev)

这个脚本将用从标准输入读入的一个po源文件中的翻译和标志位去替换目标po文件中的翻译和标志位。在源文件中没有被找到的字符串将会保留不处理。

prebuild-cleanup.sh (tools/dev)

模拟在一个纯净的盒子里面构建一个subversion系统,用来净化一个系统。

random-commits.py (tools/dev)

用FILELIST(配置请看下文),组成一系列的 COUNT提交命令,每一次提交都会修改MAXFILES文件。这些命令结果通过标准输出端口输出(以shell脚本的格式)。

scramble-tree.py (tools/dev)

用于测试,对一个目录树进行随机的多个文件的修改。

stress.pl (tools/dev)

一个用来对subversion服务器进行简单测试的脚本,主要是模拟多个svn客户端同时进行读、写或者又读又写访问的情况。它还可以产生一个包含有大量文件和目录的工作拷贝树。所有的版本库访问都是通过svnadmin和svn命令实现。

svn-dev.el (tools/dev)

代码时候用的Emacs Lisp的辅助文件,它包含有一些在使用subversion时候很有用的elisp函数。

svn-dev.vim (tools/dev)

这个文件是用来在vim中装入subversion的编码风格,它可以在每一个vim程序底部的命令行中用:source svn-dev.vim打开,也可以在~/.vimrc设置,作用于今后vim处理的所有文件。其他用法请参看:help autocmd。

svn-merge-revs.py (tools/dev)

这个脚本用来帮助一个发行版本分支的合并和版本查看(尽管它也可以用在任意的开发分支之间)。

trails.py (tools/dev)

一个用来分析subversion的跟踪命令使用情况统计结果的程序。

verify-history.py (tools/dev)

这个程序是用来校验FS的历史代码。

warn-ignored-err.sh (tools/dev)

从每一个返回subversion错误值的函数中插入或者移除GCC的“warn_unused_result”属性,通常作用于指定的文件,默认是./subversion和./tools目录树中所有扩展名为*.h和*.c的文件。

which-error.py (tools/dev)

根据错误代码编号值打印出与之对应的subversion错误代码名称。

diff

diff.c (tools/diff)

一个使用了subversion比较函数实现的diff比较程序。

diff3.c (tools/diff)

一个使用了subversion比较函数实现的diff3比较程序。

diff4.c (tools/diff)

一个使用了subversionh比较函数实现的diff4比较程序。

hook-scripts挂钩脚本

case-insensitive.py (contrib/hook-scripts)

一个预提交的钩子程序,用来检查大小写敏感的文件名冲突。

check-mime-type.pl (contrib/hook-scripts)

检查每个新增加的文件是否都设置了svn:mime-type属性,如果文件的svn:mime-type属性值匹配"text/*"模式的话,那么该文件必须同时设置svn:eol-style属性。如果任一文件没有通过检查,则返回详细的错误信息给用户,并给出建议的解决方案,并且中止当前提交动作。

commit-access-control.pl (tools/hook-scripts)

用svnlook程序通过配置文件中权限规定项来检查提交修改的用户是否对有权限对所有修改的目录和文件进行提交。

相关文件: commit-access-control.cfg.example

commit-block-joke.py (contrib/hook-scripts)

一个有趣的预提交挂钩示例程序。

commit-email.pl (tools/hook-scripts)

发送一封电子邮件描述对一个subversion版本库的提交或者revprop-change。

用svnlook程序发送关于提交修改的电子邮件。通过repository/hooks/post-commit来调用它。 使用的时候不添加任何参数运行这个脚本。

commit-email.rb (tools/hook-scripts)

用Ruby/SWIG绑定的方法直接查询一个版本库的特定版本号的修改信息,然后通过电子邮件发送出相应的修改。 这个程序可以通过命令行选项来进行基本和设置和功能的微调。

detect-merge-conflicts.sh (contrib/hook-scripts)

一个预提交的挂钩脚本用来检测可能是遗忘的冲突标记的修改。

enforcer (contrib/hook-scripts/enforcer)

这是一个预提交的挂钩脚本可以让你更方便的制定多样化规则来确定允许上传到版本库中的不同内容。

相关文件: enforcer.conf

log-police.py (tools/hook-scripts)

确保日志信息以一个新的空行结尾。也可以作为一个独立的脚本运行来修复旧的版本。

mailer.py (tools/hook-scripts/mailer)

用Python/SWIG绑定的方法直接查询一个版本库的特定版本号的修改信息。这个程序通过一个配置文件进行基本的配置和修改位置的微调。对比commit-email.pl,它的结果输出中包含有更多关于属性修改的信息,处理二进制文件更智能,而且将结果通过电子邮件输出(避免了缓存的占用)。

相关文件: mailer.conf.example tests/

pre-commit-check.py (contrib/hook-scripts)

一个用来检查预提交挂钩程序的模板。

pre-lock-require-needs-lock.py (contrib/hook-scripts)

这个脚本,是作为一个预锁定的挂钩脚本,通常被用户用来校验用户试图锁定的路径是否设置有svn:needs-lock属性。如果有设置,则返回成功的信息。

svn2feed.py (tools/hook-scripts)

用来生成包含有提交信息的RSS 2.0或者Atom 1.0文件。

svn2feed.py的前身是svn2rss.py

svnperms.py (tools/hook-scripts)

一个用来检查写权限的预提交的挂钩脚本,类似于commit-access-control.pl,但是使用的不同的语法,可以通过运行'svnperms.py -h'来获得使用帮助。

相关文件: svnperms.conf.example

verify-po.py (tools/hook-scripts)

这个预提交的钩子脚本(precommit hook)用来检查当前提交的PO文件是否是UTF-8编码的。

po

l10n-report.py (tools/po)

这个脚本用来生成一个关于po文件转换状态的报告然后讲报告按照电子邮箱名通过邮件发送出去,报告内容将默认在标准输出上显示。

po-update.sh (tools/po)

该脚本用来生成subversion的pot文件,同时更新当前的语言资源包。

server-side服务器端

authz_svn_group.py (contrib/server-side)

mod_python权限管理程序,用来进行mod_authz_svn群组的权限管理

backup-recipe.sh (contrib/server-side)

这个脚本通过一个标准的完全+增量的处理流程,展示了如何对一个在线的subversion版本库进行备份和恢复的方法。

fsfs-reshard.py (tools/server-side)

这个脚本实现FSFS版本库在1.4极其以后版本兼容的线性格式和1.5版本包含的共享格式之间的离线格式转换。

mod_dontdothat.c (contrib/server-side/mod_dontdothat)

一个Apache的模块,允许你阻止大数据量的subversion请求,比如从根目录开始检出一个很大的版本库。

同时参看README

svn-backup-dumps.py (tools/server-side)

这个脚本用于从Windows和类Unix系统上的SVN版本库中创建一些增量的转储文件,这个脚本主要用在执行一些定时的计划任务,还有post-commit钩子脚本中。

svn-fast-backup (contrib/server-side)

用同步快照的方式为FSFS格式的版本库进行快速备份。

svnauthz-validate.c (tools/server-side)

加载并且验证一个授权文件。

svnmirror.sh (contrib/server-side)

为subversion版本库做一个镜像。这个脚本支持通过ssh和svn工具来发送修改到其他版本库或从其他版本库获取最新的修改。

xslt

svnindex.xsl (tools/xslt)

当使用"SVNIndexXSLT"的时候,mod_dav_svn将会生成一张转换风格的XML表单,用来显示subversion的目录列表。

相关文件: svnindex.css