Markdown 文件中 Repo 根的相对 Link
Relative Link to Repo's Root from Markdown file
我需要有一个亲戚 link 到我的 markdown 文件
的 repo 的根目录
(我需要它适用于任何叉子)
所以它看起来是向根目录中的某个文件提供link的唯一方法:
the [Root](/README.md)
或
the [Root](../README.md)
(例如,如果它位于 /doc/README.md)
同时我可以在不引用文件的情况下引用任何文件夹
the [Doc](/doc)
但是如果我尝试将 link 放入根文件夹:
the [real root](/)
the [real root](../)
我要一个link这样的
https://github.com/UserName/RepoName/blob/master
这与
不同
https://github.com/UserName/RepoName/blob/master/doc
指404
因此,如果我不想在根目录中引用 README.md(我可能根本没有)
有什么办法可以有这样的link?
您可以 link 直接访问文件 (../README.md
),或者直接使用完整的绝对 URL 到 link 直接访问 repo 根目录:https://github.com/UserName/RepoName
使用相对 links 在 GitHub 上效果不佳。请注意以下两个 URL 之间的区别:
https://github.com/UserName/RepoName/tree/master/somedir
https://github.com/UserName/RepoName/blob/master/somedir/somefile
注意第一个指向一个目录,第二个指向一个文件。然而,在 "RepoName" 之后,我们有 tree
(目录)或 blob
(文件)之一。因此两者之间的相对 links 将无法正常工作。在 GitHub 上,您不能在文件和目录之间使用相对 link 到 link。但是,您可以在两个文件之间 link(因为两个 URL 都包含 blob
)。因此,如果你想 link 从 somefile
回到根目录中的 README.md
,你可以这样做:
[README](../README.md)
那会给你 URL:
https://github.com/UserName/RepoName/blob/master/somedir/../README.md
这将被标准化为
https://github.com/UserName/RepoName/blob/master/README.md
但是,如果您只想指向您的 Repo 的根目录(或任何其他目录),那么最好使用完整的 URL。毕竟,如果有人下载了您的存储库并在本地查看源代码,则存储库根目录的相对 URL 将与在 GitHub 上查看文件时不同。在这种情况下,您可能仍希望将它们指向 GitHub。因此,您应该使用:
[root](https://github.com/UserName/RepoName)
这样做的另一个好处是,如果您的文档在其他地方发布(可能是文档托管服务),link 仍将指向 GitHub 存储库,而不是托管服务。毕竟,您项目根目录下的自述文件不太可能包含在上述托管服务的 docs/
目录中。
也许这有助于理解 GitHub 的 URL 方案大概是如何工作的。我说 "presumably" 是因为我没有内部知识,只是对这些类型的系统通常是如何设计的有一个大概的了解。
GitHub 未提供平面文件。相反,他们的服务器将 URL 分开,并使用不同的部分来 return 正确的响应。 URL 结构看起来像这样:
https://github.com/<username>/<repository name>/<resource type>/<branch>/<resource path>
username
、repository name
、resource type
和 branch
相当随意,只是 GitHub 确保它们从正确的位置。
resource type
很重要,因为它们可能不会从工作树中提取文件。相反,他们通过较低级别直接从 Repo 本身拉取 files/directory 列表。在那种情况下,获取文件与获取目录列表非常不同,并且需要不同的代码路径。因此,您不能请求带有指向树(目录)的 resource path
的 blob(文件),反之亦然。服务器变得混乱并且 return 出现错误。
重点是 GitHub 的服务器在一组略有不同的规则上工作。您可以使用相对 URLs 在 URL 的 resource path
部分内移动,但是一旦您更改 resource path
部分中的 resource type
URL,如果你不同时更改 URL 中的 resource type
,那么 GitHub 的整个方案就被打破了。但是,浏览器(或 HTML 或 Markdown)对此一无所知,并且相关的 URL 不会对此进行补偿。因此,您不能可靠地使用相对 URLs 在 GitHub 存储库中移动,除非您了解所有的细微之处。有时最好使用绝对 links.
经过一番研究,我找到了这个解决方案:
[the real relative root of any fork](/../../)
它总是指向默认分支。对我来说没关系,所以这取决于你
PS
通过这样的技巧,您还可以获得以下能力:
[test](/../../tree/test)
- link 到另一个分支
[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)
- 查找文件
我需要有一个亲戚 link 到我的 markdown 文件
的 repo 的根目录(我需要它适用于任何叉子)
所以它看起来是向根目录中的某个文件提供link的唯一方法:
the [Root](/README.md)
或
the [Root](../README.md)
(例如,如果它位于 /doc/README.md)
同时我可以在不引用文件的情况下引用任何文件夹
the [Doc](/doc)
但是如果我尝试将 link 放入根文件夹:
the [real root](/)
the [real root](../)
我要一个link这样的
https://github.com/UserName/RepoName/blob/master
这与
不同https://github.com/UserName/RepoName/blob/master/doc
指404
因此,如果我不想在根目录中引用 README.md(我可能根本没有)
有什么办法可以有这样的link?
您可以 link 直接访问文件 (../README.md
),或者直接使用完整的绝对 URL 到 link 直接访问 repo 根目录:https://github.com/UserName/RepoName
使用相对 links 在 GitHub 上效果不佳。请注意以下两个 URL 之间的区别:
https://github.com/UserName/RepoName/tree/master/somedir
https://github.com/UserName/RepoName/blob/master/somedir/somefile
注意第一个指向一个目录,第二个指向一个文件。然而,在 "RepoName" 之后,我们有 tree
(目录)或 blob
(文件)之一。因此两者之间的相对 links 将无法正常工作。在 GitHub 上,您不能在文件和目录之间使用相对 link 到 link。但是,您可以在两个文件之间 link(因为两个 URL 都包含 blob
)。因此,如果你想 link 从 somefile
回到根目录中的 README.md
,你可以这样做:
[README](../README.md)
那会给你 URL:
https://github.com/UserName/RepoName/blob/master/somedir/../README.md
这将被标准化为
https://github.com/UserName/RepoName/blob/master/README.md
但是,如果您只想指向您的 Repo 的根目录(或任何其他目录),那么最好使用完整的 URL。毕竟,如果有人下载了您的存储库并在本地查看源代码,则存储库根目录的相对 URL 将与在 GitHub 上查看文件时不同。在这种情况下,您可能仍希望将它们指向 GitHub。因此,您应该使用:
[root](https://github.com/UserName/RepoName)
这样做的另一个好处是,如果您的文档在其他地方发布(可能是文档托管服务),link 仍将指向 GitHub 存储库,而不是托管服务。毕竟,您项目根目录下的自述文件不太可能包含在上述托管服务的 docs/
目录中。
也许这有助于理解 GitHub 的 URL 方案大概是如何工作的。我说 "presumably" 是因为我没有内部知识,只是对这些类型的系统通常是如何设计的有一个大概的了解。
GitHub 未提供平面文件。相反,他们的服务器将 URL 分开,并使用不同的部分来 return 正确的响应。 URL 结构看起来像这样:
https://github.com/<username>/<repository name>/<resource type>/<branch>/<resource path>
username
、repository name
、resource type
和 branch
相当随意,只是 GitHub 确保它们从正确的位置。
resource type
很重要,因为它们可能不会从工作树中提取文件。相反,他们通过较低级别直接从 Repo 本身拉取 files/directory 列表。在那种情况下,获取文件与获取目录列表非常不同,并且需要不同的代码路径。因此,您不能请求带有指向树(目录)的 resource path
的 blob(文件),反之亦然。服务器变得混乱并且 return 出现错误。
重点是 GitHub 的服务器在一组略有不同的规则上工作。您可以使用相对 URLs 在 URL 的 resource path
部分内移动,但是一旦您更改 resource path
部分中的 resource type
URL,如果你不同时更改 URL 中的 resource type
,那么 GitHub 的整个方案就被打破了。但是,浏览器(或 HTML 或 Markdown)对此一无所知,并且相关的 URL 不会对此进行补偿。因此,您不能可靠地使用相对 URLs 在 GitHub 存储库中移动,除非您了解所有的细微之处。有时最好使用绝对 links.
经过一番研究,我找到了这个解决方案:
[the real relative root of any fork](/../../)
它总是指向默认分支。对我来说没关系,所以这取决于你
PS
通过这样的技巧,您还可以获得以下能力:
[test](/../../tree/test)
- link 到另一个分支
[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)
- 查找文件