web-dev-qa-db-ja.com

Mercurialリポジトリの履歴で削除されたファイルをすばやく検索しますか?

Hg grepを使用できますが、すべてのファイルの内容が検索されます。

削除されたファイルのファイル名を検索して1つを復元したい場合はどうなりますか?

Hg grep -I file-name-patternpatternを試しましたが、結果が返されないようです。

58
wsorenson

テンプレートは簡単です を使用:

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

Mercurial 1.6の更新

revsets を使用することもできます:

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

編集:二重*- 1つがリポジトリのルートからの削除のみを検出 。)


Edit:Mathieu Longtinが示唆するように、これは templatedfa's answer toと組み合わせることができますリストされた各リビジョンが削除するwhichファイルを表示します。

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

これには、1行に1つのリビジョンをリストするという(マシンの読みやすさのための)メリットがありますが、%削除リストの各アイテムをフォーマットするには:

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

TortoiseHgワークベンチを使用している場合、リビジョンフィルターを使用すると便利です。 ctrl+sを押して、次のように入力します

removes("**/FileYouWantToFind.txt")

**/は、リポジトリを再帰的に検索することを示します。ファイル名にも*ワイルドカードを使用できます。 andor演算子を使用して、このクエリを他のリビジョンセットと組み合わせることができます。

この高度なクエリエディターもあります: enter image description here

7
Hope

他の答えを取り入れて改善しました。

「--no-merges」が追加されました。開発チームによる大規模なプロジェクトでは、多くのマージが行われます。 --no-mergerはログノイズを除外します。

removes("**")sort(removes("**"), -rev)に変更します。 10万以上の変更セットを持つ大規模なプロジェクトの場合、これにより、最新のファイルが大幅に削除されます。これは、代わりにrev 0からの開始からtipからの開始に順序を逆にします。

{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
0

効率的に削除した特定のファイルを検索し、結果を適切にフォーマットします。

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
mpen