Чи є спосіб представити дерево каталогів у Github README.md?


80

У моїй документації щодо репозиторіїв Githubs я хочу представити структуру дерева каталогів наступним чином:

введіть тут опис зображення

Чи є спосіб зробити це за допомогою ароматної націнки Github, крім того, щоб просто створити її за допомогою мистецтва ascii?

Тому в основному це питання подобається , але мені цікаво, чи існує конкретне рішення для github.


2
Якщо ви використовуєте редактор Atom, ви можете використовувати цей пакет, щоб легко писати дерева ASCII: ascii-tree
Ramtin Soltani

Щойно створив проект з тією ж метою. Це сценарій python3. github.com/prncvrm/Project-Structure Відвідайте, спробуйте вирішити проблеми або вилку.
князь

Відповіді:


30

Не безпосередньо, ні. Вам доведеться вручну створити його і вкласти в себе. Якщо припустити, що ви використовуєте поле * nix локально і використовуєте utf, тоді дерево буде його генерувати красиво (я вважаю, що саме це породило приклад, який ви використовували вище).

Якщо припустити, що ви маєте на увазі readme.mdяк ціль документації, тоді, я думаю, єдиним способом, яким ви можете це автоматизувати, був би git-попередній коміт, який запускався treeта вбудовував його у ваш файл readme. Ви хочете зробити різницю, щоб переконатись, що ви оновлювали readme, лише якщо вихідні дані змінювалися.

Отже, якщо ви ведете окремі документи на сторінках github, то, що ви могли б зробити, це перейти на використання jekyll (або іншого генератора) локально та самостійно просувати статичні сторінки. Тоді ви можете потенційно реалізувати потрібні зміни як плагін / скрипт оболонки * / ручні зміни (якщо вони не будуть сильно відрізнятися), або скористатися тим самим методом, що описаний вище.

* Якщо ви інтегруєте його в гачок коміту, ви можете уникнути додавання додаткових кроків до зміни своїх сторінок.


1
Дякую за відповідь, але це не те, що я мав на увазі. Я хотів запитати, чи є спосіб представити дерево каталогів у вашому readme (з вкладанням тощо), а не генерувати його. Я відредагував питання для ясності.

Як і в одному із таких посилань, як сортування, яке ви отримаєте в apache, якщо у вас немає index.html?
Олівер Метьюз

Ні, я маю на увазі те, що якщо у вашому readme є простий спосіб створити щось подібне: imgur.com/OHfWdLk .

3
На Mac ви можете встановити treeкоманду за допомогою Homebrew , тобто brew install tree. Потім із каталогу, який я хотів представляти, я побіг, tree . >> tree.txtа потім скопіював та відредагував текст у своєму файлі README.md. Зробив саме те, що мені потрібно!
морфатичний

1
Чому ця відповідь приймається? Для цього є багато хороших утиліт. Не робіть цього посібника. Перевірте це. github.com/michalbe/md-file-tree
nagendra547

121

Я вирішив проблему таким чином:

  1. Вставити команду tree в bash.

Приклад

введіть тут опис зображення

  1. Створіть README.md у сховищі github та скопіюйте результат bash
  2. Вставте файл .md у код знижки

Приклад

введіть тут опис зображення 4. Перегляньте результати і будьте щасливі =) введіть тут опис зображення


1
Ось приклад, який ви можете скопіювати, я знайшов це на github
П'єтро Надаліні

1
Зверніть увагу, що в деяких випадках, використовуючи "` `bash ...` `", буде виділено деякі слова. Натомість ви можете використовувати тег "pre": "<pre> ... </pre>".
Ліран Фунаро,

39

Я написав невеликий сценарій, який робить фокус:

#!/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}"

Приклад:

Оригінальна команда дерева:

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

3 directories, 7 files

Команда дерева розмітки:

$ ./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)

Наданий результат:

(Посилання не видно в Stackoverflow ...)

Дерево проектів
  • дерево-мд
  • dir2
    • file21.ext
    • file22.ext
    • file23.ext
  • dir1
    • file11.ext
    • file12.ext
  • file_in_root.ext
  • README.md
  • dir3

Така чудова ідея! Зберігаючи свої хвилини в git, і тепер я можу легко оновити README TOC. Дякую! Ви думали зробити його більш налаштованим?
Березовський

1
Також запропонуйте цей пакет nodejs від @michalbe github.com/michalbe/md-file-tree
mikequentel

Чи є спосіб обмежити глибину дерева?
Sami-L

1
Це не спрацювало для mac. !! Я використовував дерево встановлення brew для встановлення дерева.
nagendra547

Чувак ... це чудово
Карл Бонері

15

Я зробив модуль вузла для автоматизації цього завдання: mddir

Використання

вузол mddir "../relative/path/"

Для встановлення: npm install mddir -g

Щоб сформувати націнку для поточного каталогу: mddir

Для генерації для будь-якого абсолютного шляху: mddir / absolute / path

Щоб створити для відносного шляху: mddir ~ / Documents / whatever.

Файл md генерується у вашому робочому каталозі.

На даний момент ігнорує node_modules та папки .git.

Вирішення проблем

Якщо ви отримуєте повідомлення про помилку 'node \ r: такого файлу чи каталогу немає', проблема полягає в тому, що ваша операційна система використовує різні закінчення рядків, і mddir не може їх проаналізувати, якщо ви явно не встановите для Unix стиль закінчення рядка. Зазвичай це стосується Windows, а також деяких версій Linux. Встановлення закінчень рядків у стилі Unix повинно виконуватися в глобальній папці mddir npm.

Виправити закінчення рядків

Отримати шлях до папки bin npm за допомогою:

npm config get prefix

Cd в цю папку

заваріть встановити dos2unix -

dos2unix lib / node_modules / mddir / src / mddir.js

Це перетворює закінчення рядків на Unix замість Dos

Потім запустіть як зазвичай за допомогою: вузол mddir "../relative/path/".

Приклад згенерованої файлової структури розмітки "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

Дякуємо за пакет вузлів. Пара коментарів 1) чи є можливість отримати вихідні дані як текст, а не як JSON. Мені довелося додатково проаналізувати вихід JSON, перш ніж я зміг вставити його в розмітку. 2) Чи є спосіб зробити це, щоб вам не довелося запускати його з node_modules/mddir/src/каталогу? Наприклад, я хотів би запустити node ~./src > dir-struct.txtз мого каталогу проекту та вставити вміст dir-struct.txt безпосередньо у свою відмітку.
wilblack

11

Найкращий спосіб зробити це - оточити своє дерево потрійними зворотними позначками для позначення блоку коду. Для отримання додаткової інформації див. Документи щодо розмітки: http://daringfireball.net/projects/markdown/syntax#code


На відміну від того, що просив ОП, але саме підказка, яка мені потрібна. Дякую!
Mike Ellis


3

Ви також можете перевірити це розширене дерево пакет. Його можна використовувати як додаток командного рядка, використовуючи node> = 6.x.

Це дуже схоже на, treeале також має можливість налаштування максимальної глибини в дереві, що є однією з жахливих речей. Також ви можете фільтрувати за допомогою .gitignoreфайлу.

введіть тут опис зображення


1
Примітка для інших: Щоб перетворити щось подібне на знижку, просто додайте три зворотні позначки.
user45254 05

3

Жодне з наведеного вище рішення не працювало для мене повністю на моєму mac.

Найкраще рішення, яке я знайшов, - скористатися створеною тут утилітою.

https://github.com/michalbe/md-file-tree

Після встановлення утиліти npm install md-file-tree -gви можете просто запустити, щоб отримати дерево всіх файлів

md-file-tree . > README.md

3

Ось корисне, git aliasщо працює для мене.

git config --global alias.tree '! git ls-tree --full-name --name-only -t -r HEAD | sed -e "s/[^-][^\/]*\//   |/g" -e "s/|\([^ ]\)/|-- \1/"'

Ось результат git tree

jonavon@XPS13:~/projects/roman-numerals$ git tree
.gitignore
pom.xml
src
   |-- main
   |   |-- java
   |   |   |-- com
   |   |   |   |-- foxguardsolutions
   |   |   |   |   |-- jonavon
   |   |   |   |   |   |-- AbstractFile.java
   |   |   |   |   |   |-- roman
   |   |   |   |   |   |   |-- Main.java
   |   |   |   |   |   |   |-- Numeral.java
   |   |   |   |   |   |   |-- RomanNumberInputFile.java
   |   |   |   |   |   |   |-- RomanNumeralToDecimalEvaluator.java
   |-- test
   |   |-- java
   |   |   |-- com
   |   |   |   |-- foxguardsolutions
   |   |   |   |   |-- jonavon
   |   |   |   |   |   |-- roman
   |   |   |   |   |   |   |-- InterpretSteps.java
   |   |   |   |   |   |   |-- RunCukesTest.java
   |   |-- resources
   |   |   |-- com
   |   |   |   |-- foxguardsolutions
   |   |   |   |   |-- jonavon
   |   |   |   |   |   |-- roman
   |   |   |   |   |   |   |-- Interpret.feature
   |   |   |-- sample-input.txt

Порівнянна treeкоманда

jonavon@XPS13:~/projects/roman-numerals$ tree -n
.
├── pom.xml
├── src
│   ├── main
│   │   └── java
│   │       └── com
│   │           └── foxguardsolutions
│   │               └── jonavon
│   │                   ├── AbstractFile.java
│   │                   └── roman
│   │                       ├── Main.java
│   │                       ├── Numeral.java
│   │                       ├── RomanNumberInputFile.java
│   │                       └── RomanNumeralToDecimalEvaluator.java
│   └── test
│       ├── java
│       │   └── com
│       │       └── foxguardsolutions
│       │           └── jonavon
│       │               └── roman
│       │                   ├── InterpretSteps.java
│       │                   └── RunCukesTest.java
│       └── resources
│           ├── com
│           │   └── foxguardsolutions
│           │       └── jonavon
│           │           └── roman
│           │               └── Interpret.feature
│           └── sample-input.txt
└── target
    ├── classes
    │   └── com
    │       └── foxguardsolutions
    │           └── jonavon
    │               ├── AbstractFile.class
    │               └── roman
    │                   ├── Main.class
    │                   ├── Numeral.class
    │                   ├── RomanNumberInputFile.class
    │                   └── RomanNumeralToDecimalEvaluator.class
    ├── generated-sources
    │   └── annotations
    └── maven-status
        └── maven-compiler-plugin
            └── compile
                └── default-compile
                    ├── createdFiles.lst
                    └── inputFiles.lst

30 directories, 17 files

Очевидно, що дерево має кращі результати, але я хотів би, щоб він використовував мій файл .gitignore. Щоб мій скомпільований вміст не відображався


1

Проста treeкоманда зробить цю роботу. Наприклад: tree -o readme.mdнадрукує деревоподібну структуру поточного робочого каталогу та запише в неї readme.md. Потім відкрийте файл readme.md в одному з текстових редакторів, наприклад Sublime, і оберніть його вміст парою потрійних зворотних позначок (`` '').

FYI: можливо, вам доведеться заварити дерево встановлення в OSX, якщо воно ще не встановлене. У Linux та Windows це просто має працювати нормально. Також у вікнах, можливо, доведеться замінити дефіс на косу риску.

Сподіваюся, це допоможе.


1

Якщо ви працюєте з Windows, напишіть tree /fвсередині каталогу, ви хочете досягти цього в командному рядку. Це повинно зробити вашу роботу. Ви можете скопіювати та вставити висновок на розмітку, оточену мої потрійні зворотні галочки, тобто '' '{деревоподібна структура тут}' '' '


0

Мені просто подобається генерувати його за допомогою UTF-8 і пов'язувати з кожним файлом і папкою, щоб дуже легко переміщатися. Будь ласка, подивіться на приклад тут .

Файл дененерованої націнки


Натомість, якщо голосувати проти. Скажіть, яка додаткова інформація вам потрібна. Ви можете генерувати націнку як завгодно. Я роблю це з власною особистою бібліотекою, але мої уподобання можуть відрізнятися від ваших.
Деян Добромиров

0

Для тих, хто хоче швидко вирішити:

Існує спосіб отримати вихід на консоль, подібний до виводу з дерева, ввівши в термінал таку команду:

ls -R YOURFOLDER | grep ':$' | sed -e 's/:$//' -e 's/[^\/]*\//|  /g' -e 's/|  \([^|]\)/|–– \1/g' 

Ця альтернатива згадується в цій документації: https://wiki.ubuntuusers.de/tree/

Тоді висновок можна скопіювати та інкапсулювати всередині .md-файлу з тиками зворотного блоку коду, як зазначено у відповіді Джонатаса до н.е.

Але майте на увазі, що він також виводить усі папки модулів вузлів у проекті вузла. А на дереві ви можете зробити щось подібне

tree -I node_modules

виключити папку вузлових модулів.


0

Вставте дерево команд у bash.

Також є DOS-комнанд і "дерево". Ви можете відобразити шляхи до каталогу та файли у кожному підкаталозі за допомогою команди:

tree /F

https://web.csulb.edu/~murdock/tree.html

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.