29

私はmsysgit(1.7.9)を使用しておりgit ls-files、インデックスから、または現在の作業ディレクトリ(場合は現在の作業ディレクトリ)から、現在のレベルで(追跡された)ファイルとディレクトリだけを表示するコマンドの正しい呼び出しを探していますより簡単に。

基本的に、Githubで表示されるのと同様のディレクトリリストが表示されます。Windowsから来たので、グロブ(?)を行う正しい方法にあまり慣れていません。

4

7 に答える 7

27

git ls-tree HEADsed'dに味わってもらいたいと思います。ls-treeの出力の2番目の単語はtree、ディレクトリ、blobファイル、commitサブモジュールの場合、ファイル名はASCIIタブの後のすべてです。

編集:@iegikのコメントから適応し、質問に合わせて、

git ls-files . | sed s,/.*,/, | uniq

現在のレベルから始まるインデックス付きファイルを一覧表示し、ディレクトリを最初のコンポーネントに折りたたみます。

于 2012-05-04T21:28:15.167 に答える
17

私はgit ls-tree --name-only [branch]あなたが探していることをするだろうと信じています。

于 2012-05-04T18:12:04.283 に答える
6

git ls-tree <tree-ish>良いことですが、インデックスをとして指定する方法がわかりません<tree-ish>。(ただし、それを行うためのすべて大文字の参照があるはずです。)

とにかく、ls-files暗黙的にインデックスで動作するので、それを使用したほうがよいでしょう:

$ git ls-files | cut -d/ -f1 | uniq

これにより、現在のディレクトリにあるファイルとディレクトリのみが表示されます。

cutの引数を変更-fして深さを制御します。たとえば、-f-2ダッシュ2)は、最大2レベルの深さのファイルとディレクトリを示しています。

$ git ls-files | cut -d/ -f-2 | uniq

<path>の引数を指定する場合は、先頭のディレクトリに対応するls-filesために必ず増やしてください。-f

$ git ls-files foo/bar | cut -d/ -f-3 | uniq
于 2017-03-27T02:08:56.770 に答える
5

gitによって追跡されている現在の作業ディレクトリ内のファイルを一覧表示するだけで、次のファイルを使用するよりも数倍高速であることがわかりましたgit ls-tree...

ls | grep -f <(git ls-files)

次のようなディレクトリも含めたい場合は、sedを少しいじる必要があります。

ls | grep -f <(git ls-files | sed 's/\/.*//g' | sort | uniq)  

ファイルの名前に「/」文字が含まれていないと仮定します。と同様...

ls -a | grep -f <(git ls-files | sed 's/\/.*//g' | sort | uniq)

「見えない」(まだ追跡されている)ファイルもリストするため。

于 2015-04-04T19:57:10.653 に答える
2

これがとても難しいことに驚いています...しかし、gitについての私の把握を始めないでください。

jthillの回答の変形は、エイリアス可能のようです(ねえ、私は言語学者です。新しい単語を作成するライセンスを持っています)。バリアントは

ls -d `git ls-tree HEAD | sed -e "s/^.*\t//"`

これは「ls」を使用して出力をフォーマットするため、色分け(使用する場合)などが得られます。これはエイリアスとしても機能します。

alias gitls='ls -d `git ls-tree HEAD | sed -e "s/^.*\t//"`'

FWIWでは、再帰コマンドのエイリアスを作成して、「ls」形式を使用することもできます(たとえば、パスとファイル名が長すぎない場合は、2列の出力、実行可能ファイルの色分けなどが得られます)。

alias gitls-r='ls `git ls-files`'
于 2018-03-05T17:14:08.480 に答える
0

信じられないかもしれませんが、私が見つけた最も簡単な解決策はcd、ターミナルの目的のディレクトリに移動することです。で実行git ls-filesすると、で実行/project/srcするのではなく、そのディレクトリからのみ結果が得られます/project

最も技術的な答えではありませんが、ねえ、それはうまくいきます!

于 2020-05-13T14:55:01.440 に答える
0

この単純なbashスクリプトを使用して、任意のレベルのサブディレクトリを定義します

于 2020-10-31T16:58:03.483 に答える