我们目前正在使用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选项时,不会显示任何结果。
答案 0 :(得分:0)
你可以在hg log
中使用revsets(更长的方式,更好的结果)或者选择更短(并且稍微脏一点)的日志选项和眼睛:
hg log FILENAME -b stable
将生成更改集列表,最早(通过rev-id)将在分支中出现FILENAME的时刻
修改强> 使用此类历史记录测试样本仓库
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
“含有(图案)”
修订版的清单包含文件匹配 模式(但可能不会修改它)。
和最终(额外抛光)revset for log: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(参数化)是将其添加[revsetalias]
并且可能使用revsetalias记录到[alias]
<强>样品2 强>
在真实HGSubversion repository上使用随机文件
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