0

我只对单个文件的历史感兴趣。我已经尝试过 hg log,它显示了对文件所做的所有更改。但是,如果有一个由整个存储库组成的分支,我如何从日志中知道(在该分支中签出整个存储库,然后查看文件并手动比较头部中的不同签入)哪个版本该分支得到的文件(即在头部的哪一点)?

(我也试过谷歌搜索无济于事。也许我没有使用正确的搜索词,因为我是 Mercurial 的新手。我希望我已经清楚地解释了我的目标。)

提前非常感谢!

4

4 回答 4

1

您正在以“svn”(或 CSV)术语思考。您的问题在 Mercurial(或 git)的上下文中没有意义。单个文件在这些 DVCS 中都没有版本。版本称为修订版,并且是存储库范围内的。您不能像在 svn 中那样“签出”一个文件的修订 X 和另一个文件的修订 Y。

因此,与您类似的问题可能是“最近在分支 Y 中更改文件 X 的修订版本”,而获得该答案的一种方法是:

hg log -r 'ancestors(Y)' X

或者

hg log -r 'ancestors(default)' TODO

有一些具体的价值观。

于 2013-02-11T23:02:59.413 回答
0

您可以使用以下glog命令:

$ hg glog foo.py

请注意,您需要graphlog通过添加hgext.graphlog =[extensions]您的标题来启用扩展~/.hgrc

$ cat ~/.hgrc
[extensions]
hgext.graphlog =
…
$

确定何时采用分支的一种简单的手动方法是运行:

$ hg glog

然后搜索文件名并查看它更改了哪些变更集。

或者,您可以运行:

hg log -r 'ancestors(mybranch)' myfile

要向您显示 mybranch 中和之前的所有变更集,其中包含对 的更改myfile,然后查找在执行分支之前修改文件的最后一个变更集:

$ hg log -r '祖先(mybranch)' 我的文件
变更集:30:3b2f7243c1ac
用户:David Wolever <david@wolever.net>
日期:2010 年 11 月 15 日星期一 09:47:46 -0500
文件:我的文件
描述:
做事


变更集:31:804257c328ab <-- 分支之前对文件的最后一次更改
用户:David Wolever <david@wolever.net>
日期:2010 年 11 月 18 日星期四 21:44:11 -0500
文件:我的文件
描述:
改变事物

变更集:32:df26ccd32c38 <-- 对分支中的文件进行了更改
分支:我的分支
用户:David Wolever <david@wolever.net>
日期:2010 年 11 月 18 日星期四 23:23:44 -0500
文件:我的文件另一个文件
描述:
启动我的分支
于 2013-02-11T22:15:37.293 回答
0

不确定这是否是您想要的,但您可以列出包含特定文件名的所有修订版

hg log -r "contains(filename)"

或者

hg glog -r "contains(filename)"

如果您想要更具体的内容,请查看hg help revsets输出,其中显示了该-r选项的可能性。

于 2013-02-11T23:16:56.497 回答
0

对于 Ry4an 的任务 revset for log 文本必须是

"max(branch(Y) & contains(X))"
于 2013-02-12T05:54:55.190 回答