Быстро найти удаленные файлы в истории хранилища Mercurial?

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

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

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

Ответ 2

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

Вы также можете использовать revsets:

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

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


Изменить. Как предполагает Матье Лонгтин, это можно объединить с template из dfa answer, чтобы показать вам, какие файлы удаляются каждой из перечисленных ревизий:

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

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

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

Ответ 3

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

removes("**/FileYouWantToFind.txt")

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

Существует также этот редактор расширенных запросов: введите описание изображения здесь

Ответ 4

Найдите конкретный файл, который вы удалили эффективно, и хорошо отформатируйте результат:

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

Ответ 5

Я взял другие ответы и улучшил его.

Добавлено "--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) <[email protected]> 
 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) <[email protected]> 
 SL-276 WIP - removed avatar_XXX_orig.xml files.

  indra/newview/character/avatar_lad_orig.xml
  indra/newview/character/avatar_skeleton_orig.xml

Ответ 6

из корня проекта

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