从Markdown文件相对链接到Repo的根
我需要有一个相对链接到我的回购从降价文件的根
(我需要它为任何叉子工作)
所以它看起来像是提供根文件中某个文件的链接的唯一方式:
the [Root](/README.md)
要么
the [Root](../README.md)
(例如,如果它位于/doc/README.md)
同时我可以参考任何文件夹而不用引用文件
the [Doc](/doc)
但是,如果我尝试将链接放到根文件夹中:
the [real root](/)
the [real root](../)
我会有一个链接
https://github.com/UserName/RepoName/ blob / master
这不像
https://github.com/UserName/RepoName/ blob / master / doc
指的是404
所以,如果我不想在根中引用README.md(我根本就不知道它)
有什么办法可以有这样的链接吗?
经过一番研究,我发现了这样的解决方案
[the real relative root of any fork](/../../)
它总是指向默认分支。 对我来说没关系,所以取决于你
PS
用这样的技巧,你也可以使用以下技能:
[test](/../../tree/test)
- 链接到另一个分支
[doc/readme.md](/../../edit/master/doc/readme.md)
- 在编辑器中打开
[doc/readme.md](/../../delete/master/doc/readme.md)
- 请求删除文件
[doc/readme.md](/../../commits/master/doc/readme.md)
- 历史记录
[doc/readme.md](/../../blame/master/doc/readme.md)
- 责怪模式
[doc/readme.md](/../../raw/master/doc/readme.md)
- 行模式(将重定向)
[doc/](/../../new/master/doc/)
- 要求创建新文件
[doc/](/../../upload/master/doc/)
- 请求上传文件
[find](/../../find/test)
- 找到文件
您可以直接链接到文件( ../README.md
),或者直接使用完整的绝对URL直接链接到repo根目录: https://github.com/UserName/RepoName
: https://github.com/UserName/RepoName
在GitHub上使用相对链接并不适用。 请注意以下两个网址之间的区别:
https://github.com/UserName/RepoName/tree/master/somedir
https://github.com/UserName/RepoName/blob/master/somedir/somefile
请注意,第一个指向一个目录,第二个指向一个文件。 然而,在“RepoName”之后,我们有tree
(用于目录)或blob
用于文件。 因此两者之间的相关联系将无法正常工作。 在GitHub上,不能使用相对链接来链接文件和目录。 但是,您可以链接两个文件(因为这两个URL都包含blob
)。 因此,如果您想要将根文件从somefile
链接回README.md
,您可以这样做:
[README](../README.md)
这会给你的网址:
https://github.com/UserName/RepoName/blob/master/somedir/../README.md
这将得到正常化
https://github.com/UserName/RepoName/blob/master/README.md
但是,如果您只想指向您的回购(或任何其他目录)的根目录,则最好使用完整的网址。 毕竟,如果有人下载了您的repo并且正在本地查看源代码,则Repo根目录的相对URL将与在GitHub上查看该文件时不同。 在这种情况下,您可能想要将它们指向GitHub。 因此,您应该使用:
[root](https://github.com/UserName/RepoName)
另一个优点是,如果您的文档在别处发布(可能是文档托管服务),该链接仍将指向GitHub回购站,而不是托管服务上的一些随机页面。 毕竟,您的项目根目录下的自述文件不可能包含在所述托管服务的docs/
目录的内容中。
也许这将有助于理解GitHub的URL方案是如何工作的。 我说“大概”是因为我没有内部知识,只是对这些系统通常如何设计的一般理解。
GitHub不提供平面文件。 而是他们的服务器将URL分开,并使用各个部分来返回正确的响应。 网址结构如下所示:
https://github.com/<username>/<repository name>/<resource type>/<branch>/<resource path>
username
, repository name
, resource type
和branch
都是非常随意的,只是GitHub确保他们从正确位置获取信息的方式。
resource type
重要,因为它们很可能不会从工作树中提取文件。 相反,他们直接从回购本身通过较低的水平拉文件/目录列表。 在这种情况下,获取文件与获取目录列表非常不同,并且需要不同的代码路径。 因此,您无法请求具有指向树(目录)的resource path
的Blob(文件),反之亦然。 服务器感到困惑并返回错误。
关键是GitHub的服务器的工作规则略有不同。 您可以使用相对URL到中移动resource path
URL的一部分,但一旦你改变了resource type
的resource path
URL的一部分,然后GitHub的整个计划被打破,如果你不也改变了resource type
中网址。 但是,浏览器(或HTML或Markdown)对此没有任何了解,相对URL无法弥补这一点。 因此,除非您了解所有细节,否则无法可靠地使用相对URL在GitHub库中移动。 有时它更好地使用绝对链接。
上一篇: Relative Link to Repo's Root from Markdown file
下一篇: 401 Authentication Error when SoapClient tries to fetch schema file