Markdown文件中的GitHub相对链接

ryn*_*nop 736 markdown github github-flavored-markdown

有没有办法创建URL锚点,<a>从Markdown文件中链接到同一存储库和分支中的另一个文件(也就是相对于当前分支的链接)?

例如,在master分支中我有一个README.md文件,我想做的事情如下:

# My Project
is really really cool. My Project has a subdir named myLib, see below.

## myLib documentation
see documentation [here](myLib/README.md)
Run Code Online (Sandbox Code Playgroud)

这将允许我在同一分支内从一个.md链接到另一个.并且不必担心我所在的分支(避免必须执行包含github.com分支名称的绝对URL).

这是我的意思的一个工作示例:

  1. GOTO http://github.com/rynop/testRel,链接不起作用.
  2. GOTO http://github.com/rynop/testRel/blob/master/README.md,链接有效.

这是预期的,因为此时起始URL位于分支中.现在我如何让它在存储库根目录下的README.md中获取当前分支?

更新:我针对此功能请求针对GitHub 打开了一个问题.

Von*_*onC 857

2013年1月30日更新,16个月后:

GitHub Blog Post 标记文件中的相对链接:

从今天开始,GitHub支持标记文件中的相对链接.
现在,您可以直接链接不同的文档文件,无论是在GitHub本身上查看文档,还是在本地查看,使用不同的标记渲染器.

您想要链接定义的示例以及它们如何工作?这是给你的Markdown.
而不是绝对链接:

[a link](https://github.com/user/repo/blob/branch/other_file.md)
Run Code Online (Sandbox Code Playgroud)

...你可以使用相对链接:

[a relative link](other_file.md)
Run Code Online (Sandbox Code Playgroud)

我们会确保它与之相关联user/repo/blob/branch/other_file.md.

如果您使用类似的解决方法[a workaround link](repo/blob/master/other_file.md),则必须更新文档以使用新语法.

这也意味着您的文档现在可以轻松地独立存在,而无需始终指向GitHub.


2011年12月20日更新:

GitHub上的标记问题84目前被关闭technoweenie,与评论:

我们尝试<base>为此添加标记,但它会导致网站上其他相关链接出现问题.


2011年10月12日:

如果你看一下Markdown本身的原始来源README.md(!),似乎不支持相对路径.
您会找到如下参考:

[r2h]: http://github.com/github/markup/tree/master/lib/github/commands/rest2html
[r2hc]: http://github.com/github/markup/tree/master/lib/github/markups.rb#L13
Run Code Online (Sandbox Code Playgroud)

  • 也很有用:当链接以“/”开头时,它是相对于存储库的根目录的(无论 markdown 文件是否嵌套在子目录中)。 (3认同)
  • 嗯..我可以创建一个相对 URL(尝试 [link] someDir/README.md,它会创建一个锚点) - 但我想要一个 github 分支感知相对链接,如:myRepo/tree/&lt;$curBranch&gt;/pathToMd.md . 我可能会在 github.com 上打开一个功能请求 (2认同)
  • 相关:为了从一个Wiki页面链接到另一页面,`[Welcome](./ wiki / Hello)`起作用,其中Hello是同一仓库中的另一个Wiki页面。 (2认同)
  • 这适用于常规维基页面,但如果添加_Sidebar.md文件,则wiki主页上链接的解析方式与其他页面之间存在差异.我在这里尝试了一切,没有运气.到目前为止,我唯一想到的是使用2个不同的_Sidebar.md文件并将文件组织到子目录中. (2认同)

小智 77

例如,您有一个如下所示的回购:

project/
    text.md
    subpro/
       subtext.md
       subsubpro/
           subsubtext.md
       subsubpro2/
           subsubtext2.md
Run Code Online (Sandbox Code Playgroud)

subtext.mdin 的相对链接text.md可能如下所示:

[this subtext](subpro/subtext.md)
Run Code Online (Sandbox Code Playgroud)

subsubtext.mdin 的相对链接text.md可能如下所示:

[this subsubtext](subpro/subsubpro/subsubtext.md)
Run Code Online (Sandbox Code Playgroud)

subtext.mdin 的相对链接subsubtext.md可能如下所示:

[this subtext](../subtext.md)
Run Code Online (Sandbox Code Playgroud)

subsubtext2.mdin 的相对链接subsubtext.md可能如下所示:

[this subsubtext2](../subsubpro2/subsubtext2.md)
Run Code Online (Sandbox Code Playgroud)

text.mdin 的相对链接subsubtext.md可能如下所示:

[this text](../../text.md)
Run Code Online (Sandbox Code Playgroud)


woo*_*uwu 15

我发现适用于相关文件夹的内容:

[link text](subfolder/subsubfolder/relevantfolder/)
Run Code Online (Sandbox Code Playgroud)

其中相关文件夹是您尝试链接到的文件夹。文件夹名称后面需要有反斜杠。我尝试在路径中包含项目名称和树/主目录以及之前答案中建议的其他内容,这会导致不存在的页面错误。子文件夹是整个存储库项目文件夹中的一个文件夹。

因此,文件链接的形式如下:

[link text](subfolder/subsubfolder/relevantfolder/index.html)
Run Code Online (Sandbox Code Playgroud)

如果所需的文件不在任何文件夹或子文件夹中,则链接很简单:

[link text](README.md)
Run Code Online (Sandbox Code Playgroud)

例如,自述文件不位于任何子文件夹中,因此这可能是您用于自述文件的确切相对链接。


Gaj*_*jus 14

截至2013年1月31日,Github markdown 支持文件的相对链接.

[a relative link](markdown_file.md)
Run Code Online (Sandbox Code Playgroud)

但是,此评论主题中讨论了一些缺陷.

作为替代方案,您可以使用Gitdown构建存储库的完整URL,甚至使它们分支识别,例如

{"gitdown": "gitinfo", "name": "url"} // https://github.com/gajus/gitdown
{"gitdown": "gitinfo", "name": "branch"} // master
Run Code Online (Sandbox Code Playgroud)

Gitdown是一个GitHub降价预处理器.它简化了与维护GitHub存储库的文档页面相关的常见任务,例如生成目录,包括变量,生成URL以及在处理输入时获取有关存储库本身的信息.Gitdown与您的构建脚本无缝集成.

我是Gitdown图书馆的作者.

  • "发布好的,相关的答案,如果有些(但不是全部)恰好与您的产品或网站有关,那没关系.但是,您必须在答案中披露您的从属关系." http://stackoverflow.com/help/behavior (5认同)

Ala*_*ars 13

GitHub可以通过最少的工作使这更好.这是一个解决方法.

我想你想要更像的东西

[Your Title](your-project-name/tree/master/your-subfolder)
Run Code Online (Sandbox Code Playgroud)

或者指向README本身

[README](your-project-name/blob/master/your-subfolder/README.md)
Run Code Online (Sandbox Code Playgroud)

祝好运

  • 是的,这就是我今天所做的.我不想将分支信息烘焙到链接中.它应该是相对的. (3认同)

hey*_*hil 9

在文件中,当您想要创建指向与相同或基于链接.md相关的任何相关文件的链接时:project folderURL

  1. 现有文件链接:

.md文件中添加在框中显示名称,然后在此框中[]打开添加,之后它将自动获取您选择文件夹的所有现有文件夹名称形式,然后添加“/”它将显示内部或“文件夹”。这意味着它将自动获取路径,最后创建您的 URL。()/file

例子:

[Enter Showing Name](/users/4000266/heysushil)
Run Code Online (Sandbox Code Playgroud)

该行显示如下: 输入显示名称

  1. 添加URLs.md文件

遵循相同的过程,仅更改()框路径,URL如下所示:

 [HeySushil - YouTube](https://youtube.com/heysushil)
Run Code Online (Sandbox Code Playgroud)

这看起来像HeySushil - YouTube

/注意:请记住,添加框后无需手动添加强制,()它将自动获取所有现有的foldersfiles.


Inv*_*olf 7

只是想添加这个,因为如果目标链接是名称中包含空格的目录,则上述解决方案都不起作用.如果目标链接是一个目录并且它有空间,那么即使用\来转义空间也不会在Github上呈现链接.只有适合我的解决方案是%20用于每个空间.

例如:如果目录结构是这样的话

Top_dir
|-----README.md
|-----Cur_dir1
      |----Dir A
           |----README.md
      |----Dir B
           |----README.md
Run Code Online (Sandbox Code Playgroud)

Dir A在README.md中建立链接,Top_dir可以执行以下操作:

[Dir 1](Cur_dir1/Dir%20A)
Run Code Online (Sandbox Code Playgroud)


Wes*_*Gun 7

您可以链接到文件,但不能链接到文件夹,请记住,Github将/blob/master/在您的相对链接之前添加(文件夹缺少该部分,因此它们无法链接,HTML <a>标签或Markdown链接也无法链接).

所以,如果我们有一个文件myrepo/src/Test.java,它将有一个网址,如:

https://github.com/WesternGun/myrepo/blob/master/src/Test.java
Run Code Online (Sandbox Code Playgroud)

要在自述文件中链接它,我们可以使用:

[This is a link](src/Test.java)
Run Code Online (Sandbox Code Playgroud)

或:<a href="src/Test.java">This is a link</a>.

(我猜,master代表master分支,当文件在另一个分支时它会有所不同.)


Jon*_*ase 6

您可以使用repo根目录中的相对URL <a href="">.假设您的仓库已命名testRel,请将以下内容放入testRel/README.md:

# My Project
is really really cool. My Project has a subdir named myLib, see below.

## myLib docs
see documentation:
    * <a href="testRel/myLib">myLib/</a>
    * <a href="testRel/myLib/README.md">myLib/README.md</a>
Run Code Online (Sandbox Code Playgroud)

  • 这不是有效的md语法 (3认同)

Ant*_*iro 6

我不确定我是否在这里看到这个选项。您可以/folder在存储库中创建一个并直接使用它:

[a relative link](/folder/myrelativefile.md)
Run Code Online (Sandbox Code Playgroud)

不需要 blob、树或存储库名称,它的工作方式就像一个魅力。


elo*_*age 5

如果你想要一个到你在 GitHub 上的 wiki 页面的相对链接,使用这个:

Read here: [Some other wiki page](path/to/some-other-wiki-page)
Run Code Online (Sandbox Code Playgroud)

如果您想要链接到存储库中的文件,让我们说,要引用某个头文件,并且 wiki 页面位于 wiki 的根目录,请使用以下命令:

Read here: [myheader.h](../tree/master/path/to/myheader.h)
Run Code Online (Sandbox Code Playgroud)

最后一个的基本原理是跳过带有“../”的“/wiki”路径,并在不指定存储库名称的情况下转到存储库树中的主分支,这在将来可能会发生变化。


Ale*_*lex 5

这个问题很老了,但它似乎仍然很重要,因为将readme.md的相对引用放到Github上的wiki页面并不容易.

我玩了一下,这个相对链接似乎工作得很好:

[Your wiki page](../../wiki/your-wiki-page)

这两个../将删除/blob/master/并使用您的基地作为起点.我没有尝试过其他存储库而不是Github(可能存在兼容性问题).