Найти удаленные файлы в истории хранилища Mercurial, быстро? - PullRequest
58 голосов
/ 18 июня 2009

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

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

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

Ответы [ 6 ]

84 голосов
/ 18 июня 2009

с использованием шаблонов просто :

$ hg log --template "{rev}: {file_dels}\n"
49 голосов
/ 06 сентября 2010

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

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

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

( Редактировать: Обратите внимание на двойной * - , единственный обнаруживает удаления только из корня хранилища .)


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

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

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

hg log -r "removes('**')" --template "{rev}:\n{file_dels % '{file}\n'}\n"
7 голосов
/ 08 сентября 2016

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

removes("**/FileYouWantToFind.txt")

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

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

0 голосов
/ 14 августа 2017

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

Добавлено "--no-merges". На большом проекте с командами разработчиков будет много слияний. --no-merger отфильтровывает шумы журнала.

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

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

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
0 голосов
/ 14 марта 2016

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

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