在我的Githubs回购文档中,我想表示一个目录树结构,如下所示:
除了仅使用ascii艺术进行创作之外,还有其他方法可以使用Github风味的markdown来做到这一点吗?
所以基本上像这个问题,但我想知道是否有github特定的解决方案。
在我的Githubs回购文档中,我想表示一个目录树结构,如下所示:
除了仅使用ascii艺术进行创作之外,还有其他方法可以使用Github风味的markdown来做到这一点吗?
所以基本上像这个问题,但我想知道是否有github特定的解决方案。
Answers:
不直接,不。您必须手动创建它并放入您自己。假设您在本地使用* nix框,并且在使用utf,则tree会很好地生成它(我相信这就是您在上面使用的示例所生成的)。
假设您将sreadme.md
作为文档目标,那么我认为唯一可以自动化的方法是运行git pre-commit钩子tree
并将其嵌入到自述文件中。您需要进行比较以确保仅在输出更改时才更新自述文件。
Otoh如果您要通过github页面维护单独的文档,那么您可以做的是切换到在本地使用jekyll(或其他生成器)并自己推送静态页面。然后,您可以将所需的更改作为插件/ shell脚本* /手动更改(如果它们之间的差异不大)或使用与上述相同的方法来实现。
*如果将其集成到提交挂钩中,则可以避免添加任何其他步骤来更改页面。
我写了一个小技巧来达到目的:
#!/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中不可见...)
项目树我制作了一个节点模块来自动执行此任务:mddir
节点mddir“ ../relative/path/”
要安装:npm install mddir -g
生成当前目录的markdown:mddir
要生成任何绝对路径:mddir / absolute / path
生成相对路径:mddir〜/ Documents / whatever。
md文件在您的工作目录中生成。
当前忽略node_modules和.git文件夹。
如果收到错误“ node \ r:没有这样的文件或目录”,则问题是您的操作系统使用不同的行尾,并且如果您未将行尾样式显式设置为Unix,则mddir无法解析它们。这通常会影响Windows,但也会影响Linux的某些版本。必须在mddir npm全局bin文件夹中将行尾设置为Unix样式。
使用以下命令获取npm bin文件夹路径:
npm config get prefix
将CD放入该文件夹
brew安装dos2unix
dos2unix lib / node_modules / mddir / src / mddir.js
这会将行尾转换为Unix而不是Dos
然后正常运行:node mddir“ ../relative/path/”。
|-- .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
node_modules/mddir/src/
目录运行它?例如,我想node ~./src > dir-struct.txt
从我的项目目录运行,并将dir-struct.txt的内容直接粘贴到我的markdown中。
最好的方法是将树环绕在三个反引号中,以表示一个代码块。有关更多信息,请参见markdown文档:http : //daringfireball.net/projects/markdown/syntax#code
您也可以检查此树扩展包。通过使用节点> = 6.x,可以将其用作命令行应用程序。
它tree
与树非常相似,但也可以选择在树中配置最大深度,这是它的可怕事情之一。您也可以使用.gitignore
文件进行过滤。
上述解决方案都无法在我的Mac上完全为我工作。
我发现这是最好的解决方案是使用此处创建的实用程序。
https://github.com/michalbe/md-file-tree
安装该实用程序npm install md-file-tree -g
后,您可以简单地运行以获取所有文件树
md-file-tree . > README.md
这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
显然,tree具有更好的输出,但是我希望它使用我的.gitignore文件。这样我的编译内容就不会显示
如果您使用的是Windows tree /f
,请在命令提示符下在目录中写入内容。这应该做你的工作。您可以将输出复制并粘贴到我的三倍后勾号周围的markdown上,即'''{此处的树结构}
我只是喜欢用UTF-8生成它,并将其链接到每个文件和文件夹,以真正轻松地导航。请看这里的例子。
对于那些想要快速解决方案的人:
通过在终端中键入以下命令,有一种方法可以将输出输出到控制台,类似于从树输出:
ls -R YOURFOLDER | grep ':$' | sed -e 's/:$//' -e 's/[^\/]*\//| /g' -e 's/| \([^|]\)/|–– \1/g'
本文档中提到了这种替代方法: https //wiki.ubuntuusers.de/tree/
然后,可以将输出复制并封装为.md文件,其中包含代码块反向标记,如Jonathas BC的答复中所述。
但是请注意,它还会输出节点项目中的所有节点模块文件夹。在树上你可以做类似的事情
tree -I node_modules
排除节点模块文件夹。
在bash中插入命令树。
此外,还有一个DOS命令“树”。您可以使用以下命令在每个子目录中显示目录路径和文件:
tree /F