直接从GitLab私有存储库打开文件

时间:2014-06-13 14:24:09

标签: linux git drupal gitlab drush

我在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

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

有可能吗?

3 个答案:

答案 0 :(得分:24)

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

可以使用身份验证令牌来完成。 Here is the documentation of the GitLab's APIhere is the GitHub's API

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

  • 转到https://gitlab.com/profile/account并找到您的"私人代币"

  • 然后打印项目列表并找到您要查找的项目的ID

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

    或者使用您的浏览器访问(json viewer会有很多帮助)

  • 然后打印此项目中的文件列表,找到您要查找的文件的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

答案 1 :(得分:9)

更新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_name是如何进行网址编码的,例如/成为%2F(您可以通过打开您的用户名和广告代码来检查您的用户名和回购名称是如何进行网址编码的浏览器javascript终端并在终端中写入encodeURIComponent("your_username/repo_name");并按回车键。)

感谢mg.gitlab.com上的Jonathan Hall @ gitlab,以及https://docs.gitlab.com/ee/api/repository_files.htmltvl,以帮助您找到解决方案。

更新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'

我找到了解决方案here.

答案 2 :(得分:-1)

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

构建网址:

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


  • url是您的Gitlab url,例如: git.lab.com。
  • / api / v4 / projects 是一个常量。
  • projectId 是项目的projectId,您可以在gitlab中的项目名称下方找到它。
  • /存储库/文件还是一个常量。
  • fileName 是以下文件的名称:sagar.txt
  • / raw?ref = 是一个常数,ref的值可以是master或要从中获取文件的任何分支。我正在从Master检索文件。
  • Generated_private_token 应从gitlab生成,请按照链接中提到的步骤进行操作: Generate Private Token