Github中的“blob”对应什么?

Jai*_*rma 4 git github read-the-docs

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

https://github.com/celery/celery/blob/master/docs/django/first-steps-with-django.rst
Run Code Online (Sandbox Code Playgroud)

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

https://github.com/celery/celery/blob/241d2e8ca85a87a2a6d01380d56eb230310868e3/docs/django/first-steps-with-django.rst
Run Code Online (Sandbox Code Playgroud)

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

tor*_*rek 6

这实际上更多是关于GitHub的问题,而不是关于Git 的问题

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

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

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

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

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

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

git show master:path/to/File.ext
Run Code Online (Sandbox Code Playgroud)

将让您查看该提交中以该名称 ( path/to/file.ext)存储的文件(名称master解析为的任何哈希 ID )。


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

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

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