Markdown文件中的GitHub相对链接


831

有没有办法创建网址锚, <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)

这将允许我在同一个分支中将一个.md链接到另一个,而不必担心我所在的分支(避免使用包含github.com分支名称的绝对URL)。

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

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

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

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


21
最后:现在支持相对链接!我已经更新了我的答案:)
VonC

如果您尝试打开另一个.md或转到另一个Web http / s或html甚至是.jpg,.png或jpeg页面,这些都是很好的信息,但是如何使Markdown打开.pdf?我无法正确获取语法以使其打开与.md文件位于同一目录的.pdf。任何人都可以帮助打开.pdf吗?
艾尔顿(Elton)

:你可以找到这个问题的一些解决方案stackoverflow.com/questions/40422790/...
奥列格临

Answers:


970

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

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

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

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

[a link](https://github.com/user/repo/blob/branch/other_file.md)

…您可以使用相对链接:

[a relative link](other_file.md)

我们将确保它链接到 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

1
嗯。我可以创建一个相对URL(尝试[link] someDir / README.md,它将创建一个锚点)-但是我想要一个github分支感知的相对链接,例如:myRepo / tree / <$ curBranch> /pathToMd.md 。我可能只是通过github.com打开功能请求
rynop 2011年

1
不。在此处查看完整示例github.com/rynop/testRel。我可以做一个相对的链接来指定分支,但这首先违背了我想做的目的。如果我要从一个子目录中的.md链接到另一个子目录,我认为它可以处理相对链接。从仓库的根目录中的.md链接时发生问题。
rynop 2011年

2
相关:要从一个Wiki页面链接到另一页面,[Welcome](./wiki/Hello)可以使用,其中Hello是同一仓库中的另一个Wiki页面。
韦恩·布鲁斯

1
@wizlb我只是尝试了没有路径,它也可以[Welcome](Hello)在Hello是同一仓库中的另一个Wiki页面的情况下使用。
Mottie 2013年

2
这适用于常规Wiki页面,但是如果添加_Sidebar.md文件,则链接在Wiki主页上的解析方式与其余页面之间会有区别。我在这里没有运气就尝试了一切。到目前为止,我唯一想到的就是使用2个不同的_Sidebar.md文件并将这些文件组织到子目录中。
NightOwl888

93

例如,您有一个类似以下的仓库:

project/
    text.md
    subpro/
       subtext.md
       subsubpro/
           subsubtext.md
       subsubpro2/
           subsubtext2.md

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

[this subtext](subpro/subtext.md)

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

[this subsubtext](subpro/subsubpro/subsubtext.md)

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

[this subtext](../subtext.md)

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

[this subsubtext2](../subsubpro2/subsubtext2.md)

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

[this text](../../text.md)

1
我发现的一件事是,链接区分大小写,这是我所没有想到的。
安迪·维森丹格

如果目录中有空格怎么办?
里沙夫

16

自2013年1月31日起,Github markdown 支持文件的相对链接

[a relative link](markdown_file.md)

但是,此注释线程中已经讨论了一些缺陷。

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

{"gitdown": "gitinfo", "name": "url"} // https://github.com/gajus/gitdown
{"gitdown": "gitinfo", "name": "branch"} // master

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

我是Gitdown库的作者。


1
@Thomas这是堆栈溢出使用条款的一部分吗?如果是,请共享一个链接。我很好奇知道这种要求背后的动机。
Gajus 2014年

5
“发布好的,相关的答案,并且如果某些(但不是全部)碰巧是关于您的产品或网站的,那没关系。但是,您必须在答案中公开您的从属关系。” stackoverflow.com/help/behavior
2014年

1
有人会认为这属于Stack Overflow试图避免的元信息的范围之内,也就是说,这促进了场外讨论。
Gajus 2014年

14

GitHub可以通过最少的工作使它变得更好。这是一种解决方法。

我想你想要更多类似的东西

[Your Title](your-project-name/tree/master/your-subfolder)

或指向自述文件本身

[README](your-project-name/blob/master/your-subfolder/README.md)

祝好运


3
是的,这就是我今天要做的。我不想将分支信息烘焙到链接中。应该是相对的。
rynop 2012年

8

只是想添加此内容,因为如果目标链接是名称中带有空格的目录,则上述解决方案均无效。如果目标链接是目录,并且有空间,那么即使使用\转义空格也不会在Github上呈现该链接。%20每个空间都只能使用对我有用的解决方案。

例如:如果目录结构是这个

Top_dir
|-----README.md
|-----Cur_dir1
      |----Dir A
           |----README.md
      |----Dir B
           |----README.md

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

[Dir 1](Cur_dir1/Dir%20A)

8

您可以链接到文件,但不能链接到文件夹,请记住,Github会/blob/master/在您的相对链接之前添加(并且文件夹缺少该部分,因此无法链接,也不能使用HTML链接)<a>标记 Markdown链接进行链接)。

因此,如果我们在中有一个文件myrepo/src/Test.java,则它将具有类似以下内容的网址:

https://github.com/WesternGun/myrepo/blob/master/src/Test.java

并将其链接到自述文件中,我们可以使用:

[This is a link](src/Test.java)

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

(我想,master代表master分支,并且文件在另一个分支中时,它会有所不同。)


7

您可以使用来自仓库的根的相对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>

3
这是无效的md语法
astroanu

6

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

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

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

两者../将删除/blob/master/并以您的基础为起点。不过,除了Github之外,我没有在其他存储库上尝试过此操作(可能存在兼容性问题)。


4

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

[a relative link](/folder/myrelativefile.md)

不需要Blob,树或存储库名称,它的作用就像一个超级按钮。


1
您可能会认为这是显而易见的方法,但对我而言不起作用。
Kmeixner 2014年

4

如果您想要相对链接到GitHub上的Wiki页面,请使用以下命令:

Read here: [Some other wiki page](path/to/some-other-wiki-page)

如果要链接到存储库中的文件,可以说要引用一些头文件,并且Wiki页面位于Wiki的根目录,请使用以下命令:

Read here: [myheader.h](../tree/master/path/to/myheader.h)

最后一个理由是跳过带有“ ../”的“ / wiki”路径,并转到存储库树中的master分支而不指定存储库名称,该名称将来可能会更改。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.