如果有办法获得与传入的hg状态相同的信息,我一直在努力解决问题。 (这是使用hg版本1.9.2)
因此,如果你拉回购,你可以得到所有变化的摘要:
hg pull
hg status --rev .:default
然而,在拉入之前,最好的可用是:
hg incoming --stat
可以显示已更改的文件。但是没有给出所有变更集的总体概要。
现在我可以使用一些bash来总结所有文件:
hg in --rev default --template '< {desc|tabindent}\n' -q | sed 's%\t%< %'
filechanges=`hg in --rev default --template '{files} ' -q`
echo ${filechanges} | xargs -n1 | sort -u | sed -e 's%^%. %'
现在我可以显示&#34;添加,删除,修改&#34;使用我基于默认创建的样式〜/ hgtemplates / map-cmdline.files:
# specify a changeset
changeset_verbose = 'changeset: {node} {rev} {branch}\ndescription:\n{desc|tabindent}\nFiles:\n{file_mods}{file_adds}{file_dels}{file_copies_switch}\n'
changeset = 'desc: {desc|tabindent}\nFiles:\n{file_mods}{file_adds}{file_dels}{file_copies_switch}\n'
changeset_quiet = '{file_mods}{file_adds}{file_dels}{file_copies_switch}\n'
# Using hg status prefixes
# Modified M prefix
start_file_mods = ''
file_mod = 'M {file_mod}\n'
end_file_mods = ''
# Added A prefix
start_file_adds = ''
file_add = 'A {file_add}\n'
end_file_adds = ''
# Deleted ! prefix
start_file_dels = ''
file_del = '! {file_del}\n'
end_file_dels = ''
# Copies C prefix ??????
start_file_copies = 'copies: '
file_copy = 'C {name} ({source})\n'
end_file_copies = ''
然后使用它:
hg in --style ~/hgtemplates/map-cmdline.files -q
但是我必须使用更复杂的合并脚本,可能是基于名称的perl哈希。
那么扩展或模板是否有办法实现这一目标?
指向正确方向的任何指针?
答案 0 :(得分:5)
首先,您需要了解hg incoming
通过网络发送与hg pull
相同的数据。这在许多情况下都很浪费(你只想查看日志),但是当你需要额外的信息时这很好。
因此,您可以利用--bundle
选项将拉取数据存储在临时位置,然后将该捆绑包用作只读叠加存储库。
以下应该能够满足您的需求:
hg incoming --bundle .hg/changes.hg
hg status -R .hg/changes.hg --rev 'bundle()'
另外,当然您可能希望使用hg -R .hg/changes.hg
执行的任何其他只读存储库操作。 revset bundle()
将包含所有传入的修订。请注意,虽然我在这里关注您使用--rev
,但我认为您实际上可能需要--change
选项。
并且,一旦满意,您不必再次通过网络进行更改,但可以直接从捆绑中抓取它们:
hg pull .hg/changes.hg
请注意,您可以将捆绑文件放在任何位置,但不一定是.hg/changes.hg
。