颠覆结构问题

时间:2009-02-06 02:16:54

标签: visual-studio svn visualsvn

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

  1. 存储库
  2. 分行
  3. 标签
  4. 中继线
  5. 我是否需要为每个项目创建一个新的存储库?还是一个新的主干?

    由于

5 个答案:

答案 0 :(得分:13)

您不需要单独的存储库,但如果需要,也可以。我建议您在http://svnbook.red-bean.com/阅读本书。抓住pdf版本或其他任何东西。它不需要太长时间,它可以很好地解释一些事情。我读了它,发现我很高兴我做到了。

答案 1 :(得分:13)

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

每个项目都有一个trunk,tags和branches目录。你的所有日常工作都发生在后备箱里。实验代码在分支中完成,然后在以后合并回主干。标签适用于您发布软件时。这些要编辑。当您发布软件时,您可以根据当前在主干中的内容创建一个具有唯一名称的标签。

我不能说你是否需要为每个项目提供一个单独的存储库,有利有弊。这个blog posting详细说明了它们:

  
      
  1. 简化管理。部署一组钩子。一个存储库   备份。等
  2.   
  3. 分支/标签的灵活性。将代码全部放在一个存储库中就可以实现   更容易创建分支或标记   涉及多个项目。
  4.   
  5. 轻松移动代码。也许你想从中获取一段代码   一个项目,并在另一个项目中使用它,或   把它变成了几个库   项目。移动代码很容易   在同一个存储库中并保留   代码的历史   过程
  6.         

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

         
        
    1. 尺寸。处理许多较小的存储库可能比处理更容易   一个大的。例如,如果你   退休您可以归档的项目   存储库到媒体并删除它   从磁盘和释放存储。   也许你需要转储/加载一个   存储库出于某种原因,例如   利用新的Subversion   特征。这样做更容易   如果它更小,影响更小   库。即使你最终   我想对你们所有人这样做   存储库,它将产生较小的影响   假设,一次做一个   没有迫切的需要做   他们一下子。
    2.   
    3. 全球修订号。尽管这应该不是问题,   有些人认为它是一个和   不喜欢看版本号   推进存储库和   不活跃的项目存在较大差距   在他们的修订历史中。
    4.   
    5. 访问控制。而Subversion的authz机制允许   您可以根据需要限制访问   存储库的一部分,它仍然是   在存储库中更容易做到这一点   水平。如果您只有一个项目   少数几个人应该   访问,这更容易做到   该项目的单一存储库。
    6.   
    7. 行政灵活性。如果你有多个存储库,那么   实现不同更容易   根据需要挂钩脚本   资料库/项目。如果你想   统一钩子脚本,然后单个   存储库可能更好,但如果   每个项目都需要自己的提交   电子邮件风格然后更容易拥有   那些项目是分开的   存储库
    8.   

答案 2 :(得分:7)

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

  

我是否需要为每个项目创建一个新的存储库?还是一个新的主干?

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

  
      
  1. 存储库
  2.   
  3. 分行
  4.   
  5. 标签
  6.   
  7. 中继线
  8.   

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

关于分支,标签和主干的重要一点是它们只是svn中的约定。这三个位置之间没有功能差异,它们只是一种可接受的使用模式,如果您有充分的理由,它们可以进行不同的更改或组织。我不建议你组织不同,但你会发现svn非常灵活,因为除了惯例之外,实际上没有强制的组织结构。

根据您决定在存储库中拥有的项目数量,您可以采用不同的方式进行组织。

您可以在子目录下包含项目:

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

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

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

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

好消息是你可以开始使用svn然后弄清楚你喜欢什么。您应该有某种组织,但是,通过廉价的副本,您可以随着情况或工作流程的变化重新安排文件夹。

答案 3 :(得分:3)

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

一般来说,“主干”是您保持活跃发展的地方。所以这就是你做所有提交的地方。无论您是否结帐后备箱或使用标签/分支机构都取决于您。

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

的内容
\repo
  \trunk
  \branches
    \version_two

在这种情况下,您可以分别在trunk和version_two中进行开发,假设您的实时站点是中继的结帐,您无需担心“意外”使您的其他更改破坏您的实际站点。当这些更改完成并准备好后,您可以随时将它们合并回主干。

标签可以类似于分支使用,因为它不是检查主干而只是使用'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

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

当谈到许多项目的一个回购或每个项目的单独回购时,我是每个项目一个回购的拥护者。它提供了轻松管理对其的访问的额外好处。但最重要的是,这意味着每个项目都有一个单独的提交历史记录和单独的日志。这个m

答案 4 :(得分:2)

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

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

E.g: