【问题标题】:GitHub API - How do I find out if a file is actually a symlink?GitHub API - 如何确定文件是否实际上是符号链接?
【发布时间】:2016-06-07 17:04:33
【问题描述】:

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

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

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

另外,为文件符号链接返回类型“文件”的行为是一个彻头彻尾的错误吗?只是看起来不太对。

【问题讨论】:

    标签: rest github github-api


    【解决方案1】:

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

    API 不是为符号链接返回“文件” 有问题的文件不是符号链接。这是一个常规文件。克隆存储库后:

    % 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 似乎正确地报告了此信息。

    【讨论】:

    • 对不起,我暂时将符号链接放入普通文件以解决该错误。很快就会把它改回符号链接:)
    • 好的,文件被重新制作成符号链接。去吧。
    • 如果你打开github.com/aknuds1/Littlebits-Arduino/blob/master/muzhack/files/…,你应该会看到它被GitHub报告为一个符号链接。
    • 啊哈,感谢您的澄清。显然我错了,因为developer.github.com/v3/repos/contents 将其记录为此处的预期行为......
    • 奇怪。问题是符号链接声称是一个文件,但如果您获取download_url,您将只收到符号链接指向的路径,而不是文件的实际内容。即,它声称是一个文件,但不是。真的很令人费解,而不是我可以使用的东西:/
    【解决方案2】:

    不幸的是,答案是“你没有”。没有办法(API 处于当前状态)来区分文件请求和符号链接。来自the documentation

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

    否则,API 会使用描述符号链接本身的对象进行响应:

    我通过 GitHub 支持提出了这个问题,他们确认没有办法做到这一点。他们提出向内部团队提出请求,但我想它不太可能被接受。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-07
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 2012-06-19
      相关资源
      最近更新 更多