2020-07-30 08:09:33 -04:00
---
stage: Create
group: Source Code
2020-11-26 01:09:20 -05:00
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
2020-07-30 08:09:33 -04:00
type: reference, api
---
2017-05-18 04:49:03 -04:00
# Repositories API
2014-05-27 08:12:15 -04:00
2013-06-06 11:01:03 -04:00
## List repository tree
2016-12-16 12:21:58 -05:00
Get a list of repository files and directories in a project. This endpoint can
be accessed without authentication if the repository is publicly accessible.
2013-06-06 11:01:03 -04:00
2017-03-01 13:43:23 -05:00
This command provides essentially the same functionality as the `git ls-tree` command. For more information, see the section _Tree Objects_ in the [Git internals documentation ](https://git-scm.com/book/en/v2/Git-Internals-Git-Objects/#_tree_objects ).
2020-02-27 22:09:04 -05:00
```plaintext
2013-06-06 11:01:03 -04:00
GET /projects/:id/repository/tree
```
Parameters:
2017-04-08 04:54:00 -04:00
- `id` (required) - The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user
2018-10-21 07:01:38 -04:00
- `path` (optional) - The path inside repository. Used to get content of subdirectories
2017-03-07 19:14:33 -05:00
- `ref` (optional) - The name of a repository branch or tag or if not given the default branch
2016-08-29 11:23:40 -04:00
- `recursive` (optional) - Boolean value used to get a recursive tree (false by default)
2020-09-21 11:09:44 -04:00
- `per_page` (optional) - Number of results to show per page. If not specified, defaults to `20` .
Read more on [pagination ](README.md#pagination ).
2013-06-06 11:01:03 -04:00
```json
2014-04-05 02:36:47 -04:00
[
{
2016-08-29 11:23:40 -04:00
"id": "a1e8f8d745cc87e3a9248358d9352bb7f9a0aeba",
"name": "html",
2014-04-05 02:36:47 -04:00
"type": "tree",
2016-08-29 11:23:40 -04:00
"path": "files/html",
"mode": "040000"
2014-04-05 02:36:47 -04:00
},
{
2016-08-29 11:23:40 -04:00
"id": "4535904260b1082e14f867f7a24fd8c21495bde3",
"name": "images",
2014-04-05 02:36:47 -04:00
"type": "tree",
2016-08-29 11:23:40 -04:00
"path": "files/images",
"mode": "040000"
2014-04-05 02:36:47 -04:00
},
{
2016-08-29 11:23:40 -04:00
"id": "31405c5ddef582c5a9b7a85230413ff90e2fe720",
"name": "js",
2014-04-05 02:36:47 -04:00
"type": "tree",
2016-08-29 11:23:40 -04:00
"path": "files/js",
"mode": "040000"
2014-04-05 02:36:47 -04:00
},
{
2016-08-29 11:23:40 -04:00
"id": "cc71111cfad871212dc99572599a568bfe1e7e00",
"name": "lfs",
"type": "tree",
"path": "files/lfs",
"mode": "040000"
2014-04-05 02:36:47 -04:00
},
{
2016-08-29 11:23:40 -04:00
"id": "fd581c619bf59cfdfa9c8282377bb09c2f897520",
"name": "markdown",
"type": "tree",
"path": "files/markdown",
"mode": "040000"
},
{
"id": "23ea4d11a4bdd960ee5320c5cb65b5b3fdbc60db",
"name": "ruby",
"type": "tree",
"path": "files/ruby",
"mode": "040000"
2014-04-05 02:36:47 -04:00
},
{
2016-08-29 11:23:40 -04:00
"id": "7d70e02340bac451f281cecf0a980907974bd8be",
"name": "whitespace",
2014-04-05 02:36:47 -04:00
"type": "blob",
2016-08-29 11:23:40 -04:00
"path": "files/whitespace",
"mode": "100644"
2014-04-05 02:36:47 -04:00
}
]
2013-06-06 11:01:03 -04:00
```
2017-03-07 19:14:33 -05:00
## Get a blob from repository
2012-09-21 08:03:50 -04:00
2017-03-07 19:14:33 -05:00
Allows you to receive information about blob in repository like size and
content. Note that blob content is Base64 encoded. This endpoint can be accessed
2017-03-01 15:22:29 -05:00
without authentication if the repository is publicly accessible.
2012-09-21 08:03:50 -04:00
2020-02-27 22:09:04 -05:00
```plaintext
2013-08-27 21:22:42 -04:00
GET /projects/:id/repository/blobs/:sha
2012-09-21 08:03:50 -04:00
```
Parameters:
2017-04-08 04:54:00 -04:00
- `id` (required) - The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user
2017-09-23 09:21:32 -04:00
- `sha` (required) - The blob SHA
2013-09-26 16:42:49 -04:00
2013-12-23 04:37:38 -05:00
## Raw blob content
2016-12-16 12:21:58 -05:00
Get the raw file contents for a blob by blob SHA. This endpoint can be accessed
without authentication if the repository is publicly accessible.
2013-12-23 04:37:38 -05:00
2020-02-27 22:09:04 -05:00
```plaintext
2017-03-01 15:22:29 -05:00
GET /projects/:id/repository/blobs/:sha/raw
2013-12-23 04:37:38 -05:00
```
Parameters:
2017-04-08 04:54:00 -04:00
- `id` (required) - The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user
2014-08-15 03:03:18 -04:00
- `sha` (required) - The blob SHA
2013-12-23 04:37:38 -05:00
2013-09-26 16:42:49 -04:00
## Get file archive
2020-10-20 11:08:57 -04:00
> Support for [including Git LFS blobs](../topics/git/lfs/index.md#lfs-objects-in-project-archives) was [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/15079) in GitLab 13.5.
2016-12-16 12:21:58 -05:00
Get an archive of the repository. This endpoint can be accessed without
authentication if the repository is publicly accessible.
2013-09-26 16:42:49 -04:00
2020-10-20 11:08:57 -04:00
This endpoint has a rate limit threshold of 5 requests per minute for GitLab.com users.
2020-04-30 02:10:03 -04:00
2020-02-27 22:09:04 -05:00
```plaintext
2018-12-03 00:14:42 -05:00
GET /projects/:id/repository/archive[.format]
2013-09-26 16:42:49 -04:00
```
2018-12-03 00:14:42 -05:00
`format` is an optional suffix for the archive format. Default is
2019-01-26 08:54:54 -05:00
`tar.gz` . Options are `tar.gz` , `tar.bz2` , `tbz` , `tbz2` , `tb2` ,
2018-12-03 00:14:42 -05:00
`bz2` , `tar` , and `zip` . For example, specifying `archive.zip`
would send an archive in ZIP format.
2013-09-26 16:42:49 -04:00
Parameters:
2014-05-26 09:08:22 -04:00
2017-04-08 04:54:00 -04:00
- `id` (required) - The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user
2019-02-12 07:31:33 -05:00
- `sha` (optional) - The commit SHA to download. A tag, branch reference, or SHA can be used. This defaults to the tip of the default branch if not specified. For example:
2020-01-30 10:09:15 -05:00
```shell
2020-05-27 20:08:37 -04:00
curl --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.com/api/v4/projects/< project_id > /repository/archive?sha=< commit_sha > "
2019-07-09 03:16:17 -04:00
```
2014-05-26 09:08:22 -04:00
## Compare branches, tags or commits
2016-12-16 12:21:58 -05:00
This endpoint can be accessed without authentication if the repository is
2020-01-24 04:08:32 -05:00
publicly accessible. Note that diffs could have an empty diff string if [diff limits ](../development/diffs.md#diff-limits ) are reached.
2016-12-16 12:21:58 -05:00
2020-02-27 22:09:04 -05:00
```plaintext
2014-05-26 09:08:22 -04:00
GET /projects/:id/repository/compare
```
Parameters:
2017-04-08 04:54:00 -04:00
- `id` (required) - The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user
2014-08-15 03:03:18 -04:00
- `from` (required) - the commit SHA or branch name
- `to` (required) - the commit SHA or branch name
2018-06-23 15:39:11 -04:00
- `straight` (optional) - comparison method, `true` for direct comparison between `from` and `to` (`from`..`to`), `false` to compare using merge base (`from`...`to`)'. Default is `false` .
2014-05-26 09:08:22 -04:00
2020-02-27 22:09:04 -05:00
```plaintext
2014-05-26 09:08:22 -04:00
GET /projects/:id/repository/compare?from=master& to=feature
```
2014-08-04 16:32:41 -04:00
Response:
2014-05-26 09:08:22 -04:00
```json
2014-05-27 04:16:50 -04:00
2014-05-26 09:08:22 -04:00
{
"commit": {
2014-05-27 04:16:50 -04:00
"id": "12d65c8dd2b2676fa3ac47d955accc085a37a9c1",
"short_id": "12d65c8dd2b",
"title": "JS fix",
2020-03-03 22:08:50 -05:00
"author_name": "Example User",
"author_email": "user@example.com",
2014-05-27 04:16:50 -04:00
"created_at": "2014-02-27T10:27:00+02:00"
2014-05-26 09:08:22 -04:00
},
"commits": [{
2014-05-27 04:16:50 -04:00
"id": "12d65c8dd2b2676fa3ac47d955accc085a37a9c1",
"short_id": "12d65c8dd2b",
"title": "JS fix",
2020-03-03 22:08:50 -05:00
"author_name": "Example User",
"author_email": "user@example.com",
2014-05-27 04:16:50 -04:00
"created_at": "2014-02-27T10:27:00+02:00"
2014-05-26 09:08:22 -04:00
}],
"diffs": [{
2014-05-27 04:16:50 -04:00
"old_path": "files/js/application.js",
"new_path": "files/js/application.js",
2014-05-26 09:08:22 -04:00
"a_mode": null,
2014-05-27 04:16:50 -04:00
"b_mode": "100644",
"diff": "--- a/files/js/application.js\n+++ b/files/js/application.js\n@@ -24,8 +24,10 @@\n //= require g.raphael-min\n //= require g.bar-min\n //= require branch-graph\n-//= require highlightjs.min\n-//= require ace/ace\n //= require_tree .\n //= require d3\n //= require underscore\n+\n+function fix() { \n+ alert(\"Fixed\")\n+}",
"new_file": false,
2014-05-26 09:08:22 -04:00
"renamed_file": false,
"deleted_file": false
2014-05-27 04:16:50 -04:00
}],
"compare_timeout": false,
"compare_same_ref": false
2014-05-26 09:08:22 -04:00
}
```
2014-07-02 12:17:56 -04:00
## Contributors
2016-12-16 12:21:58 -05:00
Get repository contributors list. This endpoint can be accessed without
authentication if the repository is publicly accessible.
2014-07-02 12:17:56 -04:00
2020-02-27 22:09:04 -05:00
```plaintext
2014-07-02 12:17:56 -04:00
GET /projects/:id/repository/contributors
```
2020-12-04 16:09:29 -05:00
WARNING:
2020-08-18 11:10:33 -04:00
The `additions` and `deletions` attributes are deprecated [as of GitLab 13.4 ](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/39653 ) because they [always return `0` ](https://gitlab.com/gitlab-org/gitlab/-/issues/233119 ).
2014-07-02 12:17:56 -04:00
Parameters:
2014-08-15 03:03:18 -04:00
2017-04-08 04:54:00 -04:00
- `id` (required) - The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user
2018-04-16 06:30:40 -04:00
- `order_by` (optional) - Return contributors ordered by `name` , `email` , or `commits` (orders by commit date) fields. Default is `commits`
2017-11-18 09:06:55 -05:00
- `sort` (optional) - Return contributors sorted in `asc` or `desc` order. Default is `asc`
2014-07-02 12:17:56 -04:00
Response:
2020-02-27 22:09:04 -05:00
```json
2014-07-02 12:17:56 -04:00
[{
2020-02-27 22:09:04 -05:00
"name": "Example User",
"email": "example@example.com",
2014-07-02 12:17:56 -04:00
"commits": 117,
2020-08-18 11:10:33 -04:00
"additions": 0,
"deletions": 0
2014-07-02 12:17:56 -04:00
}, {
2020-02-27 22:09:04 -05:00
"name": "Sample User",
"email": "sample@example.com",
2014-07-02 12:17:56 -04:00
"commits": 33,
2020-08-18 11:10:33 -04:00
"additions": 0,
"deletions": 0
2014-07-02 12:17:56 -04:00
}]
```
2018-07-31 10:38:03 -04:00
## Merge Base
2018-12-27 10:08:50 -05:00
Get the common ancestor for 2 or more refs (commit SHAs, branch names or tags).
2018-07-31 10:38:03 -04:00
2020-02-27 22:09:04 -05:00
```plaintext
2018-07-31 10:38:03 -04:00
GET /projects/:id/repository/merge_base
```
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) |
2018-10-11 10:27:04 -04:00
| `refs` | array | yes | The refs to find the common ancestor of, multiple refs can be passed |
2018-07-31 10:38:03 -04:00
2020-01-30 10:09:15 -05:00
```shell
2018-12-27 04:03:08 -05:00
curl --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/5/repository/merge_base?refs[]=304d257dcb821665ab5110318fc58a007bd104ed& refs[]=0031876facac3f2b2702a0e53a26e89939a42209"
2018-07-31 10:38:03 -04:00
```
Example response:
```json
{
2019-07-11 18:53:54 -04:00
"id": "1a0b36b3cdad1d2ee32457c102a8c0b7056fa863",
"short_id": "1a0b36b3",
"title": "Initial commit",
"created_at": "2014-02-27T08:03:18.000Z",
"parent_ids": [],
"message": "Initial commit\n",
2020-03-03 22:08:50 -05:00
"author_name": "Example User",
"author_email": "user@example.com",
2019-07-11 18:53:54 -04:00
"authored_date": "2014-02-27T08:03:18.000Z",
2020-03-03 22:08:50 -05:00
"committer_name": "Example User",
"committer_email": "user@example.com",
2019-07-11 18:53:54 -04:00
"committed_date": "2014-02-27T08:03:18.000Z"
2018-07-31 10:38:03 -04:00
}
```