Найти удаленные файлы в истории репозитория Mercurial, быстро?
вы можете использовать HG grep, но он ищет содержимое всех файлов.
Что делать, если я просто хочу найти имена файлов удаленных файлов, чтобы восстановить один?
Я попробовал hg grep-I pattern но это, кажется, не возвращают никаких результатов.
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
операторы.
поиск конкретного файла, который вы удалили эффективно, и форматировать результат красиво:
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("**")
tosort(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