【发布时间】: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