tree
で無視されるファイルを表示しないようにする方法はありますか.gitignore
?
答え1
別の方法としては、ツリー 1.8.0
フラグをサポートしているため--fromfile
:
--fromfile
ファイルシステムではなくファイルからディレクトリリストを読み取ります。コマンドラインで指定されたパスは、検索するディレクトリではなく、読み取り元のファイルです。ドット (
.
) ディレクトリは、ツリーが標準入力からパスを読み取る必要があることを示します。
git ls-tree
を使用して、プロジェクト内の git で無視されないすべてのファイルを取得し、出力を にパイプすることができますtree
。
git リポジトリがあり、以下のignored
ファイルが無視されていると仮定します.gitignore
。
git_repo
├── .gitignore
├── bar
│ ├── b.txt
│ └── ignored
├── foo
│ ├── a.txt
│ └── ignored
└── ignored
次のコマンド:
git ls-tree -r --name-only HEAD | tree --fromfile
与えるもの:
.
├── .gitignore
├── bar
│ └── b.txt
└── foo
└── a.txt
2 directories, 3 files
または、特定のパスが必要な場合:
git ls-tree -r --name-only HEAD foo | tree --fromfile
与えるもの:
.
└── a.txt
0 directories, 1 file
注意点
- 注意してくださいまだコミットされていないファイルの削除や名前の変更などの変更により、
git ls-tree
同期されていないように見える場合があります。
答え2
リプグレップは、デフォルトで尊重され.gitignore
(他のいくつかの「無視」ファイルも)、git コマンドの代替として使用できます。違いは、バージョン管理にまだコミットされていない場合でも、すべてのファイル (隠しファイルを除く) がリストされることです。
rg --files | tree --fromfile
これを使用すると、最初にディレクトリをソートし、より柔軟な使用を可能にするシェル関数を作成できます (ディレクトリ パスを指定し、ripgrep フラグを追加します)。
rg,tree() { rg --files $@|tree --fromfile --dirsfirst }
別の回答で指摘されているように、tree > 1.8 が必要です。
答え3
木は-I
旗をサポートします。
-I pattern
ワイルドカード パターンに一致するファイルをリストしません。
ツリーは、それに一致するすべてのファイル/ディレクトリを除外する単一のパターンをサポートします。
Git の無視ファイルはもう少し複雑です:
除外は、複数のファイル、、 $HOME/.config/git/ignore
の出力git config --get core.excludesfile
、.gitignore
(ディレクトリごと)、~/.gitignore
などから発生する可能性があります(を参照man gitignore
)。
もう 1 つの問題は、サポートされるパターンがtree
git が行うものと異なることです (@Brad Urani が指摘)。
でも、かなり近づくことはできる...
tree -I "$(grep -hvE '^$|^#' {~/,,$(git rev-parse --show-toplevel)/}.gitignore|sed 's:/$::'|tr \\n '\|')"
または関数として:
function gtree {
git_ignore_files=("$(git config --get core.excludesfile)" .gitignore ~/.gitignore)
ignore_pattern="$(grep -hvE '^$|^#' "${git_ignore_files[@]}" 2>/dev/null|sed 's:/$::'|tr '\n' '\|')"
if git status &> /dev/null && [[ -n "${ignore_pattern}" ]]; then
tree -I "${ignore_pattern}" "${@}"
else
tree "${@}"
fi
}
答え4
tree に--gitignore
は、2021 年 12 月にリリースされたバージョン 2.0.0 以降、オプションがあります。
https://gitlab.com/OldManProgrammer/unix-tree/-/blob/master/CHANGES