repository_files.md 6.7 KB
Newer Older
1
# Repository files API
M
Marin Jankovski 已提交
2

C
Ciro Santilli 已提交
3
**CRUD for repository files**
D
Dmitriy Zaporozhets 已提交
4

C
Ciro Santilli 已提交
5
**Create, read, update and delete repository files using this API**
D
Dmitriy Zaporozhets 已提交
6 7 8

## Get file from repository

9 10 11
Allows you to receive information about file in repository like name, size,
content. Note that file content is Base64 encoded. This endpoint can be accessed
without authentication if the repository is publicly accessible.
D
Dmitriy Zaporozhets 已提交
12 13

```
14
GET /projects/:id/repository/files/:file_path
D
Dmitriy Zaporozhets 已提交
15 16
```

17
```bash
18
curl --request GET --header 'PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK' 'https://gitlab.example.com/api/v4/projects/13083/repository/files/app%2Fmodels%2Fkey%2Erb?ref=master'
19 20
```

D
Dmitriy Zaporozhets 已提交
21 22 23 24 25 26 27 28 29
Example response:

```json
{
  "file_name": "key.rb",
  "file_path": "app/models/key.rb",
  "size": 1476,
  "encoding": "base64",
  "content": "IyA9PSBTY2hlbWEgSW5mb3...",
A
Ahmet Demir 已提交
30
  "content_sha256": "4c294617b60715c1d218e61164a3abd4808a4284cbc30e6728a01ad9aada4481",
D
Dmitriy Zaporozhets 已提交
31 32
  "ref": "master",
  "blob_id": "79f7bbd25901e8334750839545a9bd021f0e4c83",
33 34
  "commit_id": "d5a3ff139356ce33e37e73add446f16869741b50",
  "last_commit_id": "570e7b2abdd848b95f2f578043fc23bd6f6fd24d"
D
Dmitriy Zaporozhets 已提交
35 36 37 38 39
}
```

Parameters:

40 41 42
- `file_path` (required) - Url encoded full path to new file. Ex. lib%2Fclass%2Erb
- `ref` (required) - The name of branch, tag or commit

A
Ahmet Demir 已提交
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
NOTE: **Note:**
`blob_id` is the blob sha, see [repositories - Get a blob from repository](repositories.md#get-a-blob-from-repository)

In addition to the `GET` method, you can also use `HEAD` to get just file metadata.

```
HEAD /projects/:id/repository/files/:file_path
```

```bash
curl --head --header 'PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK' 'https://gitlab.example.com/api/v4/projects/13083/repository/files/app%2Fmodels%2Fkey%2Erb?ref=master'
```

Example response:

```text
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
...
```

73 74 75 76 77 78 79 80 81 82 83 84 85
## Get raw file from repository

```
GET /projects/:id/repository/files/:file_path/raw
```

```bash
curl --request GET --header 'PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK' 'https://gitlab.example.com/api/v4/projects/13083/repository/files/app%2Fmodels%2Fkey%2Erb/raw?ref=master'
```

Parameters:

- `file_path` (required) - Url encoded full path to new file. Ex. lib%2Fclass%2Erb
86
- `ref` (required) - The name of branch, tag or commit
D
Dmitriy Zaporozhets 已提交
87

A
Ahmet Demir 已提交
88 89 90
NOTE: **Note:**
Like [Get file from repository](repository_files.md#get-file-from-repository) you can use `HEAD` to get just file metadata.

D
Dmitriy Zaporozhets 已提交
91 92
## Create new file in repository

93 94
This allows you to create a single file. For creating multiple files with a single request see the [commits API](commits.html#create-a-commit-with-multiple-files-and-actions).

D
Dmitriy Zaporozhets 已提交
95
```
96
POST /projects/:id/repository/files/:file_path
D
Dmitriy Zaporozhets 已提交
97 98
```

99
```bash
100 101 102 103
curl --request POST --header 'PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK' --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'
104 105
```

D
Dmitriy Zaporozhets 已提交
106 107 108 109
Example response:

```json
{
110
  "file_path": "app/project.rb",
111
  "branch": "master"
D
Dmitriy Zaporozhets 已提交
112 113 114 115 116
}
```

Parameters:

117
- `file_path` (required) - Url encoded full path to new file. Ex. lib%2Fclass%2Erb
118 119
- `branch` (required) - Name of the branch
- `start_branch` (optional) - Name of the branch to start the new commit from
R
Robert Schilling 已提交
120
- `encoding` (optional) - Change encoding to 'base64'. Default is text.
121 122
- `author_email` (optional) - Specify the commit author's email address
- `author_name` (optional) - Specify the commit author's name
123 124
- `content` (required) - File content
- `commit_message` (required) - Commit message
D
Dmitriy Zaporozhets 已提交
125 126 127

## Update existing file in repository

128 129
This allows you to update a single file. For updating multiple files with a single request see the [commits API](commits.html#create-a-commit-with-multiple-files-and-actions).

D
Dmitriy Zaporozhets 已提交
130
```
131
PUT /projects/:id/repository/files/:file_path
D
Dmitriy Zaporozhets 已提交
132 133
```

134
```bash
135 136 137 138
curl --request PUT --header 'PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK' --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'
139 140
```

D
Dmitriy Zaporozhets 已提交
141 142 143 144
Example response:

```json
{
145
  "file_path": "app/project.rb",
146
  "branch": "master"
D
Dmitriy Zaporozhets 已提交
147 148 149 150 151
}
```

Parameters:

152
- `file_path` (required) - Url encoded full path to new file. Ex. lib%2Fclass%2Erb
153 154
- `branch` (required) - Name of the branch
- `start_branch` (optional) - Name of the branch to start the new commit from
R
Robert Schilling 已提交
155
- `encoding` (optional) - Change encoding to 'base64'. Default is text.
156 157
- `author_email` (optional) - Specify the commit author's email address
- `author_name` (optional) - Specify the commit author's name
158 159
- `content` (required) - New file content
- `commit_message` (required) - Commit message
160
- `last_commit_id` (optional) - Last known file commit id
D
Dmitriy Zaporozhets 已提交
161

162 163 164 165 166 167 168
If the commit fails for any reason we return a 400 error with a non-specific
error message. Possible causes for a failed commit include:
- the `file_path` contained `/../` (attempted directory traversal);
- the new file contents were identical to the current file contents, i.e. the
  user tried to make an empty commit;
- the branch was updated by a Git push while the file edit was in progress.

S
Sytse Sijbrandij 已提交
169 170
Currently gitlab-shell has a boolean return code, preventing GitLab from specifying the error.

D
Dmitriy Zaporozhets 已提交
171 172
## Delete existing file in repository

173 174
This allows you to delete a single file. For deleting multiple files with a singleh request see the [commits API](commits.html#create-a-commit-with-multiple-files-and-actions).

D
Dmitriy Zaporozhets 已提交
175
```
176
DELETE /projects/:id/repository/files/:file_path
D
Dmitriy Zaporozhets 已提交
177 178
```

179
```bash
180 181 182 183
curl --request DELETE --header 'PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK' --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'
184 185
```

D
Dmitriy Zaporozhets 已提交
186 187
Parameters:

188
- `file_path` (required) - Url encoded full path to new file. Ex. lib%2Fclass%2Erb
189 190
- `branch` (required) - Name of the branch
- `start_branch` (optional) - Name of the branch to start the new commit from
191 192
- `author_email` (optional) - Specify the commit author's email address
- `author_name` (optional) - Specify the commit author's name
193
- `commit_message` (required) - Commit message
R
Rubén Dávila 已提交
194
- `last_commit_id` (optional) - Last known file commit id