web-dev-qa-db-ja.com

GITリポジトリ内のパターンに一致するファイル名を変更するコミットを検索する

コードベースで、ビデオファイルを追加してそれらを破棄するコミットを見つけたいのですが。 gitでこれらのファイルを探す方法はありますか?

たとえば、すべてのビデオのファイル名が拡張子.wmvで終わっているとします。これらのファイルを紹介するすべてのコミットを見つけて、修正などでそれらを取り除きたいと思います。

何か案は ?

35
Bastes

git logをpathspecで使用できます。

git log --all -- '*.wmv'

これにより、.wmvファイルに変更を加えるすべてのコミットが取得されます。はい、これもサブディレクトリに分類されます(ただし、pathspecを一重引用符で囲む必要があるため、そのままgitに渡されます)。

コミットハッシュ(スクリプトなど)のみに関心がある場合は、git rev-list機構を直接使用してください。

git rev-list --all -- '*.wmv'
42
knittl

これらのファイルをすべてのコミットから削除する場合は、filter-branchコマンドを使用して履歴全体を書き換えることを検討してください。例えば。、

git filter-branch --index-filter 'git rm --cached --ignore-unmatch -r *.wml' HEAD
6
adl

あなたはこれを試すことができます:

git log --follow *.wmv

これにより、wmvファイルを変更したすべてのコミット(ハッシュ付き)が一覧表示されます。

1
Eriko Morais

これはgitkでも機能し、[表示]/[新しいビュー]/[含めるファイルとディレクトリの入力]を1行に1つずつ使用します。

ただし、ファイル名のパスセクションをカバーするワイルドカードが必要であることに注意してください。そうしないと、何も表示されません。

たとえば、backup-script.shというファイルがあり、ファイルツリーのさまざまな場所にさまざまな寿命(!)が表示されていて、すべてのバージョンを表示する場合は、次のように指定する必要があります。

*/backup-script.sh
0
MikeW

コミットハッシュと各コミットに関連するファイル名を表示するには、次のコマンドを使用できます。

git rev-list --all -- '*.wmv' $1 | while read x; do git diff-tree --name-only -r $x; done | grep -E '((\.wmv$)|(^[^\.]+$))'

これにより、コミットハッシュに続いて、検索文字列に一致するファイル名が出力されます。

0
wyattis

うん、前述のように、私は、それらを導入するコミットを削除しても、blobは削除されないという考えだと思います

主題と例の広範な取り扱いについては、 http://progit.org/book/ch9-7.html#removing_objects を参照してください。

0
sehe

リポジトリからファイルを削除する(つまり履歴を書き換える)ことが目的の場合は、 BFG Repo-Cleaner を使用します。例:

bfg --delete-files '*.wmv' --private --no-blob-protection

ファイルが関連している場合は、 Git LFS を使用してバージョン管理下に置くことができます。 移行 (履歴の書き換えも)するには、次のような操作を行います。

git-lfs-migrate \
    -s original.git  \
    -d converted.git \
    -l https://user:[email protected]:8080 \
    '*.wmv'

コミットを簡単にリストまたは調べるために、knittlの回答を参照します。

git rev-list --all -- '*.wmv'
git log --all -- '*.wmv'
0
filipos