版本控制中的分支/标签/中继

时间:2016-07-26 07:46:27

标签: svn version-control

我过去两天一直在研究svn,并希望确保我理解我的东西,并对该计划也有一些疑问。如果我在这里错了,请纠正我:

Trunk:发展的主体。包含每个版本:从开始到现在。

分支:此文件通常包含多个子文件夹,例如错误修复分支或发布分支。它们包含来自主干中某个点的文件,用于对代码进行重大更改。

标签:您希望保留的行李箱或分支上的时间点。例如,版本2比版本3更稳定,因此决定将其保存在标签中。

问题:

1)我对这三个陈述是对的吗?

2)分支和标签看起来非常相似。为什么我们不是只有一个单独的分支来保留标签版本?

3)当一个人检查一个项目时,他通常会开始使用trunk,branch或tags版本?

4)为什么人们更喜欢这个框架?我个人认为有三个文件夹使它更分散。一个例子是首选。感谢

2 个答案:

答案 0 :(得分:1)

您必须了解的主要观点是,主干/分支/标签只是您可以自由使用或不使用的建议布局。虽然它是事实上的标准,但强烈建议您在某些情况下可以使用修改后的版本,甚至根本不使用它。这一切都来自于设计决策。其他版本控制工具提供了分支和标记的内置功能,但Subversion没有。相反,他们倾向于让用户使用目录模拟这些功能,并利用廉价副本概念。

简而言之:您可以自由地使用分支和标签,但是,如果您选择,您必须使用目录,因为没有其他方法并坚持标准允许第三方自动了解您正在做什么(包括像开发人员和像TortoiseSVN这样的GUI工具的人。

关于你的问题:

  1. 一些澄清:

    • 主要发展是一种受欢迎的选择,但不是唯一可行的选择。它也可以是稳定的版本或任何你需要的版本。

    • Trunk不包含每个版本(存储库)。 Trunk包含提交到trunk的版本,就像任何其他目录一样。

  2. 保留标签版本的单独分支?然后你如何从标签(快照)告诉分支(实时)?

  3. 您永远不会在标签中工作,标签是不应更改的快照。关于主干/分支,它取决于它们包含的内容。

  4. 我怀疑您的项目没有版本,因此您没有找到有用的分支和标签。但是迟早你会想要启动一个需要很长时间才能完成的功能,并且会在代码库完成之前打破它。由于Subversions是一个集中版本控制系统,因此您只有两个选项:

    1. 功能分支
    2. 在完成之前不要使用版本控制
  5. 实施例

    trunk -> Work in progress for next version (2.0.2 or 2.1.0, to be decided)
    branches
        legacy-1.0.x
        legacy-1.1.x
        legacy-1.2.x
        legacy-2.0.x
        new-memory-management
        storage-optimizations
    tags
        1.0.0
        1.0.1
        1.1.0
        1.2.0
        2.0.0-beta1
        2.0.0-beta2
        2.0.0
        2.0.1
    

答案 1 :(得分:-1)

  1. 他们非常相似。它们完全相同。您将ttags放在标签下以清楚标明它们是否为标签,因此您不应对这些副本进行修改。您还可以应用标记和分支的不同权限,以避免标记被写入。您可以将标记视为只读分支。
  2. 这取决于你决定工作的方式。有些人专门在行李箱里工作。其他一些专门用于功能分支并保持行李箱稳定。免费的颠覆书IIRC讨论了几种选择。
  3. 因为它是传统的。并不是说您不必在本地检查所有内容。您可以简单地使用主干或您当前正在处理的分支,并使用单个工作副本从分支切换到分支。
  4. 但是,如果我是你,我会问自己的主要问题是:首先学习SVN是个好主意吗?现在大多数人都使用Git或其他DVCS来更轻松,更快地处理分支。

    如果我是你,我会学习git。