ツリーにgitignoredファイルを非表示にする

ツリーにgitignoredファイルを非表示にする

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 つの問題は、サポートされるパターンがtreegit が行うものと異なることです (@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

関連情報