如何通过 curl 从 GitLab 项目的通用包注册表中删除文件?

How do I delete a file from a GitLab project's generic package registry via curl?

The documented way 通过 curl 从 GitLab 项目的包注册表中删除文件似乎对我不起作用。

文档说

curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/:id/packages/:package_id/package_files/:package_file_id"

所以例如如果我想从 ID 为 12345678 的项目包注册表中名为“my-package”的通用包的 1.0.0 版中删除名为“myfile.ext”的文件,我认为这意味着命令应该是

curl --request DELETE --header "PRIVATE-TOKEN: <my_access_token>" "https://gitlab.example.com/api/v4/projects/12345678/packages/my-package/package_files/myfile.ext"

但对我来说这会产生

{"error":"package_id is invalid, package_file_id is invalid"}

我也尝试了该命令的几个近似变体,none 其中有效。具体来说,我对删除的URL和上传的URL之间的差异感到惊讶,即:

所以我尝试了这三件事的所有 8 种组合 including/excluding,但除了最初的组合之外,所有 7 种组合都产生了

{"error":"404 Not Found"}

我可以通过 curl 上传文件,并且可以通过 GitLab web UI 删除它。如何通过 curl 或更一般地从命令行删除它?

这表示对文档中 package_idpackage_file_id 的含义存在误解。这些分别不是包名和文件名。相反,包和文件每个都有一个自动分配的数字字符串 ID,就像项目一样——尽管令人困惑的是,项目的 ID 显示在网络上 UI 而包和文件的 ID 却没有t.

您可以通过Packages API找到包和文件的id。也可以分别根据包和文件的网址来猜,在web UI.

使用正确的 ID,curl 删除命令会像记录的那样工作。