30

我需要有一个从降价文件到我的回购根目录的相对链接

(我需要它适用于任何叉子)

因此,它看起来像是在根目录中提供指向某个文件的链接的唯一方法:

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 (我可能根本没有)

有没有办法有这样的链接?

4

2 回答 2

36

经过一番研究,我找到了这个解决方案:

[the real relative root of any fork](/../../)

它始终指向默认分支。对我来说没关系,所以这取决于你

附言

通过这样的技巧,您还可以访问以下功能:

[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)- 查找文件

于 2016-11-05T15:57:34.640 回答
2

您可以直接链接到文件 ( ../README.md),也可以简单地使用完整的绝对 URL 直接链接到 repo 根目录:https://github.com/UserName/RepoName

使用相对链接在 GitHub 上效果不佳。请注意以下两个 URL 之间的区别:

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 的根目录(或任何其他目录),那么最好使用完整的 URL。毕竟,如果有人下载了您的 repo 并在本地查看源代码,则指向 Repo 根目录的相对 URL 将与在 GitHub 上查看文件时不同。在这种情况下,您可能无论如何都希望将它们指向 GitHub。因此,您应该使用:

[root](https://github.com/UserName/RepoName)

这样做的另一个好处是,如果您的文档曾经在其他地方发布(可能是文档托管服务),该链接仍将指向 GitHub 存储库,而不是托管服务上的某个随机页面。毕竟,项目根目录中的自述文件不太可能包含docs/在所述托管服务的目录内容中。


也许这有助于理解 GitHub 的 URL 方案大概是如何工作的。我说“大概”是因为我没有内幕知识,只是对这些类型的系统通常是如何设计的有一个大致的了解。

GitHub 不提供平面文件。相反,他们的服务器将 URL 拆开,并使用各个部分来返回正确的响应。URL 结构如下所示:

https://github.com/<username>/<repository name>/<resource type>/<branch>/<resource path>

、 、 和 是相当随意的username,只是repository nameGitHub的方法,以确保它们从正确的位置提取信息。resource typebranch

因为resource type他们可能不会从工作树中提取文件,所以很重要。相反,他们通过较低级别直接从回购本身中提取文件/目录列表。在这种情况下,获取文件与获取目录列表非常不同,需要不同的代码路径。因此,您不能请求带有resource path指向树(目录)的 blob(文件),反之亦然。服务器感到困惑并返回错误。

关键是 GitHub 的服务器运行在一组稍微不同的规则上。您可以使用相对 URL 在 URL 部分内移动resource path,但是一旦您更改URL 部分resource typeresource path的 ,如果您不更改 URL 中的 ,那么 GitHub 的整个方案就会被破坏resource type。但是,浏览器(或 HTML 或 Markdown)对此一无所知,并且相对 URL 无法弥补这一点。因此,除非您了解所有细节,否则您无法可靠地使用相对 URL 在 GitHub 存储库中移动。有时使用绝对链接会更好。

于 2016-11-04T13:25:48.047 回答