Lassen Sie den Baum gitignored-Dateien ausblenden

Lassen Sie den Baum gitignored-Dateien ausblenden

Gibt es eine Möglichkeit, treedie Anzeige von Dateien zu unterbinden, die in ignoriert werden .gitignore?

Antwort1

Ein anderer Weg ist möglich, wenn Sie verwendenBaum 1.8.0 da es das --fromfileFlag unterstützt:

--fromfile

    Liest eine Verzeichnisliste aus einer Datei statt aus dem Dateisystem. Die in der Befehlszeile angegebenen Pfade sind Dateien, aus denen gelesen werden soll, und keine Verzeichnisse, in denen gesucht werden soll. Der Punkt (.)-Verzeichnis gibt an, dass der Baum Pfade von der Standardeingabe lesen soll.

Wir könnten verwenden, git ls-treeum alle nicht von Git ignorierten Dateien in einem Projekt abzurufen und die Ausgabe an weiterzuleiten tree.

Angenommen, wir haben ein Git-Repository, in dem ignoredDateien in Folgendem ignoriert werden .gitignore:

git_repo
├── .gitignore
├── bar
│   ├── b.txt
│   └── ignored
├── foo
│   ├── a.txt
│   └── ignored
└── ignored

Der folgende Befehl:

git ls-tree -r --name-only HEAD | tree --fromfile

Gibt:

.
├── .gitignore
├── bar
│   └── b.txt
└── foo
    └── a.txt

2 directories, 3 files

Oder wenn Sie einen bestimmten Pfad benötigen:

git ls-tree -r --name-only HEAD foo | tree --fromfile

Gibt:

.
└── a.txt

0 directories, 1 file

Vorbehalte

  • In acht nehmendass Änderungen wie das Löschen oder Umbenennen von Dateien, die noch nicht festgeschrieben wurden, dazu führen können, git ls-treedass die Datei nicht mehr synchron erscheint.

Antwort2

Rippengreprespektiert .gitignore(und einige andere 'ignorieren'-Dateien) standardmäßig und kann als Alternative zu Git-Befehlen verwendet werden. Der Unterschied besteht darin, dass alle Dateien (außer versteckten Dateien) aufgelistet werden, auch wenn sie noch nicht in die Versionskontrolle übernommen wurden:

rg --files | tree --fromfile

Damit lässt sich eine Shell-Funktion erstellen, die zuerst Verzeichnisse sortiert und eine flexiblere Nutzung ermöglicht (Angabe des Verzeichnispfads und Hinzufügen von Ripgrep-Flags):

rg,tree() { rg --files $@|tree --fromfile --dirsfirst }

Erfordert Baum > 1,8, wie in einer anderen Antwort erläutert.

Antwort3

Ein Baum stützt die -IFlagge.

-I pattern

    Listen Sie nicht die Dateien auf, die dem Platzhaltermuster entsprechen.

Tree unterstützt ein einzelnes Muster, das alle entsprechenden Dateien/Verzeichnisse ausschließt.

Die Ignorierdateien von Git sind etwas komplizierter:

Der Ausschluss kann von mehreren Dateien, $HOME/.config/git/ignore, der Ausgabe von git config --get core.excludesfile, .gitignore(pro Verzeichnis), ~/.gitignore, und mehr erfolgen (siehe man gitignore).

Ein weiteres Problem besteht darin, dass die treeunterstützten Muster sich von denen unterscheiden, die Git verwendet (wie von @Brad Urani angemerkt).

Aber wir können uns einigermaßen nahe kommen ...

tree -I "$(grep -hvE '^$|^#' {~/,,$(git rev-parse --show-toplevel)/}.gitignore|sed 's:/$::'|tr \\n '\|')"

Oder als Funktion:

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
}

Antwort4

Tree verfügt --gitignoreab Version 2.0.0 (Veröffentlichung Dezember 2021) über eine Option.

https://gitlab.com/OldManProgrammer/unix-tree/-/blob/master/ÄNDERUNGEN

verwandte Informationen