首页 > 解决方案 > Github 中的“blob”对应什么?

问题描述

以下 URL 中“blob”后面的单词指向给定存储库的“master”分支:

https://github.com/celery/celery/blob/master/docs/django/first-steps-with-django.rst

根据上述约定,以下 URL 指向什么?

https://github.com/celery/celery/blob/241d2e8ca85a87a2a6d01380d56eb230310868e3/docs/django/first-steps-with-django.rst

我正在阅读 celery 的最新文档,并希望在 Github 上查看其来源,因此提出了问题。请注意,我可以通过转到“master”分支查看主文档的源代码。

标签: gitgithubread-the-docs

解决方案


这实际上是一个关于GitHub的问题,而不是关于Git的问题。

请记住,Git 本身就是关于提交的。每个提交都存储一些数据——一组文件的快照——和一些元数据,包括提交的人、时间和原因等内容。这些提交中的每一个都由其哈希 ID 唯一标识。分支和标记名称(如果存在任何此类名称)仅用于查找某些特定的哈希 ID 以使您(或 Git)启动,因为任何提交中的元数据项之一是哈希 ID 列表,因此 Git 可以从最后一次提交并向后工作。

提交及其存储的数据和元数据是 Git 存在的原因。每个 Git 存储库都是提交的集合,以及一些帮助查找提交的辅助数据。(您计算机上的非裸存储库还为提供了一个工作区,您可以在其中进行新工作,但不允许您在这里进行新工作的提交和辅助数据是最低限度的。)

另一方面,GitHub 与提交无关。GitHub 是关于分享的。1 此共享使用(裸)Git 存储库,但在此基础上添加了更多内容。Git 存储库——或者某种类型的存储库2——对此是必需的,但不是增值部分。

当 GitHub 尝试增加其附加值时,他们开始添加以下内容:这是在一次特定提交中访问特定文件的便捷方式。GitHub 的接口是一个 API,该 API 是通过 HTTP/HTTPS 编码的。这意味着 URL 和 JSON 等等。

在这种情况下,GitHub 发明了一些特定的 URL 路径(参见 URL的剖析),它们可以引用提交中的文件。他们提供了一种使用提交哈希 ID 和 file-path-within-commit 来访问该特定提交中的文件的方法,以及另一种使用分支名称(例如master)加上 file-path-within-commit 的方法访问该分支名称标识的提交中的该文件。

要在 Git 中执行此操作,您通常只git checkout需要分支名称(将整个提交放入您的工作树),然后通过其操作系统级路径查看文件,该路径源自其 in-Git-commit 路径. 3 但也许您的问题是:如何从一个由分支名称标识的提交中查看一个文件? 在这种情况下,请尝试git show

git show master:path/to/File.ext

将允许您从该提交中查看以该名称 ( ) 存储的文件(无论名称解析path/to/file.ext为什么哈希 ID )。master


1共享和存档(异地存储)。二!我们的两个主要武器是...

2请记住,Bitbucket 曾经是 Mercurial 存储库共享站点。它持有 Hg 存储库,而不是 Git 存储库。也许有一天 GitHub 会拥有其他类型的存储库。

3操作系统级别的路径可能在几个方面与 in-Git 路径不同。例如,在典型的 Windows 系统上,文件名大小写(大写或小写)只被尊重一半,因此名为 Git 的文件path/to/File.ext可能驻留在 Windows 操作系统文件系统中的path/TO/file.EXT. 典型的 MacOS 文件系统对 UTF-8 字符串强制执行某些分解规则,因此 MacOS 也可能会更改 Git 文件的路径。Linux 倾向于不解释 UTF-8,因此如果 Git 使用无效的 UTF-8 字节序列作为文件路径名,Linux 在这里完全没有问题。


推荐阅读