¿Hay una manera de representar un árbol de directorios en un Github README.md?


En mis repositorios de Githubs documentación Quiero representar una estructura de árbol de directorios como esta:

introduzca la descripción de la imagen aquí

¿Hay alguna manera de hacer eso con Github sabor markdown, además de simplemente crearlo con ascii art?

Así que básicamente como esta pregunta, pero me pregunto si hay una solución específica de github.

Author: Oliver Matthews, 2014-06-02

8 answers

No directamente, no. Tendrías que crearlo a mano y ponerlo en ti mismo. Suponiendo que esté usando un * nix box localmente y esté usando utf, entonces tree lo generará muy bien (creo que eso es lo que generó el ejemplo que usó anteriormente).

Suponiendo que te refieras a readme.md como el destino de la documentación, entonces creo que la única forma de automatizarlo sería un gancho de git pre-commit que corriera tree y lo incrustara en tu archivo readme. Te gustaría hacer un diff para asegurarse de que sólo actualizado el readme si la salida cambió.

Otoh si está manteniendo documentos separados a través de páginas github, entonces lo que podría hacer, es cambiar a usar jekyll (u otro generador) localmente y empujar las páginas estáticas usted mismo. A continuación, podría implementar los cambios que desee, ya sea como un plugin / shell script* / cambios manuales (si no varían mucho), o utilizar el mismo método que el anterior.

* Si lo integra en un gancho de confirmación, puede evitar agregar cualquier extra pasos para cambiar tus páginas.

 9
Author: Oliver Matthews,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-02 09:49:45

Escribí un pequeño guión que hace el truco:

#!/bin/bash

#File: tree-md

tree=$(tree -tf --noreport -I '*~' --charset ascii $1 |
       sed -e 's/| \+/  /g' -e 's/[|`]-\+/ */g' -e 's:\(* \)\(\(.*/\)\([^/]\+\)\):\1[\4](\2):g')

printf "# Project tree\n\n${tree}"

Ejemplo:

Orden original del árbol:

$ tree
.
├── dir1
│   ├── file11.ext
│   └── file12.ext
├── dir2
│   ├── file21.ext
│   ├── file22.ext
│   └── file23.ext
├── dir3
├── file_in_root.ext
└── README.md

3 directories, 7 files

Comando del árbol de Markdown:

$ ./tree-md .
# Project tree

.
 * [tree-md](./tree-md)
 * [dir2](./dir2)
   * [file21.ext](./dir2/file21.ext)
   * [file22.ext](./dir2/file22.ext)
   * [file23.ext](./dir2/file23.ext)
 * [dir1](./dir1)
   * [file11.ext](./dir1/file11.ext)
   * [file12.ext](./dir1/file12.ext)
 * [file_in_root.ext](./file_in_root.ext)
 * [README.md](./README.md)
 * [dir3](./dir3)

Resultado renderizado:

(Los enlaces no son visibles en Stackoverflow...)

Proyecto árbol
  • tree-md
  • dir2
    • file21.ext
    • file22.ext
    • file23.ext
  • dir1
    • file11.ext
    • file12.ext
  • file_in_root.ext
  • README.md
  • dir3
 23
Author: Simon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-09 10:57:30

Conseguí resolver el problema de esta manera:

  1. Insertar comando tree en bash.

    Ejemplo

    introduzca la descripción de la imagen aquí

  2. Crear un README.md en el repositorio github y copie la página del bash

  3. Insertar código de descuento

    Ejemplo

    introduzca la descripción de la imagen aquí

  4. Ver la salida y ser feliz =)

    introduzca la descripción de la imagen aquí

 22
Author: Jonathas B. C.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-09 21:53:12

Hice un módulo de nodo para automatizar esta tarea: mddir

Uso

Nodo mddir "../relative/path / "

Para instalar: npm install mddir-g

Para generar markdown para el directorio actual: mddir

Para generar para cualquier ruta absoluta: mddir/absolute / path

Para generar una ruta relativa: mddir ~/Documents/whatever.

El archivo md se genera en su directorio de trabajo.

Actualmente ignora node_modules, and.git carpeta.

Solución de problemas

Si recibe el error 'node\r: No such file or directory', el problema es que su sistema operativo utiliza diferentes terminaciones de línea y mddir no puede analizarlas sin establecer explícitamente el estilo de terminación de línea a Unix. Esto suele afectar a Windows, pero también a algunas versiones de Linux. La configuración de los finales de línea al estilo Unix debe realizarse dentro de la carpeta global bin mddir npm.

Finales de línea fix

Obtener la ruta de la carpeta npm bin con:

npm config get prefix

Cd en esa carpeta

Instalación de brew dos2unix

Dos2unix lib/node_modules/mddir/src/mddir.js

Esto convierte los finales de línea a Unix en lugar de Dos

Luego ejecute de forma normal con: nodo mddir"../ relative / path/".

Ejemplo de estructura de archivo de markdown generado 'directoryList.md"

    |-- .bowerrc
    |-- .jshintrc
    |-- .jshintrc2
    |-- Gruntfile.js
    |-- README.md
    |-- bower.json
    |-- karma.conf.js
    |-- package.json
    |-- app
        |-- app.js
        |-- db.js
        |-- directoryList.md
        |-- index.html
        |-- mddir.js
        |-- routing.js
        |-- server.js
        |-- _api
            |-- api.groups.js
            |-- api.posts.js
            |-- api.users.js
            |-- api.widgets.js
        |-- _components
            |-- directives
                |-- directives.module.js
                |-- vendor
                    |-- directive.draganddrop.js
            |-- helpers
                |-- helpers.module.js
                |-- proprietary
                    |-- factory.actionDispatcher.js
            |-- services
                |-- services.cardTemplates.js
                |-- services.cards.js
                |-- services.groups.js
                |-- services.posts.js
                |-- services.users.js
                |-- services.widgets.js
        |-- _mocks
            |-- mocks.groups.js
            |-- mocks.posts.js
            |-- mocks.users.js
            |-- mocks.widgets.js
 14
Author: John Byrne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-28 04:49:47

La mejor manera de hacer esto es rodear el árbol en los tres backsticks para denotar un bloque de código. Para obtener más información, consulte los documentos de markdown: http://daringfireball.net/projects/markdown/syntax#code

 7
Author: joe sepi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-17 15:39:15

Puedes usar etiquetas

 como lo hice en uno de mis proyectos  .
 2
Author: borngeek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-24 07:23:56

También puede comprobar este paquete tree-extended. Se puede usar como una aplicación de línea de comandos usando node > = 6.x.

Es muy similar a tree pero también tiene la opción de configurar el max deep en el árbol, que es una de las cosas horribles del mismo. También puede filtrar usando el archivo .gitignore.

introduzca la descripción de la imagen aquí

 1
Author: Raúl Otaño,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-15 01:19:47

Si está usando Atom editor, puede usar este paquete para escribir fácilmente árboles ASCII: ascii-tree

 0
Author: Ramtin Soltani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-27 12:22:25