Git-現在ソース管理下にあるすべてのファイルをリストしますか?


122

現在gitでソース管理下にあるすべてのファイルをリストする方法はありますか?(変更されたものだけではありません)。

回答:


129

特定のブランチのすべてのファイルをリストしたい場合、例えばmaster

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

この-rオプションにより、サブディレクトリに再帰して、現在バージョン管理下にある各ファイルを印刷できます。HEAD代わりにmaster、他のブランチのリストを取得するように指定することもできます。

これまでに存在したすべてのファイルのリストを取得する場合は、こちらを参照してください

git log --pretty = format:--name-only --diff-filter = A | ソート-u

1
slhckに感謝します。まさに私が望んでいたことです。2番目のものについても知っておくと便利です。許可されたら、5分半で正しいとマークします。:
匿名

3
答えてくれてありがとう。これを探していました。git ls-tree -r master --name-onlyを必要とせずに、最初のオプションと同じことを行うことに注意してくださいcut。ああ、現在のブランチにこのリストが必要な場合は、HEAD代わりに指定できますmaster
maurits

6
「git ls-files」を実行すると、数文字節約できます:)
Zain R

なぜエンディングが与えられてカットされたの-ですか?これにより、いくつかの追加行で、2番目の列にいくつかのファイルが表示されます。
エイドリアン

@Adrianアイデアはありません。当時はコピーペーストされていましたが、現在修正済みです。
slhck

61

git ls-filesコマンドは何が必要でしょう。

ソース:http : //www.kernel.org/pub/software/scm/git/docs/git-ls-files.html


4
git ls-files代わりにgit ls-tree -r master --name-only確かに簡単です。
空手犬

1
申し訳ありませんが、私の編集は無効ではありませんでした。現在のgitにはgit-ls-filesバイナリはありません。コマンドにgitバイナリがありls-filesます。ドキュメントへのリンクの内容は正しいですが、技術的には古いバイナリです。
JonnyJD 14年

@JonnyJD。編集はコメントである必要があるため、おそらく無効とマークされています。
アシェラー14年

1
@JonnyJDすべてのGitのマン・ページは次のように命名されgit-commitgit-initgit-ls-files、などのプログラムは、実際にサブコマンドであっても。git-ls-filesおそらくバイナリはありませんでした。その理由はgit foogit-fooバイナリを書き込むことでコマンドを登録できる外部サブコマンドメカニズムと一貫性があるためです。
ラドンロズバラ

4

git ls-files 現在の作業ディレクトリ内のファイルのみを印刷します。

たとえば、ドットcore.worktree = /ファイルのgitリポジトリ()がある場合、gitルートの外部にファイルがあり、その単純なコマンドは機能しなくなります。

要するに、これは動作します:

git --git-dir "`git rev-parse --git-dir`" \
    -C "`git config core.worktree || pwd`" \
    ls-files

例:

mkdir ~/dotfiles
cd ~/dotfiles
git config core.worktree /

# Ignore all files by default, else Git will find all files under "/"
echo "*" > .git/info/exclude

# Add files at the git repo's root and somewhere in the work tree
touch README
git add -f README
git add -f /etc/ssh/sshd_config

# `git status` would now print:
# new file:   ../../../etc/ssh/sshd_config
# new file:   README
git status

git commit -m "Initial commit"

# At this point, `git ls-files` prints only:
# README
git ls-files

# But you can print all files inside the work tree. This will print:
# etc/ssh/sshd_config
# home/yourusername/dotfiles/README
git --git-dir "`git rev-parse --git-dir`" -C "`git config core.worktree || pwd`" ls-files

現在の(シェル)ディレクトリからの相対パスを指定したい場合、これは仕事をします:

alias gls='git ls-tree -r master --name-only HEAD "`git config core.worktree`"'

上記の例では、印刷されます

README
../../../etc/ssh/sshd_config

git v2.21ではgit ls-files、現在のディレクトリ以下にすべてが表示されます。リポジトリで削除されたファイルは表示されません。
エイドリアン

0

gitkインタラクティブなリポジトリビューアを使用することもできます。


1
これはツールに言及していますが、実際には「方法」には答えていません。これを実用的なソリューションに拡張できますか?誰かに自分のソリューションを開発するための研究の方向性を示すだけで、コメントとしてより適切です。ありがとう。 レビューから
fixer1234

-2

スクリーンショット

画像をご覧ください。右側には、パッチとツリーの2つのオプションがあります。ツリーを選択すると、各コミットのフォルダー構造を表示できます。


スクリーンショットへのより良いコミットを検討してください。そうすれば、それほど検閲する必要はありません。
ソルビョーンラヴンアンデルセン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.