我们的项目最近从SVN切换到Mercurial。在SVN中,为了对我们的css / js文件进行版本化,我们从它们所在的目录中获取最新的修订版本,并将其用作打包文件名的前缀。
我们想在Mercurial中使用相同的方法。不幸的是,说起来容易做起来难,但可能是由我们的分支方法造成的。
简而言之,我们有一个主分支(主干)。每隔几周我们就会从主干分支创建一个生产测试版,最终将合并到我们的实时分支中。
现在,我们基本上正在使用
hg log -b live some_folder/js
hg log -b live some_folder/css
获取最近更改了这些目录中文件的变更集。
我们遇到的问题是我们的合并更改集未使用此方法检测到。因此,如果我们合并修改some_folder / css中的文件的变更集,则hg不会将其视为已更改,因为该文件实际上未在合并变更集中进行修改,而是在其中一个正在合并的变更集中。
我们还尝试过revsets来尝试解析日志,但它似乎也有同样的问题。获取hg日志以将这些文件列为已更改的唯一方法似乎是使用--stat选项,但
hg log -b live --stat some_folder/css
也没有显示更改集。
我正在考虑使用
hg log -b live --stat
获取整个分支的日志,然后解析它以找到最近修改了目录文件的变更集,但我不愿意,因为它似乎会变得越来越慢,因为分支获得大。
有关解决问题的更好方法的任何想法吗?
答案 0 :(得分:2)
我将通过声明我目前没有在此PC上安装Mercurial来解释这个答案,因此无法验证命令,但它至少可能指向一个有用的(?)方向。
您可以使用hg status
指定--rev
选项来获取两个修订版之间的更改列表,因此使用修订版表示法,您可以执行以下操作:
hg status -b live --rev -2:-1 some_folder/css
理论上(这里我的地方非常错误:)),选项意味着:
--rev -2:-1
选择工作目录的父级(我假设您在合并后仍然会在那里),并将其与其父级(-2
)进行比较。指定-b live
将有希望选择该分支中的父级,但正如我所说,我现在无法对此进行测试。
答案 1 :(得分:0)
最后没有一种简单的方法可以做到这一点,所以我采用了以下方法: 在过去的x天内抓取分支的所有日志。使用stat命令迭代所有这些日志,并在影响给定分支的第一个修订上停止。如果该日期范围内的任何一个都不影响给定路径,请抓住下一个x天的日志。所以:
hg log -b live -r "reverse(date('2011-05-12 to 2011-05-26'))" --template "{node} "
然后为每个变更集
hg st --change <the_changeset> -I "some_folder/css"
当这返回任何空值时,我停止循环并返回变更集ID。希望在某些时候,revsets将支持迭代合并的更改。