在Mercurial存储库历史logging中快速查找已删除的文件?

你可以使用hg grep,但它search所有文件的内容。

如果我只想search已删除文件的文件名来恢复文件,该怎么办?

我试过hg grep -I 文件名模式 模式,但是这似乎没有返回结果。

使用模板很简单 :

$ hg log --template "{rev}: {file_dels}\n" 

更新为Mercurial 1.6

你也可以使用revsets :

 hg log -r "removes('**')" 

编辑:请注意double * – 只有一个从repository的根目录检测清除 。)


编辑 :正如Mathieu Longtin所build议的,这可以与dfa的答案中的模板结合,以显示每个列出的版本删除哪些文件:

 hg log -r "removes('**')" --template "{rev}: {file_dels}\n" 

这有美德(机器可读性)每行列出一个修订版本,但您可以使用%来格式化删除列表中的每个项目的人类输出更漂亮:

 hg log -r "removes('**')" --template "{rev}:\n{file_dels % '{file}\n'}\n" 

如果您正在使用TortoiseHg工作台,一个方便的方法是使用修订filter。 只需按ctrl+s ,然后键入

 removes("**/FileYouWantToFind.txt") 

**/表示要在存储库中recursionsearch。 您也可以在文件名中使用*通配符。 您可以使用and or运算符将此查询与其他修订集相结合。

还有这个高级查询编辑器: 在这里输入图像说明

search您有效删除的特定文件,并很好地格式化结果:

 hg log --template "File(s) deleted in rev {rev}: {file_dels % '\n {file}'}\n\n" -r 'removes("**/FileYouWantToFind.txt")' 

示例输出:

 File(s) deleted in rev 33336: class/WebEngineX/Database/RawSql.php File(s) deleted in rev 34468: class/PdoPlus/AccessDeniedException.php class/PdoPlus/BulkInsert.php class/PdoPlus/BulkInsertInfo.php class/PdoPlus/CannotAddForeignKeyException.php class/PdoPlus/DuplicateEntryException.php class/PdoPlus/Escaper.php class/PdoPlus/MsPdo.php class/PdoPlus/MyPdo.php class/PdoPlus/MyPdoException.php class/PdoPlus/NoSuchTableException.php class/PdoPlus/PdoPlus.php class/PdoPlus/PdoPlusException.php class/PdoPlus/PdoPlusStatement.php class/PdoPlus/RawSql.php 

我已经采取了其他的答案,并加以改进。

增加了“–no-merges”。 在开发团队的大型项目中,会有很多合并。 – 不合并会滤除日志噪音。

更改removes("**") sort(removes("**"), -rev) 。 对于一个拥有超过10万个变更集的大型项目,这将最快移除最新的文件。 这反转了从rev 0开始的顺序,而是从tip开始。

添加{作者}和{desc}输出。 这将通过显示日志评论以及谁做了这些事情来给出为什么文件被删除的上下文。

所以对于我的用例来说,这是hg log --template "File(s) deleted in rev {rev}: {author} \n {desc}\n {file_dels % '\n {file}'}\n\n" -r 'sort(removes("**"), -rev)' --no-merges

示例输出:

 File(s) deleted in rev 52363: Ansariel STORM-2141: Fix various inventory floater related issues: * Opening new inventory via Control-Shift-I shortcut uses legacy and potentinally dangerous code path * Closing new inventory windows don't release memory * During shutdown legacy and inoperable code for inventory window cleanup is called * Remove old and unused inventory legacy code indra/newview/llfloaterinventory.cpp indra/newview/llfloaterinventory.h File(s) deleted in rev 51951: Ansariel Remove readme.md file - again... README.md File(s) deleted in rev 51856: Brad Payne (Vir Linden) <vir@lindenlab.com> SL-276 WIP - removed avatar_skeleton_spine_joints.xml indra/newview/character/avatar_skeleton_spine_joints.xml File(s) deleted in rev 51821: Brad Payne (Vir Linden) <vir@lindenlab.com> SL-276 WIP - removed avatar_XXX_orig.xml files. indra/newview/character/avatar_lad_orig.xml indra/newview/character/avatar_skeleton_orig.xml 

从项目根目录

 hg status . | grep "\!" >> /tmp/filesmissinginrepo.txt