导入数据到版本库

导入

如果将项目导入一个已经含有其它项目的版本库中,那么版本库的结构已经确定了。如果要导入一个新的版本库中,那么最好花点时间来想一下如何设置版本库的结构。阅读 “版本库布局”一节

这部分描述了Subversion 导入命令,它被设计用于一次性导入一个文件夹的层次结构到版本库中。尽管它能完成这个工作,但是它还是有不少缺点:

  • 不能选择包括哪些文件或文件夹,除非使用全局忽略设置。

  • 导入的文件夹不能变成工作副本。你必须通过签出操作从服务器拿回文件。

  • 很容易导入到版本库中错误的文件夹层次。

基于此,我们推荐你不要使用导入命令,而是按照“导入适当的位置”一节

在将你的项目导入到版本库之前,你应该:

  • 删除所有构建工程不需要的文件(临时文件,编译器产生的文件,例如 *.obj,生成的二进制文件,…)

  • 组织目录和子目录内的文件。尽管以后可以改名/删除文件,我们还是建议你在导入之前使你的项目结构组织良好!

现在进入资源管理器,选择你的项目的顶层目录,右击打开上下文菜单。选择命令TortoiseSVN → 导入 …,它会弹出一个对话框:

图 4.6. 导入对话框

导入对话框

在这个对话框中,需要输入你需要导入的版本库所在的 URL。,你必须了解非常重要的事项: 你要导入的本地文件夹本身不会出现在版本库中,只有文件夹中的内容。例如,你有这样的文件夹结构:

  1. C:\Projects\Widget\source
  2. C:\Projects\Widget\doc
  3. C:\Projects\Widget\images

你将 C:\Projects\Widget 导入到 http://mydomain.com/svn/trunk,然后你会惊奇的发现: 你的子目录直接进入 trunk 中,而不是在 Widget 的子目录中。你需要将子目录作为 URL 的一部分明确的指出来,http://mydomain.com/svn/trunk/Widget\-X。注意,如果版本库中不存在指定的子目录,导入命令将会自动创建它们。

这个输入信息将用作提交日志。

默认情况下,匹配全局忽略模式的文件和文件夹不会被导入。你可以使用包含忽略文件检验栏来禁止此行为。参考“常规设置”一节

当你点击确认时,TortoiseSVN 会导入包含所有文件的完整目录树到版本库。现在这个工程就存贮在版本库,被版本控制。请注意,你导入的文件夹没有被版本控制!你需要检出刚才导入的版本,以便获得受版本控制的工作副本。或者继续阅读,找到如何导入文件夹到合适的位置。

导入适当的位置

假定你已经有个版本库,你想给它增加一个新目录结构,只需以下步骤:

  • 使用版本库浏览器来在版本库中直接创建新项目。如果有在使用标准布局的话,你可能想要创建主干的子文件夹而不是版本库的根目录。版本库浏览器按Windows资源管理器的结构显示,所以你可以看到文件是如何组织的。

  • 在你要导入的文件夹检出新目录。你会得到一个本地文件夹为空的警告。忽视警告。现在你有一个版本控制的顶级目录,其中含有未版本控制的内容。

  • 在此受版本控制的文件夹上使用TortoiseSVN → 增加…增加部分或全部内容。你可以增加或删除文件,在文件夹上设置svn:ignore属性,或者你需要的其它修改。

  • 提交顶级目录,你有一个新的版本树,一份从你已有目录创建的本地工作副本。

专用文件

有时候你需要版本控制一个包含用户专用的数据。它意味着你有一个文件,每个开发者/用户都需要修改,一边满足他/她的本地配置。但是版本控制这样的文件是困难的,因为每个用户可能都要提交他/她的修改。

在这种情况下,我们建议使用模版文件。创建一个包含所有开发者需要的数据的文件,增加到版本库中,让开发者检出。然后,每个开发者创建一个副本,改名此文件。于是,修改这个文件不再是问题。

举个例子,你可以看看TortoiseSVN的构建脚本。它调用一个不在版本库中的TortoiseVars.bat文件 。 只有TortoiseVars.tmpl在版本库中。TortoiseVars.tmpl是一个模版文件,每个开发者都需要用模板创建一个副本,并重命名为TortoiseVars.bat。在这个文件中,我们增加了注释,以便用户根据他们的本地设置,知道那些行他们需要编辑,来让它正常工作。

为了不干扰用户,我们也将default.build.user增加到它父目录的忽略列表,也就是,我们设置了Subversion属性svn:ignore来包含这个文件名称。这样,每次提交时它都不会作为没有版本控制的文件出现。