3

刚刚从视觉工作室转移到颠覆...... 我已经爱上了!有人可以简要解释一下

  1. 存储库
  2. 分支机构
  3. 标签
  4. 树干

我需要为每个项目创建一个新的存储库吗?还是新的后备箱?

谢谢

4

5 回答 5

13

您不需要单独的存储库,但如果您愿意,可以。我建议在http://svnbook.red-bean.com/上阅读这本书。获取 pdf 版本或其他任何内容。时间不长,也很好的解释了一些事情。我读了它,发现我很高兴我读了。

于 2009-02-06T02:22:43.143 回答
13

请记住,subversion 只是一个支持版本控制的精美文件系统。将存储库视为“驱动器根”,如“C:/”。

每个项目都有一个主干、标签和分支目录。您所有的日常工作都在后备箱中进行。实验代码在一个分支中完成,然后在以后合并回主干。标签用于发布软件时。这些不能被编辑。当您发布软件时,您会根据当前主干中的内容创建一个具有唯一名称的标签。

我不能说每个项目是否需要一个单独的存储库,这有利有弊。这篇博文详细介绍了它们:

  1. 简化管理。一组要部署的钩子。一个要备份的存储库。等等
  2. 分支/标签的灵活性。将代码全部放在一个存储库中,可以更轻松地创建涉及多个项目的分支或标签。
  3. 轻松移动代码。也许您想从一个项目中提取一段代码并在另一个项目中使用它,或者将其转换为多个项目的库。在同一存储库中移动代码并保留该过程中代码的历史记录很容易。

以下是单存储库方法的一些缺点,多存储库方法的优点。

  1. 尺寸。处理许多较小的存储库可能比处理一个大存储库更容易。例如,如果您停用一个项目,您只需将存储库存档到媒体并将其从磁盘中删除并释放存储空间。也许您出于某种原因需要转储/加载存储库,例如利用新的 Subversion 功能。如果它是一个较小的存储库,这更容易做到并且影响更小。即使您最终想要对所有存储库执行此操作,如果没有迫切需要一次执行所有存储库,一次执行一个存储库的影响也会较小。
  2. 全局修订号。尽管这不应该是一个问题,但有些人认为它是一个问题,并且不喜欢看到存储库上的修订号提前,并且不活动的项目在其修订历史记录中有很大的差距。
  3. 访问控制。虽然 Subversion 的 authz 机制允许您根据需要限制对存储库部分的访问,但在存储库级别执行此操作仍然更容易。如果您有一个只有少数人可以访问的项目,则使用该项目的单个存储库更容易做到这一点。
  4. 行政灵活性。如果您有多个存储库,那么根据存储库/项目的需要实现不同的钩子脚本会更容易。如果您想要统一的钩子脚本,那么单个存储库可能会更好,但是如果每个项目都想要自己的提交电子邮件样式,那么将这些项目放在单独的存储库中会更容易
于 2009-02-06T02:23:45.620 回答
7

我同意,阅读svnbook。这是一个很好的资源。

我需要为每个项目创建一个新的存储库吗?还是新的后备箱?

Kevin 很好地涵盖了单个/多个存储库的权衡。当我们开始使用 svn 时,我们为所有开发项目使用了一个存储库。它运作良好,并具有提到的所有优点。但是,随着存储库变得越来越大,由于转储文件的大小以及备份期间产生的问题,它变得更加难以管理。项目不能轻易地从存储库中归档也成为一个问题——这当然是可能的,但它需要从存储库中转储和拉出项目。它们不是您无法解决的问题,但需要牢记。

  1. 存储库
  2. 分支机构
  3. 标签
  4. 树干

分支、标签和主干只是存储库中包含的文件的副本。它允许您在您认为合适的任何时间(通常在发布或功能分支)隔离和检查您的文件。

关于分支、标签和主干要记住的重要一点是它们只是 svn 中的约定。这三个位置之间在功能上没有区别,它们只是一种公认​​的使用模型,如果你有充分的理由,它们可以改变或组织不同。我不建议您以不同的方式组织,但您会发现 svn 非常灵活,因为除了约定之外没有真正的强制组织结构。

根据您决定在存储库中拥有多少项目,您可能会进行不同的组织。

您可以拥有包含项目的子目录:

\repo
  \branches
    \...
  \tags
    \...
  \trunk
    \..

或者您可以让项目包含子目录:

\repo
  \Project1
    \branches
    \tags
    \trunk
  \Project2
    \branches
    \tags
    \trunk

svnbook 中涵盖了权衡取舍。如果每个存储库只有一个项目,则通常使用第一种方法,如果存储库中有多个项目,则通常使用第二种方法。

好消息是你可以开始使用 svn,然后找出你喜欢的东西。您应该有某种组织方式,但使用便宜的副本,您可以随时根据情况或工作流程的变化重新排列文件夹。

于 2009-02-06T03:54:38.200 回答
3

与 CVS 或 Git 等其他版本控制系统相比,SVN 需要记住的重要一点是,SVN 没有真正的概念、分支或标记。就 SVN 而言,它只是一堆文件夹和文件。因此,虽然您会看到很多人使用分支/标签/主干设置,但这不是必需的,如果您愿意,您可以偏离此设置。

一般来说,“主干”是您保持积极发展的地方。所以这是你做所有提交的地方。您是否结帐主干或使用标签/分支完全取决于您。

正如我使用的那样,分支通常用于您需要对应用程序进行较大更改但不希望它们在主干中,因为您希望能够在不部署其他更改的情况下继续针对主干进行开发。在这种情况下,您可能会有类似

\repo
  \trunk
  \branches
    \version_two

在这种情况下,您可以分别在trunk 和version_two 中进行开发,并且假设您的实时站点是对trunk 的检出​​,您不必担心“意外”会因您的其他更改而破坏您的实时站点。当这些更改完成并准备就绪时,您只需随时将它们合并回主干即可。

标签可以与分支类似地使用,而不是检查主干并仅使用'svn up'来更新您的存储库,而不是几个标签,每个标签代表一个版本。所以你的回购可能看起来像

/repo
  /trunk
  /branch
    /version_one
    /version_two
  /tags
    /1.0.0
    /1.0.1
    /1.1.0

在这种情况下,一般的想法是,当您准备好进行部署时,您会执行

svn copy

将主干复制到标签(在这种情况下,下一个可能是 1.1.1、1.2.0、2.0.0 等)。但是,如何命名标签完全取决于您,并且再次取决于您的项目和要求。使用这条路线而不是执行常规的“svn up”,您将不得不进行 svn 切换。所以你必须部署

svn switch https://svn.yourrepo.com/repo/tags/1.1.0

交换机会自动对相应的文件进行更新、添加和删除。

当涉及到多个项目的一个 repo 或每个项目的单独 repo 时,我提倡每个项目一个 repo。它提供了轻松管理对它的访问的额外好处。但最重要的是,这意味着每个项目都有单独的提交历史和单独的日志。这米

于 2009-02-06T04:19:46.790 回答
2

阅读您的标签我看到您开始使用 VisualSVN 而不是旧的 VSS 系统。(您的问题是您停止使用 Visual Studio .. 这使 VisualSVN 成为一个奇怪的选择)。

SourceSafe 和 VSS 之间的主要区别之一是您可以选择不同的工具来访问同一个存储库(并且您可以随时切换,因为它们都共享同一个工作副本)。

例如:

于 2009-02-06T10:44:45.360 回答