21

我在 GitLab 服务器上有一个私有存储库,使用 SSH 我可以使用 git clone 拉取项目。

但我想直接从服务器在 linux 命令行上运行一个脚本(更具体地说,一个 Drupal / Drush .make 文件)

我尝试使用原始文件运行它:

drush make http://server.com/user/project/raw/master/file.make

(为了方便非 Drupal 用户,假设)

curl http://server.com/user/project/raw/master/file.make

没有成功。当然,它会返回我的登录页面。

可能吗?

4

3 回答 3

28

Chris的宝贵帮助下,您可以从 GitLab 服务器运行脚本(在我的例子中是 drupal .make 文件)。(可能它适用于 GitHub,但我没有测试它。也许语法会有点不同)。(当然这适用于任何类型的脚本)

可以使用身份验证令牌来完成。这是 GitLab 的 API 的文档,这里是 GitHub 的 API

为方便起见,我将使用https://gitlab.com作为示例服务器。

  • 转到https://gitlab.com/profile/account并找到您的“私人令牌”

  • 然后打印项目列表,找到你要找的项目的id

    curl https://gitlab.com/api/v3/projects?private_token=<your_private_token>

    或者用你的浏览器去那里(一个json查看器会有很大帮助)

  • 然后打印此项目中的文件列表并找到您要查找的文件的 id

    curl https://gitlab.com/api/v3/projects/<project_id>/repository/tree?private_token=<your_private_token>

  • 最后获取/运行文件!

    curl https://gitlab.com/api/v3/projects/<project_id>/repository/raw_blobs/<file_id>?private_token=<your_private_token>

如果您想运行脚本(drupal .make)

drush make https://gitlab.com/api/v3/projects/<project_id>/repository/raw_blobs/<file_id>?private_token=<your_private_token> <drupal_folder>

(如果您在这里寻找将 GitLab 与 Aegir .make 平台集成而不使用令牌(可能是 SSH?)的工作流程,请创建一个线程并在此处粘贴链接。)

编辑

您可以project_id使用编码的项目名称获取不带 的文件。例如,my-user-name/my-project将变为:my-user-name%2Fmy-project

于 2014-06-13T17:11:25.597 回答
11

2018 年 12 月 25 日更新:

只要您不下载大文件,这应该可以工作:

curl -s -H "Private-Token: <token>" "https://gitlab.com/api/v4/projects/<urlencode("gitlab_username/project_name")>/repository/files/<path/to/file>/raw?ref=<branch_name>"

,一个真实的例子,/README.md从私人存储库下载文件https://gitlab.com/divinity76/Yur17,其中网络下载网址是https://gitlab.com/divinity76/Yur17/raw/master/README.md?inline=false,是:

curl -s -H "Private-Token: afF2s1xgk6xcwXHy3J4C" "https://gitlab.com/api/v4/projects/divinity76%2Fyur17/repository/files/README%2Emd/raw?ref=master"

特别注意gitlab_username/repo_nameurl 编码的方式,例如/变成%2F(您可以通过打开浏览器 javascript 终端并encodeURIComponent("your_username/repo_name");在终端中写入并按 Enter 来检查您的用户名和 repo 名称是如何作为 url 编码的。)

感谢Jonathan Hallmg.gitlab.com 的 @ gitlab 和https://docs.gitlab.com/ee/api/repository_files.html以及tvl帮助达成解决方案。



2018 年 12 月 11日更新:此方法不再有效,现在它只提供登录页面,并显示一条消息need to log in to continue,即使使用 HTTP 200 OK(对他们感到羞耻),如果我找出原因将更新(@XavierStuvw 声称它是安全的相关问题)



我找到了比@tvl 的答案更简单的方法,

首先在此处创建具有 API 访问权限的访问令牌:https://gitlab.com/profile/personal_access_tokens,然后执行以下操作:

wget --header 'PRIVATE-TOKEN: <token>' 'https://gitlab.com/<username>/<repo>/raw/master/path/to/file.ext'

我在这里找到了解决方案。

于 2018-01-03T19:24:57.127 回答
3

如果您想从私人 GitLab 访问文件,您可以使用以下对我有用的方法:)

构造网址:

https://url/api/v4/projects/projectId/repository/files/fileName/raw?ref=master&private_token=Generated_private_token


  • url 是您的 Gitlab 网址,例如:git.lab.com。
  • /api/v4/projects是一个常数。
  • projectId是你的项目的 projectId,你可以在 gitlab 中你的项目名称下方找到它。
  • /repository/files又是一个常数。
  • fileName是文件的名称,例如:sagar.txt
  • /raw?ref=是一个常量, ref 的值可以是 master 或任何您想从中获取文件的分支。我正在从 Master 检索文件。
  • Generated_private_token应该是从 gitlab 生成的,请按照链接中提到的步骤操作: Generate Private Token
于 2019-02-12T05:47:31.827 回答