Subversion简介

Subversion 

Subversion 是一个 免费/开源 的 版本控制系统 (version control system, 简称 VCS), 也就是说, Subversion 可以跨越时间对文件和目录, 以及它们的修改进行管理. 这就允许你恢复 数据的旧版本, 或检查数据的修改历史. 

 Subversion 的架构

 

 

基本工作周期

Subversion 支持的特性与选项非常丰富, 但是能够在日常工作中用到的却很 少. 日常工作中最常用到的 Subversion 操作.

典型的工作周期就像:

  1. 更新工作副本. 这会用到命令 svn update.

  2. 修改.最常见的修改就是编辑已有文件的内容, 但有时还要添加, 删除, 复制和移动文件或目录 — 命令 svn add, svn delete, svn copy 和 svn move 负责 处理工作副本的结构性调整.

  3. 审核修改. 用命令 svn status 和 svn diff 查看工作副本发生了哪些变化.

  4. 修正错误. 人无完人, 在审核修改时用户可 能会发现某些修改是不正确的. 有时候修正错误最简单的方式是撤消所有的 修改, 重新开始. 命令 svn revert 可以把文件或目 录恢复到修改前的样子.

  5. 解决冲突 (合并其他人的修改). 当一个用户 正在修改文件时, 其他人可能已经把自己的修改提交到了服务器上. 为了防止 在提交修改时, 由于工作副本过旧导致提交失败, 用户需要把其他人的修改 更新到本地, 用到的命令是 svn update. 如果命令 的执行结果有冲突产生, 用户需要用命令 svn resolve 解决冲突.

  6. 发布 (提交) 修改. 命令 svn commit 把工作副本的修改提交到仓库中, 如果修改 被接受, 其他用户就可以看到这些修改.

 

基本用法:

出去上面那些,还有一下比较常用的如下:

在版本库目录下:  svn   +   help ,  import , list , checkout , status , log , cat , annonate , lock , changelist , copy , merge .


 

仓库的定义

如果站在文件浏览器 (例如 Windows 资源管理器) 或基于命令行的文件 系统导航工具来看, Subversion 仓库只是一个包含了众多数据的普通目录, 其中一些子目录包含了人类可读的配置文件, 还有些子目录包含的是人类不可 读的文件. 

基本组件:

# ls
conf db format hooks locks README.txt

 conf/   存放配置文件的目录

db/  该目录包含了与所有版本化数据相关的数据

format  该文件描述了仓库的内部组织结构. (目录 db/ 有时候也会有一个叫做 format 的文件, 这个 format 仅仅是在描述 db/ 的内容, 这两个 format 之间并没有关系.)

hooks/  该目录包含了钩子脚本模板和已安装的钩子脚本.

locks/  Subversion 用该目录存放仓库的锁文件, 锁文件用于管理仓库的并发 访问.

README.txt  包含了一小段内容的文本文件, 文件的内容仅仅是为了提醒计算机 用户该文件所在的目录是一个 Subversion 仓库.

创建仓库

创建 Subversion 仓库是一件非常简单的工作, 用到的命令是 svnadmin create.

$ # Create a repository
$ svnadmin create /var/svn/repos
$

假设父目录 /var/svn 已存在, 并且管理员对父 目录拥有写权限, 上面的命令在 /var/svn/repos 创建了一个新的仓库, 使用的是默认的后端存储类型 (FSFS). 你还可以利用 选项 --fs-type 显式地指定后端存储类型, 该选项接受 的参数是 fsfs 或 bdb.

$ # Create an FSFS-backed repository
$ svnadmin create --fs-type fsfs /var/svn/repos
$
# Create a legacy Berkeley-DB-backed repository
$ svnadmin create --fs-type bdb /var/svn/repos

使用 svnadmin 迁移仓库数据

无论迁移仓库历史是出于什么样的原因, svnadmin dump 和 svnadmin load 的用法都非常 简单直接. svnadmin dump 按照 Subversion 的文件 系统转储格式, 输出一段范围内的版本号. 转储的结果会被打印到标准输出, 而提示性的信息则会打印到标准错误, 这就允许管理员把输出重定向到文件 的同时, 在终端窗口中查看命令的状态输出, 例如:

$ svnlook youngest myrepos
26
$ svnadmin dump myrepos > dumpfile
* Dumped revision 0.
* Dumped revision 1.
* Dumped revision 2.
…

命令执行结束时, 你将得到一个文件 (在上面的例子里, 文件名是 dumpfile), 这个文件包含了在指定的版本号范围 内, 存放在仓库中的所有数据. 因为 svnadmin dump 从仓库中读取版本号的过程和其他 读者” (例如 svn checkout) 读取仓库的过程是一样的, 所以 可以在任意时刻, 安全地执行 svnadmin dump.

与 svnadmin dump 配对的命令 svnadmin load 从标准输入读取 Subversion 仓库的转储文件, 把文件中 的版本号重放到目标仓库中. 在命令的执行过程中仍然会输出提示性的信息, 不过这次是打印到标准输出:

$ svnadmin load newrepos < dumpfile
<<< Started new txn, based on original revision 1
     * adding path : A ... done.
     * adding path : A/B ... done.
     …

仓库备份

对于 Subversion 仓库管理员来说, 有两种备份策略—全量备份与 增量备份.

$ svnadmin hotcopy /var/svn/repos /var/svn/repos-backup

得到的备份是一个完整的 Subversion 仓库, 能够在原仓库出现故障时 顶替上去.

移动与删除仓库

Subversion 仓库的所有数据都存放在仓库目录中, 所以说管理员可以使用 操作系统提供的命令—Unix 系统的 mv, cp -a, rm -r; Windows 系统的 move, copy, rmdir /s /q; 或其他图形化文件浏览器提供的鼠标和菜单操作— 实现仓库的移动, 重命名, 复制和删除.

 


 

版本库维护

svnadmin程序除了提供创建Subversion版本库的功能,这个程序使你可以维护这些版本库。

# svnadmin help
general usage: svnadmin SUBCOMMAND REPOS_PATH  [ARGS & OPTIONS ...]
Type 'svnadmin help <subcommand>' for help on a specific subcommand.
Type 'svnadmin --version' to see the program version and FS modules.

Available subcommands:
   crashtest
   create
   deltify
   dump
   help (?, h)
   hotcopy
   list-dblogs
   list-unused-dblogs
   load
   lslocks
   lstxns
   pack
   recover
   rmlocks
   rmtxns
   setlog
   setrevprop
   setuuid
   upgrade
   verify

svnlook是Subversion提供的用来查看版本库中不同的修订版本和事务(正在产生的修订版本)。这个程序不会修改版本库内容-这是个“只读”的工具。

# svnlook help
general usage: svnlook SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...]
Note: any subcommand which takes the '--revision' and '--transaction'
      options will, if invoked without one of those options, act on
      the repository's youngest revision.
Type 'svnlook help <subcommand>' for help on a specific subcommand.
Type 'svnlook --version' to see the program version and FS modules.

Available subcommands:
   author
   cat
   changed
   date
   diff
   dirs-changed
   filesize
   help (?, h)
   history
   info
   lock
   log
   propget (pget, pg)
   proplist (plist, pl)
   tree
   uuid
   youngest

 

posted @ 2019-09-27 18:35  Justtosee  阅读(1353)  评论(0编辑  收藏  举报