web-dev-qa-db-fra.com

Trouver des fichiers supprimés dans l'historique du référentiel Mercurial, rapidement?

Vous pouvez utiliser hg grep, mais il recherche le contenu de tous les fichiers.

Et si je veux juste rechercher les noms de fichiers des fichiers supprimés pour en récupérer un?

J'ai essayé hg grep -I modèle de nom de fichier modèle mais cela ne semble pas donner de résultat.

57
wsorenson

utiliser templates est simple :

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

Mise à jour pour Mercurial 1.6

Vous pouvez aussi utiliser revsets pour cela:

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

( Éditer: Notez le double * - un seul détecte les suppressions à la racine du référentiel uniquement .)}


Edit : Comme Mathieu Longtin le suggère, cela peut être combiné avec le template de la réponse de dfa pour afficher les qui fichiers supprimés par chaque révision répertoriée:

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

Cela présente l’avantage (pour la lisibilité de la machine) de lister une révision par ligne, mais vous pouvez rendre la sortie plus jolie pour les humains en utilisant % pour formater chaque élément de la liste des suppressions:

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

Si vous utilisez TortoiseHg workbench, le filtre de révision est un moyen pratique. Appuyez simplement sur ctrl+s, puis tapez

removes("**/FileYouWantToFind.txt")

**/ indique que vous souhaitez effectuer une recherche récursive dans votre référentiel. Vous pouvez également utiliser le caractère générique * dans le nom du fichier. Vous pouvez combiner cette requête avec d'autres ensembles de révision à l'aide des opérateurs and, or.

Il existe également cet éditeur de requêtes avancé:  enter image description here

6
Hope

J'ai pris d'autres réponses et je l'ai amélioré.

Ajouté "--no-merges". Sur grand projet avec des équipes de développement, il y aura beaucoup de fusions. --no-fusion éliminera le bruit du journal.

Remplacez removes("**") par sort(removes("**"), -rev). Pour un projet de grande envergure avec plus de 100 000 modifications, les fichiers les plus récents supprimés seront beaucoup plus rapides. Cela inverse l'ordre de commencer à rev 0 pour commencer à tip à la place.

Ajout de {author} et {desc} à la sortie. Cela donnera un contexte quant à la raison pour laquelle les fichiers ont été supprimés en affichant le commentaire du journal et à qui l'a fait.

Donc, pour mon cas d'utilisation, c'était 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

Exemple de sortie:

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
0
Techwolf Lupindo

Recherchez un fichier spécifique que vous avez supprimé efficacement et formatez le résultat correctement:

hg log --template "File(s) deleted in rev {rev}: {file_dels % '\n  {file}'}\n\n" -r 'removes("**/FileYouWantToFind.txt")'

Exemple de sortie:

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
mpen