Svn 在多个开发人员之间使用主干/分支和标记结构

Svn 在多个开发人员之间使用主干/分支和标记结构,svn,tags,branch,trunk,Svn,Tags,Branch,Trunk,当涉及到主干/分支和标签时,我最终会感到困惑。以下是我的疑问: 我们有一个开发团队,负责一个项目。开发人员通常被分成小组,他们在同一个项目中处理不同的模块 目前,我们有一个简单的SVN系统(没有任何主干/分支或标记),每个人都在同一个本地服务器上工作并提交文件。但问题开始于两个开发人员开发未来的模块(这些模块不应该立即投入使用)。在这种情况下,他们无法提交数据,因为如果提交,他们的开发代码将上载到实时服务器上,最终会把一切都搞糟 因此,现在我正在寻找某种解决方案,这些开发人员可以在同一代码上单独

当涉及到主干/分支和标签时,我最终会感到困惑。以下是我的疑问:

我们有一个开发团队,负责一个项目。开发人员通常被分成小组,他们在同一个项目中处理不同的模块

目前,我们有一个简单的SVN系统(没有任何主干/分支或标记),每个人都在同一个本地服务器上工作并提交文件。但问题开始于两个开发人员开发未来的模块(这些模块不应该立即投入使用)。在这种情况下,他们无法提交数据,因为如果提交,他们的开发代码将上载到实时服务器上,最终会把一切都搞糟

因此,现在我正在寻找某种解决方案,这些开发人员可以在同一代码上单独工作。大概是这样的:

/
 filea.html
 fileb.html
 dira/
  filex
开发人员A正在开发新模块A 开发人员B正在开发新的模块B 开发人员C正在修复模块C的错误(该模块已经上线,但需要修复的错误很少)

因此,开发人员A将在这台机器上拥有自己的副本,并将提交给开发人员A的存储库。(或分行)

同样的逻辑也适用于开发人员B,但开发人员C将在标签中的某个位置处理一个公共稳定副本,一旦完成工作,它将被标记并推送到主干,以便在实时服务器上上载

一旦开发人员A完成了工作,他将把所有文件推到主干上进行实时上传。(这也应该合并主干中的一些常见文件)。同样的逻辑也适用于开发人员B

我不确定SVN是否是解决这个问题的正确方案。我甚至不知道是否有更简单的方法来实现我想要的

欢迎提出任何建议

谢谢
TTR

首先,我的观点是,如果所有开发人员都在处理项目的各个部分,那么就可以取消分支。这可能需要一点组织(例如适当的日志注释和版本控制),但这比分支和合并要容易得多

好的,但是如果你想要分支,它们很容易。有几种方法可以实现这一点,但基本上都涉及最终代码的“主”版本。这可以是trunk,或者有些人更喜欢在trunk上进行更改,然后合并代码以释放分支。“树干是主人”是最容易理解的概念

在svn中,创建一个分支很容易——这是一个便宜的副本,所以您唯一的问题是用东西填充目录(我建议在完成分支后删除它)。SVN也为这种类型的工作提供了一种特殊的分支,即。它是特殊的,因为SVN跟踪发生在它身上的事情,它的设计是您从主干创建一个分支,处理它,偶尔用对主干所做的更改来更新它,然后在最后一次爆炸中将您在该分支上的所有工作重新整合到主干中。然后你可以重新开始。听起来这可能是您想要的——通常情况下,您不会为每个开发人员提供一个分支,而是为每个工作包提供一个分支

每开发分支的问题在于,随着分支的寿命越来越长,它们所做的更改将越来越难合并回来。如果开发人员不定期将其他开发人员的工作合并到他们的分支中(他们习惯这样做),这一点尤其正确


由于svn提供廉价拷贝,我可能会建议为每个开发人员对整个主干进行分支。我发现更容易记住这一点,而不是对单个目录进行分支,并且您始终能够更改共享或公共文件,而不必担心提交它们是否会破坏另一个分支。(即,如果您分支/trunk/moduleA,然后发现您需要更改/trunk/include/common_文件,那么当您分支一个子集时,公共文件将不在您的分支中。因此,只需在根上分支,因为这不会额外花费您任何费用)

首先我的观点是,如果您所有的开发人员都在处理项目的不同部分,然后你可以去掉树枝。这可能需要一点组织(例如适当的日志注释和版本控制),但这比分支和合并要容易得多

好的,但是如果你想要分支,它们很容易。有几种方法可以实现这一点,但基本上都涉及最终代码的“主”版本。这可以是trunk,或者有些人更喜欢在trunk上进行更改,然后合并代码以释放分支。“树干是主人”是最容易理解的概念

在svn中,创建一个分支很容易——这是一个便宜的副本,所以您唯一的问题是用东西填充目录(我建议在完成分支后删除它)。SVN也为这种类型的工作提供了一种特殊的分支,即。它是特殊的,因为SVN跟踪发生在它身上的事情,它的设计是您从主干创建一个分支,处理它,偶尔用对主干所做的更改来更新它,然后在最后一次爆炸中将您在该分支上的所有工作重新整合到主干中。然后你可以重新开始。听起来这可能是您想要的——通常情况下,您不会为每个开发人员提供一个分支,而是为每个工作包提供一个分支

每开发分支的问题在于,随着分支的寿命越来越长,它们所做的更改将越来越难合并回来。如果开发人员不定期将其他开发人员的工作合并到他们的分支中(他们习惯这样做),这一点尤其正确

由于svn提供廉价拷贝,我可能会建议为每个开发人员对整个主干进行分支。我发现更容易记住这一点,而不是对单个目录进行分支,并且您始终能够更改共享或公共文件,而不必担心提交它们是否会破坏另一个分支。(即,如果您分支/trunk/moduleA,然后发现需要更改/trunk/include/common\u fil
svn cp / /branchA
/
 filea.html
 fileb.html
 dira/
  filex
 branchA/
  ...
 branchB/
  ...
svn cp / /trunk
svn cp /trunk /branches/branchA
/
 trunk/
  filea.html
  fileb.html
  dira/
   filex
 branches/
  branchA/
   ...