【问题标题】:Developer work in progress branches using SVN使用 SVN 的开发人员正在进行的分支
【发布时间】:2012-01-25 14:12:58
【问题描述】:

我们刚在工作中迁移到 SVN,我推动了 Mercurial,但被拒绝了,理由是在这里工作的其他人都没有听说过。

我当前的任务要求我从定制的 C++ 构建系统中破解生活垃圾,以便让它与新的源代码控制系统很好地配合使用。这将需要对代码库进行大量更改。

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

  • 将主干分支到某个私人区域。
  • Hack,包括主要的结构树更改
  • 破解
  • 破解
  • 将最终结果合并回主干。

如果能够定期从主干更新我的工作分支,那就太好了,但对于这个项目来说,这不是必需的,因为我是唯一一个处理此代码的人。

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

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

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

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

如果每个开发人员都可以在本地配置 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。

一定有更好的方法。请有人帮我找到它!

【问题讨论】:

    标签: svn


    【解决方案1】:

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

    【讨论】:

    • 是的,你永远不会用 SVN 查看整个 repo。如果这就是你的同事正在做的事情,你需要让他们停下来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 2011-07-27
    • 1970-01-01
    相关资源
    最近更新 更多