添加项目

一旦你创建和配置了资料库,接下来就是开始使用它。如果你已经有一组现成的数据准备置于版本控制之下,那么你更可能用 svn客户程序的import子命令来完成这个任务。但是在这么做之前,你应该仔细考虑你资料库的 长期使用计划。在本节,我们将提供一些建议,关于如何计划你的资料库布局以及如果在这样的布局里安排你的数据。

选择资料库布局

虽然Subversion允许你移动版本化文件和目录而不会丢失任何信息,但是这么做还是会扰乱用户的工作流程,他们要经常访问资料库并 到某些位置来找期望的东西。尝试预测一下将来;在把你的数据置于版本控制之下前先作计划。通过在一开始就 把你的资料库内容用 一种有高效的方式来“布置”,你可以避免许多将来的麻烦。

在设置Subversion资料库是有几件事情要考虑。让我们假设,作为资料库管理员,你要负责对几个项目提供版本控制系统。首先要决定的是 是对多个项目使用一个资料库,还是给每个项目设置自己的资料库,或者混合使用这两种方式。

对多个项目使用同一个资料库有些好处,最明显的是不需要重复的维护。单个资料库意味着只有一套钩子脚本,只有一个东西要例行备份, 如果Subversion发行了一个不兼容的新版本只有一个东西要转储和加载。并且,你可以很容易的在项目之间移动数据,而不会丢失任何历史 版本信息。

使用单个资料库的不利之处在于不同的项目可能有不同的提交邮件列表或不同的认证和授权的需求。并且,某些人们可能不喜欢这样的事实, 即使最近他们的项目没有修改,资料库的最新的修订版号码仍然继续攀升,因为其他项目在积极添加新的修订版。

也可以采取一种中庸之道。例如,可以根据项目之间如何互相联系来把它们分组。你可能有几个资料库,每个资料库里都有几个项目。 用这种方式,那些可能要共享数据的项目可以很容易的做到,并且当新修订版被加到资料库时,至少开发人员知道这些新修订版多少都和 使用这个资料库的每个人有点关系。

在决定了如何对于资料库组织你的项目后,你可能要考虑在资料库本身里的目录层次。因为Subversion使用常规的目录复制来做分支和 标签(参加第 4 章 分支和合并),Subversion社区推荐为每个项目根目录——包含项目相关数据的 “最顶层”目录——选择一个资料库位置,然后在根目录下创建三个子目录:trunk,表明这个目录 下会进行主要的项目开发;branches,在这个目录里创建主开发线的不同名字的分支;tags 在这个目录里创建的分支可能会删除,但永不会修改。

例如,你的资料库可能看上去像:

/
   calc/
      trunk/
      tags/
      branches/
   calendar/
      trunk/
      tags/
      branches/
   spreadsheet/
      trunk/
      tags/
      branches/
   …

注意项目根目录位于你资料库中哪里都没有关系。如果你资料库里只有一个目录,那么放置项目根目录的合理的地方就是每个项目对应的资料库的根目录。如果你有多个项目,你可能想把他们在资料库里分组安排,可能把有相似目的或共享代码的项目放在相同的子目录,或者 可能只是通过字母顺序分组。这种安排可能看来像:

/
   utils/
      calc/
         trunk/
         tags/
         branches/
      calendar/
         trunk/
         tags/
         branches/
      …
   office/
      spreadsheet/
         trunk/
         tags/
         branches/
      …

用任何你觉得舒服的方式布置你的资料库。Subversion不预期或强制某种布局模式——在它眼里,目录就是目录。 最重要的是,你应该选择那种能满足那些工作在资料库中目录上的人们的需要的资料库布置。

创建布局,并导入初始数据

在决定了如何在料库中安排项目后,你可能要用这样的布局和初始的项目数据来实际初始化资料库。在Subversion中有几个办法可以做这个 。你可以用svn mkdir命令(参见???)来在资料骨架布局上一个一个的创建每个目录。完成同样任务的较快的办法是使用svn import 命令(参见svn import”一节)。通过首先在你驱动器的临时位置创建这个布局,你可以用一次提交来导入整个布局树。

$ mkdir tmpdir
$ cd tmpdir
$ mkdir projectA
$ mkdir projectA/trunk
$ mkdir projectA/branches
$ mkdir projectA/tags
$ mkdir projectB
$ mkdir projectB/trunk
$ mkdir projectB/branches
$ mkdir projectB/tags
…
$ svn import . file:///path/to/repos --message 'Initial repository layout'
Adding         projectA
Adding         projectA/trunk
Adding         projectA/branches
Adding         projectA/tags
Adding         projectB
Adding         projectB/trunk
Adding         projectB/branches
Adding         projectB/tags
…
Committed revision 1.
$ cd ..
$ rm -rf tmpdir
$

你可以通过运行svn list命令来验证导入的结果:

$ svn list --verbose file:///path/to/repos
      1 harry               May 08 21:48 projectA/
      1 harry               May 08 21:48 projectB/
…
$

一旦有了框架布局,如果已经有了实际的项目数据的话,你可以开始把这些数据导入资料库。同样,也有几种办法可用。你可以 用svn import命令。你可以从你的新资料库检出一个工作副本,在工作副本里移动或安排项目数据,并使用 svn addsvn commit命令。但是一旦你开始谈到这样的事情,我们已经不是在讨论资料库管理了。如果你还不熟悉svn客户程序,参见第 3 章 使用指南