Subversion 中的主干、分支和标签是啥? [复制]

Posted

技术标签:

【中文标题】Subversion 中的主干、分支和标签是啥? [复制]【英文标题】:What is trunk, branch and tag in Subversion? [duplicate]Subversion 中的主干、分支和标签是什么? [复制] 【发布时间】:2010-10-16 10:43:24 【问题描述】:

可能重复:What do “branch”, “tag” and “trunk” really mean?

什么是 Subversion 中的主干、分支和标签,使用它们的最佳实践是什么?

Visual Studio 2008 中的 Subversion 可以使用哪些工具?

【问题讨论】:

...结合:***.com/questions/453481/… ***.com/questions/16142: "What do “branch”, “tag” and “trunk” really mean?". 【参考方案1】:

主干是 SVN 存储库中开发的主线。

分支是开发的一个副线,用于在不惹恼主干版本用户的情况下进行更大的、实验性的或破坏性的工作。此外,分支可用于为同一产品的多个版本创建开发线,例如将错误修复反向移植到稳定版本中。

最后,标签是用来突出存储库历史中显着修订的标记,通常是“这是作为 1.0 发布的”。

请参阅“Version Control with Subversion”的 html 版本,尤其是 Chapter 4: Branching and Merging 或以纸质形式购买(例如来自 amazon),以深入讨论技术细节。

与其他人(例如下面的 Peter Neubauer)一样,作为 /tags /branches/trunk 目录的底层实现仅是 conventional 并且不以任何方式由工具强制执行。违反这些约定会导致混乱,因为这会破坏其他人访问存储库的习惯和期望。必须特别注意避免将新更改提交到标签中,这些更改应该被冻结。


我使用TortoiseSVN,但没有集成 Visual Studio。我一直在第二台显示器上打开“检查修改”对话框,这样我就可以跟踪我接触了哪些文件。但请参阅“Best SVN Tools”问题,了解更多建议。

【讨论】:

我猜 ankh 对我来说是最好的。我几乎可以在 Visual Studio 中做任何事情。谢谢!!! 从根本上说,@Peter-Neubauer 和 KOGI(下)提供的答案可以说更接近真实。正如他们所指出的,David Schmitt 在这里的回答只是解释了这些目录通常如何使用的约定——但实际上这些文件夹本身或它们的使用方式并没有什么神奇之处.感谢 David Schmitt,但感谢其他人 +1 描述了这一关键差异。 “可以说”OP 询问了最佳实践,而不是那些(恕我直言非常薄弱的​​)实施。 我的一分钱值得在这里添加;到目前为止,我对违反此约定的存储库遇到的唯一麻烦是当我尝试使用 svn-git 将存储库导入 git 时。如果分支形成不当,它只是不喜欢它。所以总结是,当涉及到像 svn-git 之类的工具(您将来可能必须使用)时,它们将被调整为针对遵循这些约定的 repo 工作,并且可能拒绝正常/有用地运行。 【参考方案2】:

“trunk”、“branches”和“tags”目录是 Subversion 中的约定。 Subversion 不需要您拥有这些目录,也不需要为它们指定特殊含义。但是,这种约定非常普遍,除非您有充分的理由,否则您应该遵守约定。其他读者提供的书籍链接描述了约定以及如何使用它。

【讨论】:

【参考方案3】:

David Schmitt 的回答很好地总结了一切,但我认为重要的是要注意,对于 SVN,术语“分支”、“标签”和“主干”没有任何意义。这些术语纯粹是语义性的,只会影响我们作为系统用户处理这些目录的方式。人们可以轻松地将它们命名为“主要”、“测试”和“发布”。只要使用该系统的每个人都了解如何正确使用每个部分,它们的名称并不重要。

【讨论】:

是的,这是真的。 Subversion 不限制您使用此类命名约定。它只是一个建议。谢谢你的回答,很有帮助。 那么比如subversion知道“revision”这个概念吗?每个提交都只是整个存储库的快照吗?您如何知道是否有人错误地签入了 50% 的发布标签?难道你不需要经常注意吗? @ebyrob 自从我使用 SVN 以来已经有一段时间了,但是 IIRC,SVN 跟踪修订之间的差异,而不是整个快照。无论如何,在任何 VCS 中,都有可能“删除”您可能不想删除的发布标签(或任何其他文件/文件夹)。不过,我把“删除”放在引号中,因为它从来没有真正消失过,它总是在历史中并且总是可以恢复(我认为 GIT 中可能有 1 个 very 边缘案例)跨度> 【参考方案4】:

开始学习 Subversion 的好地方是http://svnbook.red-bean.com/。

就 Visual Studio 工具而言,我喜欢AnkhSVN,但我还没有尝试过VisualSVN 插件。

VisualSVN 确实依赖于TortoiseSVN,但 TortoiseSVN 也是对 Ankh 恕我直言的一个很好的补充。

【讨论】:

您从哪里得知 Ankh 依赖于 Tortoise? Afaik 并非如此,仅适用于 VisualSVN。 我不知道我从哪里得到这样的印象,但我确实认为这是必需的。无论哪种情况,我都认为将 Tortoise 作为一种赞美很好,但感谢您让我研究它! 我安装了没有乌龟的ankh。【参考方案5】:

要在 Visual Studio 2008 中使用 Subversion,请安装 TortoiseSVN 和 AnkhSVN。

TortoiseSVN 是一款非常易于使用的 Windows 版本控制/版本控制/源代码控制软件。 由于它不是针对特定 IDE 的集成,因此您可以将其与您喜欢的任何开发工具一起使用。 TortoiseSVN 可以免费使用。您无需获得贷款或支付整年的薪水即可使用它。

AnkhSVN 是 Visual Studio 的 Subversion SourceControl 提供程序。该软件允许您直接从 Microsoft Visual Studio IDE 内部执行最常见的版本控制操作。使用 AnkhSVN,您不再需要离开 IDE 来执行查看源代码状态、更新 Subversion 工作副本和提交更改等任务。您甚至可以浏览您的存储库,并且可以插入您最喜欢的差异工具。

【讨论】:

【参考方案6】:

主干被认为是您的主要代码库,是主干的一个分支。比如,如果你想实现一个新特性,但又不想影响主干,你就创建一个分支。

TortoiseSVN 有很好的文档和很棒的差异工具。

我使用 Visual Studio,我使用 VisualSVN 和 TortoiseSVN。

【讨论】:

【参考方案7】:

如果您是 Subversion 的新手,您可能想适当地查看 SmashingMagazine.com 上的这篇文章 标题为Ultimate Round-Up for Version Control with SubVersion

它涵盖了 SubVersion 的入门以及指向教程、参考资料和书籍建议的链接

它涵盖了工具(许多是兼容的窗口),并提到 AnkhSVN 作为 Visual Studio 兼容插件。 cmets 还提到 VisualSVN 作为替代方案。

【讨论】:

【参考方案8】:

SVN Monitor 是一款非常棒的免费实用工具,如果您有一个开发团队可以使用。它可以作为你的树的心跳,告诉你什么时候有更新、可能的冲突等。不过,它对一个单独的开发者来说并不是那么有用。

【讨论】:

【参考方案9】:

Pragmatic Version Control using Subversion 是一本关于 Subversion 的好书,其中解释了您的问题,并且提供了更多信息。

【讨论】:

以上是关于Subversion 中的主干、分支和标签是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 Subversion 1.5 中将分支重新集成到主干时缺少范围错误消息

为啥我在 Subversion 中遇到树冲突?

在 Subversion 中合并分支时的冲突预防

Subversion:如何找到所有未合并到主干的修订?

Jenkins Subversion Multibranch 管道找不到管道

使用 TortoiseSVN 如何将更改从主干合并到分支,反之亦然?