确定何时从另一个分支(Mercurial)合并文件



我们目前使用Mercurial来管理我们的代码,并将其设置为两个主要分支;默认且稳定

我们希望能够发现一个特定的文件何时被添加到稳定分支,但一直无法弄清楚这是如何可能的。

作为一个例子,我们有一个文件在稳定分支中(从默认分支中合并),但是当试图确定该文件在哪个阶段被合并到稳定分支中时,我们只能看到该文件何时被添加到存储库(默认分支)。

hg log <filename> --verbose 

…只显示单个变更集。

可以通过迭代每个必要的修订并确定文件出现在哪个版本的繁琐过程来确定它是何时添加的,但希望有一个更优雅的方法!

编辑:下面的步骤可以用来演示这个问题:

hg init
echo "syntax: glob" > .hgignore
hg addremove
hg commit -u testuser -m "new repository"

hg branch stable
hg commit -u testuser -m "new branch"
hg update default
echo "The quick red fox jumps over the lazy brown dog." > test.txt 
hg addremove
hg commit -u testuser -m "new file"
hg update stable
hg merge default
hg commit -u testuser -m 'mock release'
hg update default
hg merge stable
hg commit -u testuser -m "switch to development branch (default)"

test.txt文件现在是稳定库....

的一部分
hg update stable --clean
hg log .test.txt
changeset:   3:ca4338ed2c56
user:        testuser
date:        Mon Aug 03 15:52:48 2015 +0100
summary:     new file

…然而,使用-b stable选项没有显示结果。

您可以在hg log中使用revsets(长方式,更好的结果)或选择更短(稍微脏)的方式与日志选项和眼睛:

hg log FILENAME -b stable将生成变更集列表,最早(通过rev-id)将在分支

中出现FILENAME的时刻编辑:

使用这样的历史记录测试示例repo

hg log -v

changeset:   4:b9ab93cb4a0a
tag:         tip
parent:      2:4733dc2d6b62
parent:      3:bdd73f64f96f
user:        *
date:        Wed Aug 05 00:37:55 2015 +0500
description:
Back to devel

changeset:   3:bdd73f64f96f
branch:      stable
parent:      1:7c6de35e9ca2
parent:      2:4733dc2d6b62
user:        *
date:        Wed Aug 05 00:36:54 2015 +0500
description:
Mock release
changeset:   2:4733dc2d6b62
parent:      0:81adee946a99
user:        *
date:        Wed Aug 05 00:35:13 2015 +0500
files:       test.txt
description:
File added
changeset:   1:7c6de35e9ca2
branch:      stable
user:        *
date:        Wed Aug 05 00:33:26 2015 +0500
description:
Stable branch created
changeset:   0:81adee946a99
user:        *
date:        Wed Aug 05 00:32:22 2015 +0500
files:       .hgignore
description:
New repo

(注意在一些变更集中缺少"文件",特别是-合并集:未触及的文件在列表中不出现),但是

hg  log -r "contains('test.txt')" -T "{rev}:{node|short} - {branch}n"
2:4733dc2d6b62 - default
3:bdd73f64f96f - stable
4:b9ab93cb4a0a - default

因为hg help revsets

"包含(模式)"
修订的清单包含一个文件匹配模式(但不能修改它)。

和最终(额外抛光)修改日志:contains('test.txt') and branch (stable) and merge()

hg  log -r "contains('test.txt') and branch (stable) and merge()" -T "{rev}:{node|short}n"
3:bdd73f64f96f

对于许多合并操作,您可能希望在谓词first()中包含revset,以便获得第一个出现的文件。这样的revset(参数化)是添加到[revsetalias]的好选择,也许,用revsetalias -添加到[alias]

Sample2

仅在真实的HGSubversion存储库中使用,随机文件

hg  log -r "contains('tests/test_pull.py') and branch (stable) and merge()" -T "{rev}:{node|short}n"
1106:5cb6c95e0283
1255:139a44a63090
1303:553c40023729
1323:6fd0ec01553b

最新更新