GitHub API - 如何确定文件是否实际上是符号链接?

时间:2016-06-07 17:04:34

标签: rest github github-api

当通过GitHub API查询符号链接时,如果符号链接指向文件而不是目录,则会得到不同的结果。后者表现得更好,因为它返回"type": "symlink"作为其JSON的一部分,而前者返回"type": "file"。示例file symlink,示例directory symlink

当符号链接将自己宣传为文件时,它非常令人困惑,因为获取其下载URL只会让您获得符号链接的目标而不是文件内容

如何判断文件是否实际是符号链接,而不是真实文件?

此外,是返回类型的行为"文件"对于文件符号链接一个彻头彻尾的bug?它似乎不对。

2 个答案:

答案 0 :(得分:0)

Git中的符号链接并不关心目标是文件还是目录。 (或者即使目标存在。)

API 返回"文件" for symlink有问题的文件是不是符号链接。它是一个常规文件。克隆您的存储库后:

% ls -Flas muzhack/files/littleBitsMidiNotes.ino
4 -rw-r--r--  1 user  group  3247 Jun  7 12:00 muzhack/files/littleBitsMidiNotes.ino

% git ls-files --stage muzhack/files/littleBitsMidiNotes.ino
100644 08918243048ae4a4f57e69a34776e9a0bd1ec7af 0   muzhack/files/littleBitsMidiNotes.ino

模式100644(由ls-files返回的第一个字段)表示这是一个常规文件。相比之下,GitHub作为符号链接报告的条目实际上是一个符号链接:

% ls -Flas muzhack/files/adapter-board-files 
4 lrwxr-xr-x  1 user  group  25 Jun  7 12:00 muzhack/files/adapter-board-files@ -> ../../adapter-board-files

% git ls-files --stage muzhack/files/adapter-board-files
120000 ef17a5e7b4bef4e51f19dc6b4c360c95cbb223c8 0   muzhack/files/adapter-board-files

因此,GitHub API似乎正在正确报告此信息。

答案 1 :(得分:0)

不幸的是,答案是“您不”。 (使用API​​的当前状态)无法区分文件请求和符号链接。来自the documentation

如果所请求的:path指向符号链接,并且符号链接的目标是存储库中的普通文件,则API会以文件的内容进行响应[...]

否则,API会以一个对象来描述符号链接本身:

我在GitHub支持下提出了这一点,他们确认没有办法做到这一点。他们提出要向内部团队提出要求,但我想这不太可能得到解决。

一种解决方法(并非在所有情况下都适用)是通过https://raw.githubusercontent.com/请求文件,如果它是真实文件,则返回文件内容,如果是符号链接,则仅返回文件路径。