跳转到内容

Subversion/基本使用指南

来自维基教科书,开放的书籍,开放的世界

Subversion (SVN) 是由 CollabNet Inc. 于 2000 年启动的版本控制系统。它可以帮助您跟踪文件和目录更改的历史记录。通常,一个 Subversion 存储库由一个社区的人员使用。存储库是一个集中式数据存储,人们通常在本地进行更改,然后将更改发布(“签入”或“提交”,这些都是此过程的同义词)到存储库。因此,他们在本地机器上的内容是**工作副本** - 存储库子树的副本(或者可能是整个树的副本)

Working Copy Sample
工作副本示例

Subversion 的机制不同于其著名的前身 CVS 的机制。让我们看看如何在服务器上存档连续提交


首先,用户将文件和目录导入到服务器。所有文件和目录都在发布(或修订)1。

First commit
第一次提交


然后,用户提交一些更改。只有文件 fil1 和 fil3 包含修改,因此只有这些项目被提交。两者都在修订版 2 中提交。如果我们想要将所有文件检索到最新的修订版,我们将拥有修订版 2 的文件,或者如果不存在,则拥有最新的先前修订版(即 1)的文件。

Second commit
第二次提交


对于发布版 3 的提交,只有文件 fil3 和 fil4 有更改。请注意,文件 fil4 没有修订版 2。

Third commit
第三次提交


文件 fil2 和 fil3 被提交。

Fourth commit
第四次提交


添加了一个文件:fil5。直到发布版 5 之前,该文件都没有版本。

Fifth commit
第五次提交


添加了一个目录:rep5。

Sixth commit
第六次提交


当用户将本地文件更新到旧的发布版(例如发布版 4)时,Subversion 将发送发布版 4 的每个文件或目录,或者如果不存在,则发送最后一个之前的文件或目录。

An update to an old revision
更新到旧版本

如何使用 JavaSVN 与 Subversion

[编辑 | 编辑源代码]

因此,有一个名为存储库的版本化数据的服务器端存储,以及访问该存储库的客户端。JavaSVN 是

  • 客户端库。
  • 它提供 API 用于不需要存储库的本地操作,并且仅与工作副本有关,以及用于直接与存储库交互的 API。
  • 同时,最新版本的 JavaSVN 提供了一些额外的功能:它可以创建本地存储库,复制(在文件系统中复制)现有存储库等。
  • 配置起来非常灵活。

不幸的是,工作副本 (WC) 格式限制用户只能操作文件和目录。JavaSVN 帮助解决此限制,它提供两种不同级别的引擎:一个高层引擎,用于操作工作副本(如 svn.exe),以及一个低层引擎,它是 Subversion 协议的实现。两者都提供相应的 API。低层引擎实际上是一个驱动程序,用于直接与 Subversion 存储库交互,而高层引擎在操作真正需要访问存储库时使用该低层引擎。

常见任务

[编辑 | 编辑源代码]

回滚到之前的版本

[编辑 | 编辑源代码]
   alias revertfile='read revertfile?"What file do you want to revert?"'
   alias revertrev='read revertrev?"What revision do you want to revert to?"'
   alias svnrevert='revertfile; revertrev; svn up $revertfile -r$revertrev; mv $revertfile foo; svn up; mv foo $revertfile;'

底层引擎

[编辑 | 编辑源代码]

如上所述,低层引擎是一个特定于协议的驱动程序,用于直接与存储库交互。高层引擎可能并非使用此类驱动程序的唯一引擎,它只是一个标准场景。例如,可能有一些开发人员使用与文件和目录截然不同的抽象。他们也希望将他们的对象置于版本控制之下,但如何做到呢?使用工作副本的标准方法在这里不适用,因为它基于目录和文件的树。

华夏公益教科书