コードベースで、ビデオファイルを追加してそれらを破棄するコミットを見つけたいのですが。 gitでこれらのファイルを探す方法はありますか?
たとえば、すべてのビデオのファイル名が拡張子.wmvで終わっているとします。これらのファイルを紹介するすべてのコミットを見つけて、修正などでそれらを取り除きたいと思います。
何か案は ?
git log
をpathspecで使用できます。
git log --all -- '*.wmv'
これにより、.wmvファイルに変更を加えるすべてのコミットが取得されます。はい、これもサブディレクトリに分類されます(ただし、pathspecを一重引用符で囲む必要があるため、そのままgitに渡されます)。
コミットハッシュ(スクリプトなど)のみに関心がある場合は、git rev-list
機構を直接使用してください。
git rev-list --all -- '*.wmv'
これらのファイルをすべてのコミットから削除する場合は、filter-branch
コマンドを使用して履歴全体を書き換えることを検討してください。例えば。、
git filter-branch --index-filter 'git rm --cached --ignore-unmatch -r *.wml' HEAD
あなたはこれを試すことができます:
git log --follow *.wmv
これにより、wmvファイルを変更したすべてのコミット(ハッシュ付き)が一覧表示されます。
これはgitkでも機能し、[表示]/[新しいビュー]/[含めるファイルとディレクトリの入力]を1行に1つずつ使用します。
ただし、ファイル名のパスセクションをカバーするワイルドカードが必要であることに注意してください。そうしないと、何も表示されません。
たとえば、backup-script.shというファイルがあり、ファイルツリーのさまざまな場所にさまざまな寿命(!)が表示されていて、すべてのバージョンを表示する場合は、次のように指定する必要があります。
*/backup-script.sh
コミットハッシュと各コミットに関連するファイル名を表示するには、次のコマンドを使用できます。
git rev-list --all -- '*.wmv' $1 | while read x; do git diff-tree --name-only -r $x; done | grep -E '((\.wmv$)|(^[^\.]+$))'
これにより、コミットハッシュに続いて、検索文字列に一致するファイル名が出力されます。
うん、前述のように、私は、それらを導入するコミットを削除しても、blobは削除されないという考えだと思います
主題と例の広範な取り扱いについては、 http://progit.org/book/ch9-7.html#removing_objects を参照してください。
リポジトリからファイルを削除する(つまり履歴を書き換える)ことが目的の場合は、 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'