1158

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

例如,在主分支中,我有一个 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. 转到http://github.com/rynop/testRel,链接不起作用。
  2. 转到http://github.com/rynop/testRel/blob/master/README.md,链接有效。

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

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

4

12 回答 12

1355

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

GitHub 博客文章标记文件中的相对链接

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

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

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

…您可以使用相对链接:

[a relative link](other_file.md)
[a relative link](path%20with%20spaces/other_file.md)

我们将确保它链接到user/repo/blob/branch/other_file.md.

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

这也意味着您的文档现在可以很容易地独立存在,而不必总是指向 GitHub

Marcono1234评论中添加

也很有用:当链接以 a 开头时/,它是相对于存储库的根目录(不管 markdown 文件是否嵌套在子目录中)


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

正如InvisibleWolf回答中所述,如果目标链接是一个目录并且它有空间,那么您需要%20为每个空间使用。

于 2011-10-05T08:39:27.347 回答
145

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

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)
于 2017-03-27T09:38:36.110 回答
28

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

我想你想要的东西更像

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

或指向自述文件本身

[README](your-project-name/blob/master/your-subfolder/README.md)
于 2012-08-31T16:16:44.817 回答
25

截至 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 降价预处理器。它简化了与维护 GitHub 存储库的文档页面相关的常见任务,例如生成目录(包括变量)、生成 URL 以及在处理输入时获取有关存储库本身的信息。Gitdown 与您的构建脚本无缝集成。

我是 Gitdown 库的作者。

于 2014-11-22T17:27:47.130 回答
16

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

eg:如果目录结构是这样的

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)
于 2017-09-13T05:46:37.473 回答
14

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

因此,如果我们在 中有一个文件myrepo/src/Test.java,它将有一个像这样的 url:

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分支,当文件在另一个分支中时它会有所不同。)

于 2018-05-19T16:58:18.920 回答
9

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

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

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

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

于 2017-02-17T19:38:55.303 回答
8

您可以使用来自您的存储库根目录的相对 URL 与<a href="">. 假设您的 repo 被命名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>
于 2012-08-16T18:37:39.003 回答
5

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

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

不需要 blob 或树或存储库名称,它就像一个魅力。

于 2013-10-22T04:01:18.383 回答
5

如果你想要一个指向 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”路径,并在不指定存储库名称的情况下转到存储库树中的主分支,这可能会在未来发生变化。

于 2016-01-05T17:40:29.537 回答
1

只需遵循以下格式。

[TEXT TO SHOW](actual URL to navigate)
于 2020-11-10T20:37:05.360 回答
0

您还可以在底部插入链接(相对或绝对)以减少文本的混乱。
对于重复链接,它也是一个不错的选择。

This is [my linked text].

  [my linked text]: relative/path/in/repo/to/file.txt "Optional title for mouse hover"

这是我的链接文本

于 2021-11-02T12:01:25.250 回答