追跡されているファイルのリストをgitに表示するにはどうすればよいですか?


535

コマンドラインgitを使用して、リポジトリで追跡されているファイルのリストをgitに表示するにはどうすればよいですか?



2
そうだと思います。しかし、これがより良い答えを持っているとき、これをdupとしてマークすることは正しくないと思います。
lindhe 2016年

5
パラレルユニバースでは、この質問がすべての回答を含めてどれだけ似ているかは驚くべきことですが、それぞれに独自の特徴があります。
Jeff Puckett 2017

回答:


628

現在ブランチmasterで追跡されているすべてのファイルを一覧表示する場合は、次のコマンドを使用できます。

git ls-tree -r master --name-only

これまでに存在したファイルのリストが必要な場合(つまり、削除されたファイルを含む):

git log --pretty=format: --name-only --diff-filter=A | sort - | sed '/^$/d'

61
現在のブランチのファイルを一覧表示する場合は、git ls-tree -r HEAD --name-onlyを使用します
Ramast

3
ディレクトリが表示されないのはなぜですか?
Shuzheng 2016年

13
@NicolasLykkeIversen- gitディレクトリを直接バージョン管理しません。代わりに、ファイルとそのパスを保存します。ls-treeバージョン管理されたすべてのファイルを出力します。この違いをよりよく理解するには、空のディレクトリをにステージングしてみてくださいgit。空のディレクトリは、段階的な変更では表示されません。このような空のディレクトリをバージョン管理する唯一の方法は、実際にはディレクトリの下のファイルをバージョン管理することです。バージョン管理でそのような空のプレースホルダーディレクトリが必要な使用例では、ディレクトリの下にダミーファイルを作成し、バージョン管理できます。説明がはっきりしているといいのですが。
Tuxdude 2016年

2
ただ注意してください、ステージングエリアに追跡されたファイルをls-tree master表示しません。
nn0p

多くのサブディレクトリとファイルが含まれている場合、最上位のディレクトリのみを表示することは可能ですか?
Blaszard 2017年

191

gitが管理するファイルはで表示されgit ls-filesます。マニュアルページをチェックしてください。


4
現在のディレクトリ以下のファイルのみが表示されるようです。
Lyle Z

11
これを編集して、マニュアルページの関連セクションを含めてもよいですか?
Nathan Basanese 2015

1
@NathanBasaneseおそらく、その情報を使用して別の回答を追加できます。
ホセ・カストロ

@LyleZは、おそらくこれは、に合わせてあることを意図しているls...かls -R
flow2k

1
@LyleZまた、この動作はと同じですgit ls-tree-に関連していpwdます。
flow2k 2017

18

受け入れられた回答は、現在のディレクトリのツリー内のファイルのみを表示します。(現在のブランチで)コミットされたすべての追跡ファイルを表示するには、次のコマンドを使用します。

git ls-tree --full-tree --name-only -r HEAD
  • --full-tree リポジトリのルートディレクトリにいるかのようにコマンドを実行します。
  • -rサブディレクトリに再帰します。と組み合わせると--full-tree、すべてのコミット済みの追跡ファイルが提供されます。
  • --name-only ファイルパスだけが必要な場合のSHA /許可情報を削除します。
  • HEAD追跡され、コミットされたファイルのリストが必要なブランチを指定します。これをmaster他のブランチ名に変更できHEADますが、現在チェックアウトしているコミットです。

これは、〜duplicateの質問https://stackoverflow.com/a/8533413/4880003に対する承認済みの回答からの方法です。


ありがとう!これは、裸のリポジトリでも機能します。
hzpc-joostk

5

これでカラー出力が必要になる場合があります。

現在のブランチの現在のディレクトリにある追跡されたファイルとディレクトリをリストするために、この1行を使用します。

ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)

あなたはそれをエイリアスとして追加したいかもしれません:

alias gl='ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)'

ファイルを再帰的にリストしたい場合:

'ls' --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)

そしてエイリアス:

alias glr="'ls' --color=auto -d \$(git ls-tree -rt \$(git branch | grep \\* | cut -d \" \" -f2) --name-only)"

glr:私はあなたが提供する最初の別名の形式とバージョンはより一貫作ってあなたが提供する別名は少し奇妙に見えましたalias glr='ls --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)'git version 2.20.1Debian 10でテスト済み
baltakatei
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.