リポジトリファイルAPI

この API を使用して、リポジトリ内のファイルを取得、作成、更新、削除できます。この API のレート制限を設定することもできます。

個人アクセストークンで利用可能なスコープ

個人アクセストークンを使用して利用できるさまざまなスコープを次の表に示します。

スコープ説明
apiリポジトリファイルへの読み書きアクセスを許可します。
read_apiリポジトリファイルへの読み込みアクセスを許可します。
read_repositoryリポジトリファイルへの読み取りアクセスを許可します。

リポジトリからファイルを取得

レスポンスのexecute_filemode フィールドは GitLab 14.10 で導入されました。

名前、サイズ、内容のようなリポジトリ内のファイルに関する情報を受け取ることができます。ファイルの内容は Base64 エンコードされています。リポジトリが公開されている場合、このエンドポイントは認証なしでアクセスできます。

GET /projects/:id/repository/files/:file_path
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/13083/repository/files/app%2Fmodels%2Fkey%2Erb?ref=master"
属性種類必須説明
id整数または文字列。yes認証ユーザーが所有するプロジェクトのIDまたはURLエンコードされたパス
file_path文字列です。yesURL エンコードされた新しいファイルへのフルパス、例えばlib%2Fclass%2Erb.
ref文字列です。yesブランチ、タグ、コミットの名前。

応答例

{
  "file_name": "key.rb",
  "file_path": "app/models/key.rb",
  "size": 1476,
  "encoding": "base64",
  "content": "IyA9PSBTY2hlbWEgSW5mb3...",
  "content_sha256": "4c294617b60715c1d218e61164a3abd4808a4284cbc30e6728a01ad9aada4481",
  "ref": "master",
  "blob_id": "79f7bbd25901e8334750839545a9bd021f0e4c83",
  "commit_id": "d5a3ff139356ce33e37e73add446f16869741b50",
  "last_commit_id": "570e7b2abdd848b95f2f578043fc23bd6f6fd24d",
  "execute_filemode": false
}
note
blob_id は blob SHA です。Repositories API のGet a blob fromrepository を参照してください。

GET メソッドに加えて、HEAD を使用してファイルのメタデータだけを取得することもできます。

HEAD /projects/:id/repository/files/:file_path
curl --head --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/13083/repository/files/app%2Fmodels%2Fkey%2Erb?ref=master"

応答例

HTTP/1.1 200 OK
...
X-Gitlab-Blob-Id: 79f7bbd25901e8334750839545a9bd021f0e4c83
X-Gitlab-Commit-Id: d5a3ff139356ce33e37e73add446f16869741b50
X-Gitlab-Content-Sha256: 4c294617b60715c1d218e61164a3abd4808a4284cbc30e6728a01ad9aada4481
X-Gitlab-Encoding: base64
X-Gitlab-File-Name: key.rb
X-Gitlab-File-Path: app/models/key.rb
X-Gitlab-Last-Commit-Id: 570e7b2abdd848b95f2f578043fc23bd6f6fd24d
X-Gitlab-Ref: master
X-Gitlab-Size: 1476
X-Gitlab-Execute-Filemode: false
...

リポジトリから blame ファイルを取得

注釈履歴情報を受け取ることができます。それぞれの注釈範囲は行と対応するコミット情報を含んでいます。

GET /projects/:id/repository/files/:file_path/blame
属性種類必須説明
id整数または文字列。yes認証ユーザーが所有するプロジェクトのIDまたはURLエンコードされたパス
file_path文字列です。yes新しいファイルへの URL エンコードされたフルパス、例えばlib%2Fclass%2Erb.
ref文字列です。yesブランチ、タグ、コミットの名前。
range[end]整数。yes責めるべき範囲の最後の行。
range[start]整数。yes責めるべき範囲の最初の行。
rangeハッシュいいえ責任の範囲
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/13083/repository/files/path%2Fto%2Ffile.rb/blame?ref=master"

応答例

[
  {
    "commit": {
      "id": "d42409d56517157c48bf3bd97d3f75974dde19fb",
      "message": "Add feature\n\nalso fix bug\n",
      "parent_ids": [
        "cc6e14f9328fa6d7b5a0d3c30dc2002a3f2a3822"
      ],
      "authored_date": "2015-12-18T08:12:22.000Z",
      "author_name": "John Doe",
      "author_email": "john.doe@example.com",
      "committed_date": "2015-12-18T08:12:22.000Z",
      "committer_name": "John Doe",
      "committer_email": "john.doe@example.com"
    },
    "lines": [
      "require 'fileutils'",
      "require 'open3'",
      ""
    ]
  },
  ...
]
note
HEAD メソッドはファイルのメタデータだけを返します。
curl --head --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/13083/repository/files/path%2Fto%2Ffile.rb/blame?ref=master"

応答例

HTTP/1.1 200 OK
...
X-Gitlab-Blob-Id: 79f7bbd25901e8334750839545a9bd021f0e4c83
X-Gitlab-Commit-Id: d5a3ff139356ce33e37e73add446f16869741b50
X-Gitlab-Content-Sha256: 4c294617b60715c1d218e61164a3abd4808a4284cbc30e6728a01ad9aada4481
X-Gitlab-Encoding: base64
X-Gitlab-File-Name: file.rb
X-Gitlab-File-Path: path/to/file.rb
X-Gitlab-Last-Commit-Id: 570e7b2abdd848b95f2f578043fc23bd6f6fd24d
X-Gitlab-Ref: master
X-Gitlab-Size: 1476
X-Gitlab-Execute-Filemode: false
...

使用例

注釈範囲を指定するには、range[start]range[end] パラメータにファイルの開始行番号と終了行番号を指定します。

curl --head --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/13083/repository/files/path%2Fto%2Ffile.rb/blame?ref=master&range[start]=1&range[end]=2"

応答例

[
  {
    "commit": {
      "id": "d42409d56517157c48bf3bd97d3f75974dde19fb",
      "message": "Add feature\n\nalso fix bug\n",
      "parent_ids": [
        "cc6e14f9328fa6d7b5a0d3c30dc2002a3f2a3822"
      ],
      "authored_date": "2015-12-18T08:12:22.000Z",
      "author_name": "John Doe",
      "author_email": "john.doe@example.com",
      "committed_date": "2015-12-18T08:12:22.000Z",
      "committer_name": "John Doe",
      "committer_email": "john.doe@example.com"
    },
    "lines": [
      "require 'fileutils'",
      "require 'open3'"
    ]
  },
  ...
]

リポジトリから生ファイルを取得

GET /projects/:id/repository/files/:file_path/raw
属性種類必須説明
id整数または文字列。yes認証ユーザーが所有するプロジェクトのIDまたはURLエンコードされたパス
file_path文字列です。yes新しいファイルへの URL エンコードされたフルパス、たとえばlib%2Fclass%2Erb.
ref文字列です。いいえブランチ、タグ、コミットの名前。デフォルトはプロジェクトのHEAD です。
lfsbooleanいいえポインタではなく Git LFS ファイルの内容を返すかどうかを指定します。Git LFS でファイルが追跡されていない場合は無視されます。デフォルトはfalse
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/13083/repository/files/app%2Fmodels%2Fkey%2Erb/raw?ref=master"
note
Get file from repository のように、HEAD を使ってファイルのメタデータだけを取得することもできます。

リポジトリに新規ファイルを作成

execute_filemode パラメータは GitLab 14.10 で導入されました。

一つのファイルを作成できます。一つのリクエストで複数のファイルを作成するには、commits API を参照してください。

POST /projects/:id/repository/files/:file_path
属性種類必須説明
branch文字列です。yes新しく作成するブランチの名前。コミットはこのブランチに追加されます。
commit_message文字列です。yesコミットメッセージ。
content文字列です。yesファイルの内容
file_path文字列です。yes新しいファイルへの URL エンコードされたフルパス。例:lib%2Fclass%2Erb.
id整数または文字列。yes認証ユーザーが所有するプロジェクトのIDまたはURLエンコードされたパス
author_email文字列です。いいえコミット作成者のメールアドレス。
author_name文字列です。いいえコミット作成者の名前。
encoding文字列です。いいえエンコードをbase64 に変更します。デフォルトはtext
execute_filemodebooleanいいえファイルのexecute フラグを有効または無効にします。true またはfalseを指定します。
start_branch文字列です。いいえ新しいブランチを作成するベースブランチの名前。
curl --request POST --header 'PRIVATE-TOKEN: <your_access_token>' \
     --header "Content-Type: application/json" \
     --data '{"branch": "master", "author_email": "author@example.com", "author_name": "Firstname Lastname",
               "content": "some content", "commit_message": "create a new file"}' \
     "https://gitlab.example.com/api/v4/projects/13083/repository/files/app%2Fproject%2Erb"

応答例

{
  "file_path": "app/project.rb",
  "branch": "master"
}

リポジトリの既存のファイルを更新します。

execute_filemode パラメータは GitLab 14.10 で導入されました。

単一のファイルを更新できます。一つのリクエストで複数のファイルを更新するには、commits API を参照してください。

PUT /projects/:id/repository/files/:file_path
属性種類必須説明
branch文字列です。yes新しく作成するブランチの名前。コミットはこのブランチに追加されます。
commit_message文字列です。yesコミットメッセージ。
content文字列です。yesファイルの内容
file_path文字列です。yes新しいファイルへの URL エンコードされたフルパス。例:lib%2Fclass%2Erb.
id整数または文字列。yes認証ユーザーが所有するプロジェクトのIDまたはURLエンコードされたパス
author_email文字列です。いいえコミット作成者のメールアドレス。
author_name文字列です。いいえコミット作成者の名前。
encoding文字列です。いいえエンコードをbase64 に変更します。デフォルトはtext
execute_filemodebooleanいいえファイルのexecute フラグを有効または無効にします。true またはfalseを指定します。
last_commit_id文字列です。いいえ最後に確認されたファイルのコミットID。
start_branch文字列です。いいえ新しいブランチを作成するベースブランチの名前。
curl --request PUT --header 'PRIVATE-TOKEN: <your_access_token>' \
     --header "Content-Type: application/json" \
     --data '{"branch": "master", "author_email": "author@example.com", "author_name": "Firstname Lastname",
       "content": "some content", "commit_message": "update file"}' \
     "https://gitlab.example.com/api/v4/projects/13083/repository/files/app%2Fproject%2Erb"

応答例

{
  "file_path": "app/project.rb",
  "branch": "master"
}

何らかの理由でコミットが失敗した場合は、400 Bad Request エラーメッセージを返します。失敗したコミットの原因としては、次のようなものが考えられます:

  • file_path/../ が含まれていました(ディレクトリトラバーサルを試みました)。
  • コミットは空でした。新しいファイルの内容は現在のファイルの内容と同一でした。
  • ファイルの編集中にgit push によってブランチが更新されました。

GitLab Shellはブール値のリターンコードを持ち、GitLabがエラーを特定することを防ぎます。

リポジトリ内の既存ファイルの削除

単一のファイルを削除します。ひとつのリクエストで複数のファイルを削除するには、コミット API を参照してください。

DELETE /projects/:id/repository/files/:file_path
属性種類必須説明
branch文字列です。yes新しく作成するブランチの名前。コミットはこのブランチに追加されます。
commit_message文字列です。yesコミットメッセージ。
file_path文字列です。yes新しいファイルへの URL エンコードされたフルパス。例:lib%2Fclass%2Erb.
id整数または文字列。yes認証ユーザーが所有するプロジェクトのIDまたはURLエンコードされたパス
author_email文字列です。いいえコミット作成者のメールアドレス。
author_name文字列です。いいえコミット作成者の名前。
last_commit_id文字列です。いいえ最後に確認されたファイルのコミットID。
start_branch文字列です。いいえ新しいブランチを作成するベースブランチの名前。
curl --request DELETE --header 'PRIVATE-TOKEN: <your_access_token>' \
     --header "Content-Type: application/json" \
     --data '{"branch": "master", "author_email": "author@example.com", "author_name": "Firstname Lastname",
       "commit_message": "delete file"}' \
     "https://gitlab.example.com/api/v4/projects/13083/repository/files/app%2Fproject%2Erb"