0

指定したブランチのベース ディレクトリにあるすべてのマークダウン ファイルを検索したい。git ls-filesが提案されましたが、ドキュメントにはブランチの指定については言及されていません。そのブランチをチェックアウトせずにこれを実行できるようにしたい。これはできますか?

4

2 に答える 2

3

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
于 2019-04-06T06:11:24.553 に答える
3

を使用している場合はgit ls-tree、出力を自分でフィルタリングして、必要なものを grep する必要がある場合があります。

2012年にこのスレッドで言及されたように:

「パターン」には 2 つの使い方があり、前者はおそらく問題ありませんが、後者は誤解を招きます。

このコマンドを書いたとき、2 つの異なる "pathspec" ファミリがあり、ls-tree" diff" ファミリは"先頭のパス パターン" 以外は何も取りませんでしls-filesた (" " および " grep" ファミリのもう 1 つはワイルドカードを使用できます)。 . ls-tree「 / 」ファミリのコマンドにワイルドカードを指定することは、diffサポートされていませんでした。

そのパス引数をパス仕様として使用するように変更ls-treeすると、下位互換性が失われます。

于 2019-04-06T05:02:44.500 に答える