Mercurial - 处理文件名冲突

Mercurial - handling filename conflicts

一些上下文:

我正在尝试实施 K. Scott Allen's technique for database schema versioning,并且由于这个特定项目的不断发展,我选择使用更简单的 1.sql, 2.sql, 3.sql, ..., n.sql 编号方案而不是那里提到的版本控制方案.

但是,这通常会导致这样的情况,即在两个不同分支中更改架构会导致创建同一个新文件,{n+1}.sql

我使用 Mercurial 作为我的版本管理软件,特别是 Windows 上的 TortoiseHG 和默认的 diff 软件。当我将一个开发分支合并到 stable 时,Mercurial 检测到冲突,但提议合并这两个文件。理想情况下,其中一个需要重命名为 {n+2}.sql.

这可以通过两种方式完成:首先,可以推迟合并的提交并在那里编辑文件。但是,在这个阶段,合并后的文件 {n+1}.sql 是其中一个文件的某些或 none 的杂乱组合。

第二种方法撤消合并,到开发分支,重命名文件,重新提交,重新合并。

我的问题:

是否有可能让 Mercurial 以不同的方式处理每个 在不同分支中创建 的文件与仅 修改 在不同分支中的文件合并时的分支?

理想情况下,如果我面临 post-合并,与 {x+1}.sql{x+1}.sql.mergebranch 预提交,那么很清楚哪个文件需要重命名,生活将是更简单。

有两个选择,一个比较难,一个比较麻烦。

首先是找到并配置或创建一个 diff 工具来处理您认为合适的这些文件的合并。您还可以为特定文件类型定义特定的差异工具。这就是您可能想要查找的内容

或者,您可以简化当前的合并过程,这有点老套。执行合并并在提交之前修复它:

  • {x+1}.sql 恢复到以前的版本:hg revert -rHASH1 {x+1}.sql
  • 创建第二个 sql 文件:hg cat -rHASH2 {x+1}.sql > {x+2}.sql

其中 HASH1 和 HASH2 是合并的两个父项的变更集 ID。