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

时间:2009-06-18 15:58:57

标签: version-control mercurial

您可以使用hg grep,但它会搜索所有文件的内容。

如果我只想搜索已删除文件的文件名以恢复文件名怎么办?

我尝试了hg grep -I 文件名模式 模式,但这似乎没有返回任何结果。

6 个答案:

答案 0 :(得分:84)

使用templates is simple

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

答案 1 :(得分:49)

Mercurial 1.6的更新

您也可以使用revsets

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

修改:请注意双* - a single one detects removals from the root of the repository only。)


修改:正如Mathieu Longtin建议的那样,这可以与来自templatedfa's answer结合使用,向您展示每个列出的修订版删除的文件:

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

它具有每行列出一个修订版的优点(用于机器可读性),但是您可以通过使用%格式化删除列表中的每个项目来使输出对人类更漂亮:

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

答案 2 :(得分:7)

如果您使用TortoiseHg工作台,一种方便的方法是使用修订过滤器。只需点击ctrl+s,然后输入

即可
removes("**/FileYouWantToFind.txt")

**/表示您要在存储库中递归搜索。 您也可以在文件名中使用*通配符。您可以使用andor运算符将此查询与其他修订集合并。

还有这个高级查询编辑器: enter image description here

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

我已经采取了其他答案并对其进行了改进。

添加了“--no-merges”。在开发团队的大型项目中,会有很多合并。 --no-merger将过滤掉日志噪音。

removes("**")更改为sort(removes("**"), -rev)。对于具有超过100K变更集的大型项目,这将更快地删除最新文件。这反转了从从0开始到从尖端开始的顺序。

为输出添加了{author}和{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

答案 5 :(得分:-1)

来自项目根目录

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