私はmsysgit(1.7.9)を使用しておりgit ls-files
、インデックスから、または現在の作業ディレクトリ(場合は現在の作業ディレクトリ)から、現在のレベルで(追跡された)ファイルとディレクトリだけを表示するコマンドの正しい呼び出しを探していますより簡単に。
基本的に、Githubで表示されるのと同様のディレクトリリストが表示されます。Windowsから来たので、グロブ(?)を行う正しい方法にあまり慣れていません。
git ls-tree HEAD
sed'dに味わってもらいたいと思います。ls-treeの出力の2番目の単語はtree
、ディレクトリ、blob
ファイル、commit
サブモジュールの場合、ファイル名はASCIIタブの後のすべてです。
編集:@iegikのコメントから適応し、質問に合わせて、
git ls-files . | sed s,/.*,/, | uniq
現在のレベルから始まるインデックス付きファイルを一覧表示し、ディレクトリを最初のコンポーネントに折りたたみます。
私はgit ls-tree --name-only [branch]
あなたが探していることをするだろうと信じています。
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
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)
「見えない」(まだ追跡されている)ファイルもリストするため。
これがとても難しいことに驚いています...しかし、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`'
信じられないかもしれませんが、私が見つけた最も簡単な解決策はcd
、ターミナルの目的のディレクトリに移動することです。で実行git ls-files
すると、で実行/project/src
するのではなく、そのディレクトリからのみ結果が得られます/project
最も技術的な答えではありませんが、ねえ、それはうまくいきます!
この単純なbashスクリプトを使用して、任意のレベルのサブディレクトリを定義します