Hacer que el árbol oculte archivos gitignored

Hacer que el árbol oculte archivos gitignored

¿Hay alguna manera de hacer que treeno se muestren los archivos que se ignoran .gitignore?

Respuesta1

Otra forma es posible si estás usandoárbol 1.8.0 ya que soporta la --fromfilebandera:

--fromfile

    Lee una lista de directorios de un archivo en lugar del sistema de archivos. Las rutas proporcionadas en la línea de comando son archivos para leer en lugar de directorios para buscar. El punto (.) directorio indica que el árbol debe leer las rutas de la entrada estándar.

Podríamos usarlo git ls-treepara obtener todos los archivos que no sean ignorados por Git en un proyecto y canalizar la salida a tree.

Suponiendo que tenemos un repositorio git, donde ignoredlos archivos se ignoran en .gitignore:

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

El siguiente comando:

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

Da:

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

2 directories, 3 files

O si necesita una ruta específica:

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

Da:

.
└── a.txt

0 directories, 1 file

Advertencias

  • Tener cuidadoque cambios como archivos eliminados o renombrados que aún no se han confirmado pueden hacer que git ls-treeparezcan desincronizados.

Respuesta2

Ripgreprespeta .gitignore(y algunos otros archivos 'ignorar') de forma predeterminada y puede usarse como una alternativa a los comandos de git. La diferencia es que todos los archivos (excepto los archivos ocultos) se enumeran incluso si aún no se han comprometido al control de versiones:

rg --files | tree --fromfile

Esto se puede usar para crear una función de shell que ordene los directorios primero y permita un uso más flexible (especificando la ruta del directorio y agregando indicadores ripgrep):

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

Requiere árbol> 1,8 como se señala en otra respuesta.

Respuesta3

El árbol sostiene la -Ibandera.

-I pattern

    No incluya aquellos archivos que coincidan con el patrón comodín.

Tree admite un patrón único que excluirá todos los archivos/directorios que coincidan con él.

Los archivos ignorados de Git son un poco más complicados:

La exclusión puede provenir de varios archivos, $HOME/.config/git/ignorela salida de git config --get core.excludesfile( .gitignorepor directorio), ~/.gitignorey más (consulte man gitignore).

Otro problema es que los patrones que treeadmite difieren de lo que hace git (como lo señaló @Brad Urani).

Pero podemos acercarnos...

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

O como funció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
}

Respuesta4

El árbol tiene una --gitignoreopción a partir de la versión 2.0.0, lanzada en diciembre de 2021.

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

información relacionada