指定したブランチのベース ディレクトリにあるすべてのマークダウン ファイルを検索したい。git ls-files
が提案されましたが、ドキュメントにはブランチの指定については言及されていません。そのブランチをチェックアウトせずにこれを実行できるようにしたい。これはできますか?
2 に答える
git ls-files
インデックスまたは作業ツリー(または両方)のファイルを調べます。現在のインデックスと作業ツリーの内容は通常、現在のブランチの先端から抽出された現在のコミットを反映しているため、この方法では機能しません。しかし、回避策があります。
VonCが指摘しているように、コミットに格納されているようなツリーオブジェクトをgit ls-tree
調べます。ただし、などの pathspec 引数は受け入れません。git ls-tree
**/*.md
回避策は、目的のコミットを一時インデックスに読み込むことです。これをきれいに行うには、 を使用mktemp
して一時ファイルを作成し、一時ファイルを削除して、git read-tree
検査したいコミットのイメージを含む有効な一時インデックスとしてファイルを再作成しますgit ls-files
。例えば:
$ cd git
$ sh -c 'export GIT_INDEX_FILE=$(mktemp); rm $GIT_INDEX_FILE; git read-tree e83c5163316f89bfbde7d9ab23ca2e25604af290; git ls-files -- "*.h" "**/*.h"; rm $GIT_INDEX_FILE'
cache.h
$ sh -c 'export GIT_INDEX_FILE=$(mktemp); rm $GIT_INDEX_FILE; git read-tree origin/master; git ls-files -- "*.md"; rm $GIT_INDEX_FILE'
.github/CONTRIBUTING.md
.github/PULL_REQUEST_TEMPLATE.md
README.md
contrib/vscode/README.md
を使用している場合はgit ls-tree
、出力を自分でフィルタリングして、必要なものを grep する必要がある場合があります。
2012年にこのスレッドで言及されたように:
「パターン」には 2 つの使い方があり、前者はおそらく問題ありませんが、後者は誤解を招きます。
このコマンドを書いたとき、2 つの異なる "pathspec" ファミリがあり、
ls-tree
"diff
" ファミリは"先頭のパス パターン" 以外は何も取りませんでしls-files
た (" " および "grep
" ファミリのもう 1 つはワイルドカードを使用できます)。 .ls-tree
「 / 」ファミリのコマンドにワイルドカードを指定することは、diff
サポートされていませんでした。そのパス引数をパス仕様として使用するように変更
ls-tree
すると、下位互換性が失われます。