我只对单个文件的历史感兴趣。我已经尝试过 hg log,它显示了对文件所做的所有更改。但是,如果有一个由整个存储库组成的分支,我如何从日志中知道(在该分支中签出整个存储库,然后查看文件并手动比较头部中的不同签入)哪个版本该分支得到的文件(即在头部的哪一点)?
(我也试过谷歌搜索无济于事。也许我没有使用正确的搜索词,因为我是 Mercurial 的新手。我希望我已经清楚地解释了我的目标。)
提前非常感谢!
我只对单个文件的历史感兴趣。我已经尝试过 hg log,它显示了对文件所做的所有更改。但是,如果有一个由整个存储库组成的分支,我如何从日志中知道(在该分支中签出整个存储库,然后查看文件并手动比较头部中的不同签入)哪个版本该分支得到的文件(即在头部的哪一点)?
(我也试过谷歌搜索无济于事。也许我没有使用正确的搜索词,因为我是 Mercurial 的新手。我希望我已经清楚地解释了我的目标。)
提前非常感谢!
您正在以“svn”(或 CSV)术语思考。您的问题在 Mercurial(或 git)的上下文中没有意义。单个文件在这些 DVCS 中都没有版本。版本称为修订版,并且是存储库范围内的。您不能像在 svn 中那样“签出”一个文件的修订 X 和另一个文件的修订 Y。
因此,与您类似的问题可能是“最近在分支 Y 中更改文件 X 的修订版本”,而获得该答案的一种方法是:
hg log -r 'ancestors(Y)' X
或者
hg log -r 'ancestors(default)' TODO
有一些具体的价值观。
您可以使用以下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 文件:我的文件另一个文件 描述: 启动我的分支
不确定这是否是您想要的,但您可以列出包含特定文件名的所有修订版
hg log -r "contains(filename)"
或者
hg glog -r "contains(filename)"
如果您想要更具体的内容,请查看hg help revsets
输出,其中显示了该-r
选项的可能性。
对于 Ry4an 的任务 revset for log 文本必须是
"max(branch(Y) & contains(X))"