3

我正面临这样一种情况,我的开发团队想重新组织我们存储库中的文件结构。这个过程大约需要2-3个月。在文件重组期间,我们仍然要做一个软件发布。因此,在重组过程之后,我们希望将已组织的文件从分支合并回主干。保留文件历史记录很重要,而且我们需要能够在第一次创建分支后合并主干中的代码更改。

我最初的尝试是创建一个分支,然后简单地合并它。不幸的是,事情并没有我想的那么简单。我的测试场景之一如下:

  1. 从主干创建分支
  2. 更新主干中的文件
  3. 在分支中移动文件
  4. 更新分支中的文件
  5. 从分支合并到主干

在第 5 步,我在主干中更新的文件出现“树冲突”错误。TortoiseSVN 不提供与冲突文件相关的分支中的哪个文件的信息。在我的场景中,找出有问题的文件并不难;但是,在我们的真实存储库中,这将非常困难,因为我们有数千个文件,其中许多文件具有相同的文件名(在不同的文件夹中)。

有没有人和我有同样情况的经历?我应该/可以做的任何建议/最佳实践来确保代码的完整性?

感谢所有的帮助。

4

2 回答 2

2

你可以走两条路

1.纯SVN方法

在合并 /branches/branchname /trunk 目录之前重构之后,将分支中所有重命名/移动的文件与其主干原始文件合并,即/branches/branchname/some/branchfile1 /trunk/trunkfile1...并在最后一步合并目录

2.DVCS方法

使用任何具有良好合并的 DVCS(他们都有它 - Git、Mercurial、Bazaar...)和 svn-bridge(git-svn、hgsubversion...),在 DVCS 镜像仓库中执行重构合并。毕竟 - 使用 DVCS 工具(... rebase)线性化存储库(SVN 历史记录,DVCS -DAG)并将结果推送到 SVN-repo。如果 rebase 对您来说太难了,您可以将最终结果从 DVCS-of-choice(对于 SVN 背景,我会考虑 Mercurial 或 Bazaar,而不是 Git)导出到未版本化的树中,然后只做主干的单向同步 WC与这棵树

于 2012-01-24T11:51:58.293 回答
2

这就是我最终要做的事情: 1. 将分支中所有重命名和修改的文件与来自主干的所有更新(如果适用)合并 2. 将分支提交到存储库。该分支现在具有最新的代码,包括自首次创建分支以来来自主干的更改 3. 将分支中的所有更改合并回主干。主干不会有所有更新的文件结构以及主干和重组分支中发生的所有更改

注意:对于在主干中更新并移动到分支中的另一个位置的文件,预计仍会出现树冲突。我需要做的就是删除这些文件。

第 1 步是一个乏味的过程,但它适用于我的测试。这可能不是最好的解决方案,但它对我有用(维护主干和分支的更新并保留历史记录)。

于 2012-01-25T17:35:19.027 回答