Вопрос по version-control – Найти удаленные файлы в истории хранилища Mercurial, быстро?

58

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

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

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

Ваш Ответ

5   ответов
0

Добавлен & quot; - без слияний & quot ;. На большом проекте с командами разработчиков будет много слияний. --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) <[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
7

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

removes("**/FileYouWantToFind.txt")

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

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

49
Update for Mercurial 1.6

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

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

(Edit: Note the double * - один обнаруживает удаления только из корня хранилища.)

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

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

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

hg log -r "removes('**')" --template "{rev}:\n{file_dels % '{file}\n'}\n"
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededhg log -r "removes('**')"Error: User Rate Limit Exceededhg log --template "{rev}: {file_dels}\n"Error: User Rate Limit Exceededhg log -r "removes('**')"Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededhg log -r "removes('**')"Error: User Rate Limit Exceededhg log --template "{rev}: {file_dels}\n"Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
84

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

$ hg log --template "{rev}: {file_dels}\n"
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededhg revert -r 123 path/to/the/file.txtError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
-1

hg status . | grep "\!" >> /tmp/filesmissinginrepo.txt
Error: User Rate Limit Exceeded

Похожие вопросы