2

我正在与使用 SVN 的其他开发人员合作。我是 SVN 的新手,我想更好地了解如何最好地使用 SVN。

目前我们有:

                            __ branch developer 1
Project 1                 /___ branch developer 2
      |                  /____ branch developer 3
      |____ branches---- \____ branch developer 4
      |                   \___ branch developer 5
      |____ tags           \__ branch developer 6
      |
      |____ trunk

在开始开发之前,他们要求我:

  1. 更新我的分支
  2. 从其他分支合并我的分支并解决冲突,所以我必须从dev1,dev2,dev3等合并......提交我的作品

现在,我的问题是……这是正确的方法吗?每次进行如此多的合并都需要很多时间。或者我们应该为所有开发人员只使用一个分支?我真的是 SVN 的新手,我不想做错事......所以我非常感谢你帮助我走上正确的道路。

4

4 回答 4

3

不,这不是使用 SVN 的正确方法。每个开发人员都没有理由拥有自己的分支。

通常,每个人都在主干上工作。如果某些功能需要很长时间开发并且不能在主干上完成,以免打扰其他开发人员,则创建一个特定的功能分支。来自主干的更改定期合并到此功能分支,一旦该功能在其自己的功能分支中完全开发,该分支将重新集成到主干中,并删除。

如果每个人都必须不断地从其他人的分支合并,这与在主干上工作没有什么不同,只是更痛苦。无论如何,它不会扩展到超过 2 或 3 个开发人员。

我建议阅读免费提供的SVN 书籍,其中详细解释了上述所有内容,并与您的同事讨论以使他们采用传统的最佳实践。

于 2012-07-05T09:31:42.800 回答
2

我个人认为上面的当前实现是疯狂的。目前有 7 个分支(每个开发人员一个),每个分支需要 7 次合并才能开始任何工作。

一旦更多的开发人员加入到团队中,合并策略就会变得异常繁琐,并且容易出现更多错误。在您自己开始开发之前,您冒着必须在 X 个分支中编辑冲突的风险。

我会让每个开发人员都在存储库的主干上工作。当只处理一个 repo 目录时,更容易管理冲突解决和合并。

理想情况下,您希望在最多只需要几天时间即可完成的敏捷工作流程(一小块可管理的小块工作)中工作。任何比这更长的项目都可能值得拥有自己的分支文件夹,纯粹是为了将代码和大量重构从主干中分离出来,以免破坏团队其他成员的工作流程。

一旦完成了这项大任务,您就只有一个分支文件夹可以合并回主干(其他开发人员在他们的工作完成后不断更新)。

应该使用源代码控制系统来简化开发工作流程,而不是更复杂。

于 2012-07-05T09:38:03.933 回答
0

就像其他答案告诉你的那样:这种方法简直是脑死。在您最终提交工作之前,您将浪费时间从不同的分支合并。

除此之外:如果您想为每个开发人员拆分内容,为什么不使用像mercurialGit这样的分布式 VCS ?

如果你必须学习 SVN(并且还没有被宠坏),你也可以学习mercurialGit。并且有充分的理由切换。

两年前我为 Git 放弃了 SVN,一天都没有后悔。相反,我喜欢便宜的分支、工作合并、在进入 master 之前返工提交等等。

每个人都在本地工作,当涉及到将东西合并回master(也称为trunkSVN)时,开发人员合并然后推送到中央仓库。您不必浪费任何关于哪个开发人员应该在哪个分支上工作的想法。

关于分支,这里有一篇关于成功的 Git 分支模型的非常受欢迎的文章:http : //nvie.com/posts/a-successful-git-branching-model/

也许你可以让你的同事相信,转职对他们的工作来说是一个真正的好处。我正在与一个坚持手动合并的人合作,即使我们使用的是 Git。我们每周需要 2 到 3 个小时来同步我们的工作。只有两个人的工作。如果您要合并更多,则需要更多时间才能更好地使用。

于 2012-07-05T10:35:39.413 回答
0

我同意其他人的观点,即您目前的策略是疯狂的!;)

就个人而言,我更愿意将主干保持为稳定的“实时”版本,并将所有开发保留在一个分支上,这样所有开发人员都在同一个分支上工作,您只需在您的功能或项目准备就绪时进行合并活,你知道树干自从你分支以来没有改变。

虽然上面的选项会起作用,但我担心每次主干上发生变化时您都必须不断更新分支,并且增加了冲突的可能性(如果主干是实时代码,则会增加站点/产品损坏的可能性)。

于 2012-07-05T10:23:47.863 回答