Найти удаленные файлы в истории репозитория Mercurial, быстро?


вы можете использовать HG grep, но он ищет содержимое всех файлов.

Что делать, если я просто хочу найти имена файлов удаленных файлов, чтобы восстановить один?

Я попробовал hg grep-I pattern но это, кажется, не возвращают никаких результатов.

6 57

6 ответов:

С помощью шаблоны просто:

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

обновление для Mercurial 1.6

можно использовать revsets для этого:

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

(Edit: обратите внимание на двойную * -один обнаруживает удаление только из корня репозитория.)


Edit: как предполагает Матье Лонгтин, это можно сочетать с шаблон С ответ dfa чтобы показать вам , который файлы каждая из перечисленных ревизий удаляет:

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

это имеет преимущество (для машинной читаемости) перечисления одной ревизии на строку, но вы можете сделать вывод красивее для людей с помощью % для форматирования каждого элемента в списке удалений:

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

если вы используете TortoiseHg workbench, удобным способом является использование фильтра ревизий. Просто ударил ctrl+s, а затем введите

removes("**/FileYouWantToFind.txt")

**/ указывает, что вы хотите выполнить рекурсивный поиск в репозитории. Вы можете использовать * подстановки в имени файла тоже. Этот запрос можно объединить с другими наборами ревизий с помощью and,or операторы.

существует также этот расширенный редактор запросов: enter image description here

поиск конкретного файла, который вы удалили эффективно, и форматировать результат красиво:

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("**") to sort(removes("**"), -rev). Для большого проекта с более чем 100K наборами изменений это приведет к удалению последних файлов намного быстрее. Этот обратный порядок, начиная с оборотов 0 начинать, а не на кончике.

добавлены {author} и {desc} в ouput. Это даст контекст относительно почему файлы были удалены путем отображения комментария журнала и кто это сделал.

так что для моего случая использования, это было 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