你使用branches / tags / trunk约定吗?

时间:2008-09-23 19:40:34

标签: svn

您是否始终遵循将分支,标记和主干目录放在Subversion存储库顶层的约定?最近,我已经停止了打扰,并没有发生任何不好的事情(还)!

如果需要创建目录树,应该可以移动目录树。我以后会不会遇到麻烦?

15 个答案:

答案 0 :(得分:12)

您是否尝试过分支或标记?在那之前,没有问题。但是,使用分支,标签,主干约定的另一个好处就是它就是一个惯例。人们希望看到这一点,所以当他们需要分叉时,他们知道该怎么做。

答案 1 :(得分:2)

快速回答是“做任何最适合您程序的事情”。

正如Danimal所说,分支/主干/标签的结构是一种惯例。但是,我不同意b / t / t的位置很重要,只是存在它们。

你应该拥有的是明显指定用于分支的某个地方,指定用于你的行李箱的地方和用于你的标签的地方。它们的确切位置在很大程度上取决于存储库的结构以及您保留的文件的性质。

例如,如果要在一个存储库中保留多个项目,您可能会发现在项目下创建b / t / t目录更有意义。如果项目中有不同的模块,则应在模块目录下创建b / t / t。

问问自己,您希望分支并以此为指导的最大逻辑块是什么。

答案 2 :(得分:1)

这取决于项目的规模。我们有一些东西(在git中授予,但概念是相同的),这是相当大的。每个开发人员都使用他/她自己的分支,有一个测试和主线分支。我们还标记了版本,如果有特定于版本的修复,则会创建一个分支,因此可以非常容易地集成修复。

这种设置有一个优点:我们在开发过程中不会互相卷发。但缺点是我们需要一个集成商将提交从开发人员分支到测试分支,然后再到主线。

如果项目很小,那么它只是开销,但你永远不知道项目会有多大。

答案 3 :(得分:1)

我刚开始实际使用这个约定,我同意with Danimal。如果您有一个QA版本,另一个版本是Production版本,另一个版本是疯狂的新实验性功能开发版,那么快速在它们之间来回切换是很好的。

答案 4 :(得分:1)

我过去曾编写过工具来自动化某些SVN。创建基本存储库就是其中之一。第1步:创建一个空的存储库。步骤2:创建主干,分支和标签文件夹 - 提交步骤3:将钩子脚本复制到新存储库

我的一个钩子脚本是确保无法修改tags目录中的项目。这使得标签具有与分支不同的含义。

答案 5 :(得分:0)

不,已经放弃了目前在队列中的项目的方法。虽然这个概念似乎非常有效,但它似乎浪费的时间多于实际节省的时间。

答案 6 :(得分:0)

你至少有一个行李箱吗?如果没有,当您需要分支或标记时,您必须将那些位于根项目目录中,以及实际的代码/内容。糟糕!

编辑:我猜你可以创建一个trunk文件夹,然后将所有内容移动到那里,然后创建你的分支等......

对于那些说“以后再做,不要浪费时间等等......”老实说,在项目开始时创建它们需要多少开销?上场2分钟?为什么不这样做呢?以后移动所有内容需要更长的时间 - 即使你最终只需要在5次中分支1次,我仍然认为你使用较少的时间从分支,标记,主干结构开始。

答案 7 :(得分:0)

正如我在What do "branch", "tag" and "trunk" mean in Subversion repositories?中所说,由于分支和标记是相同的,因此您没有义务遵循任何约定,而是您自己的约定。
特别是对于一个具有顺序开发的小项目(即不需要在当前开发,旧版本的维护,替代框架的探索......之间进行并行工作)

答案 8 :(得分:0)

我通常会将我的主干保留在存储库的根目录中,只有在我真正需要创建分支标记时才将其移动到Trunk文件夹中。我认为使用SVN,只要您的结构符合逻辑,如果您的需求发生变化,您应该可以在以后重新安排它。

答案 9 :(得分:0)

我在每个项目上使用trunk,tags和branches。说真的,在创建项目时创建2个额外目录有多难。为了保持一致性,遵循惯例有一些好处。我发现我有很多标签(开发人员环境之外的每个应用程序都会被版本化和标记)。我没有这么多分支机构,因为我通常不会在审核之前与我不信任的人合作。所以,通常当我得到分支时,这是因为我有一个永久性的代码库分裂 - 通常是针对不同的客户端。一旦代码变得不可调和,我通常会停止分支并将其移动到它自己的主干。

答案 10 :(得分:0)

最近我使用了一个更专注于敏捷的模型,你可以看看here

在版本控制中遵循一些策略非常重要,甚至使用定义良好的模型,代码版本本质上会导致您犯错误,混乱合并以及所有不好的东西,所以要小心。

此模型为每个存储库提供了职责,并且不会让您重叠生产,交付和构建代码所在的位置。

答案 11 :(得分:0)

我遵循惯例有很多原因

  1. 使用b / t / t约定的参考资料和程序可以立即应用于您的svn repo结构。
  2. 所有熟悉惯例的团队成员都有一个最小的学习曲线,可以习惯你的svn repo结构。
  3. 作为中继线的地方分支机构具有直接和明显的好处,只有当您不得不浏览历史记录和日志来覆盖您或您的公司时,您才意识到维护一致标记过程的好处。
  4. 简而言之,为什么会议是一件好事可能并不是很明显,但是当你需要帮助,建议或某些管理上的疯狂时,它就会变成一个众所周知的天赐之物。

答案 12 :(得分:0)

我喜欢使用“迷你项目”的分支来简单概念证明。它快速,简单,通常有助于跟上您的主项目。我将概念证明放在branches目录中,因为它不是主项目的一部分,但它对项目有价值。

与其他人提到的一样,我使用标签进行发布。我做的大多数版本都是版本,所以我通常只有一个包的zip文件或版本的安装程序。

答案 13 :(得分:0)

没有。不是最后3个工作情况。我与需要编写,修复和调用处理脚本的非程序员合作。编程大多是随意的,偶尔会有更深或更大的工作。没有期望跟随大型软件开发人员的做法。标准存储库术语可能与我们工作的字段中使用的术语发生冲突。因此我们构建了自己的存储库目录。

答案 14 :(得分:0)

在非常简单的环境中,您可以远离SVN存储库顶部的分支,标记,主干。例如,如果您将SVN用于大学作业,那么在将代码发布给您的客户(标记作业的人)之后,您不会非常担心代码的更改,因此您可以明智地免除分支,标签,主干,只有一个结构。 (实际上,整个事情就是'主干'。)

另一方面,如果您一直在管理部署到700个不同站点的代码,并且这些代码分散在不同的产品线中,那么您将疯狂地不在顶部附近使用“分支,标记,主干”你的结构(在沿着BTT路线前分割你的产品是一个明智的例子),因为你需要知道哪些代码去了哪里,并且能够分离主要的重写活动(你在trunk)来自现场修复以帮助网站立即出现问题(您在分支中执行,然后合并到主干)。如果你想回答这个问题“当我们推出补丁1.2.3时,为什么Foobar会停止工作?”标签是必不可少的。