2015-08-03 105 views
0

我们正在使用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稳定选项没有显示结果。

回答

0

您可以使用hg log revsets(很长的路要走,更好的结果),或者选择用日志选项ANS眼睛短(和轻度污染)的方式:

hg log FILENAME -b stable会产生变更的名单,最早的(由REV-ID)会出现文件名的时刻分支

编辑: 测试了这种历史的样品回购

汞柱登录-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 

(注:在某些变更失踪 “文件”,尤其是 - mergesets:不变文件没有出现在列表),但

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日志: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 

对于许多合并的操作,你可能需要有一个谓语revset包围的第一(),以获得第一个出现的文件。而这样的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 
+0

隐而不宣” t似乎为我工作。即使我可以看到引用的文件存在于稳定的存储库中,-b稳定选项也没有结果。我会举例说明如何重现我所看到的,这可能会更好地解释问题(或突出显示我做错了什么!)。 –

+0

@JinxedNZ - 添加了解决方案(草案) –

相关问题