开发人员使用SVN进行分支

时间:2012-01-25 14:12:59

标签: svn

我们刚刚在工作中迁移到SVN,我推动了Mercurial,但是因为没有其他人在这里工作而被拒绝了。

我当前的任务要求我从定制的C ++构建系统中破解生活垃圾,以使其与新的源代码控制系统很好地协同工作。这将需要对代码库进行大规模更改。

我正在努力实现的工作流程是:

  • 分行到一些私人区域。
  • Hack,包括主要的结构树更改
  • 哈克
  • 哈克
  • 将最终结果合并回主干。

很高兴可以定期从trunk更新我的工作分支,但是对于这个项目来说,这不是必需的,因为我是唯一一个处理这段代码的人。

以下是我在实现此工作流程时遇到的问题。

我们的SVN存储库结构如下:

SVN
    \_ Project1
        \_ trunk
        \_ branches
        \_ tags
        \_ shelves
            \_ dev1
            \_ dev2
    \_ Project2
    . . .
    \_ Project3
    . . .

项目2和3具有与项目1相同的目录结构。我们创建了shelf目录,希望开发人员能够以与使用Git或Mercurial相同的方式进行分支和提交以协助开发。不幸的是,我认为这无法使用SVN。问题是,一旦将东西提交给SVN,其他用户就无法忽略它。因此,如果我在Project1-> shelf-> Dev1下创建2或3个正在进行中的工作分支,则下次其他任何人更新项目1或整个存储库的工作副本时,它需要血腥的年龄,因为他们必须等待每一个要下载的新分支。每个新分支大约需要5分钟更新,因此有六个开发人员每天创建一个或多个正在进行的新工作分支,这是完全不可行的。

如果每个开发人员都可以在本地配置SVN,以忽略其他开发人员正在进行的私有工作分支目录,那将是完美的,但似乎根本无法做到这一点。

我的另一个研究途径是考虑使用Mercurial或Git直接从SVN结账(Mercurial使用hgsubversion和Git使用git-svn)。这两种方法都具有复杂性,这些方法是将开发分支合并到需要提交给SVN的分支中,但尽管这种方法具有复杂性,但仍然有一些希望。在那之前,我做了一些测试,发现无论是hgsubversion还是git-svn都没有注意到任何SVN文件的外部因素,而且我也遇到了一些文档,这些文档暗示在Git中文件重命名/移动不会在SVN中正确提交,即文件历史记录将丢失,这是不可接受的。

现在我正在看的是这个。

  • 使用SVN检查我的来源。
  • 将源复制到新目录。
  • hg初始化新目录,给我一个我可以破解的Mercurial工作目录。
  • 当我完成后,使用KDiff3将我最终的Mercurial工作副本与原始SVN源进行比较。
  • 使用SVN移动/重命名/删除手动修复结构更改。
  • 通过SVN源复制Mercurial工作副本并提交回SVN。

必须有更好的方法。请有人帮我找到它!!

1 个答案:

答案 0 :(得分:1)

通常你不会像那样检查整个存储库 - 你只检查你正在处理的分支(并使用svn开关在分支之间移动)