diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-11-03 21:09:22 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-11-03 21:09:22 +0300 |
commit | 62baa95f25f1cc56b100d2b64b0a3906f47dcfe1 (patch) | |
tree | 0bee30bc13c3cb7444f1d89d2647719718a31d76 /doc | |
parent | ff8eb438401fc82b883fc4ae69626f0035b69236 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'doc')
-rw-r--r-- | doc/administration/geo/replication/datatypes.md | 2 | ||||
-rw-r--r-- | doc/api/boards.md | 48 | ||||
-rw-r--r-- | doc/api/graphql/reference/gitlab_schema.graphql | 47 | ||||
-rw-r--r-- | doc/api/graphql/reference/gitlab_schema.json | 145 | ||||
-rw-r--r-- | doc/api/graphql/reference/index.md | 16 | ||||
-rw-r--r-- | doc/api/instance_clusters.md | 4 | ||||
-rw-r--r-- | doc/development/experiment_guide/index.md | 4 | ||||
-rw-r--r-- | doc/topics/autodevops/customize.md | 6 | ||||
-rw-r--r-- | doc/user/packages/generic_packages/index.md | 4 | ||||
-rw-r--r-- | doc/user/profile/account/two_factor_authentication.md | 82 | ||||
-rw-r--r-- | doc/user/project/merge_requests/csv_export.md | 30 | ||||
-rw-r--r-- | doc/user/project/repository/reducing_the_repo_size_using_git.md | 6 |
12 files changed, 309 insertions, 85 deletions
diff --git a/doc/administration/geo/replication/datatypes.md b/doc/administration/geo/replication/datatypes.md index d74c548b44f..d5c4d4256c8 100644 --- a/doc/administration/geo/replication/datatypes.md +++ b/doc/administration/geo/replication/datatypes.md @@ -188,7 +188,7 @@ successfully, you must replicate their data using some other means. | [Composer Repository](../../../user/packages/composer_repository/index.md) | **Yes** (13.2) | [No](https://gitlab.com/groups/gitlab-org/-/epics/1817) | Via Object Storage provider if supported. Native Geo support (Beta). | Behind feature flag `geo_package_file_replication`, enabled by default | | [Generic packages](../../../user/packages/generic_packages/index.md) | **Yes** (13.5) | [No](https://gitlab.com/groups/gitlab-org/-/epics/1817) | Via Object Storage provider if supported. Native Geo support (Beta). | Behind feature flag `geo_package_file_replication`, enabled by default | | [Versioned Terraform State](../../terraform_state.md) | **Yes** (13.5) | No | Via Object Storage provider if supported. Native Geo support (Beta). | Behind feature flag `geo_terraform_state_version_replication`, enabled by default | -| [External merge request diffs](../../merge_request_diffs.md) | **Yes** (13.5) | No | Behind feature flag `geo_merge_request_diff_replication`, enabled by default | | +| [External merge request diffs](../../merge_request_diffs.md) | **Yes** (13.5) | No | Via Object Storage provider if supported. Native Geo support (Beta). | Behind feature flag `geo_merge_request_diff_replication`, enabled by default | | [Versioned snippets](../../../user/snippets.md#versioned-snippets) | [No](https://gitlab.com/groups/gitlab-org/-/epics/2809) | [No](https://gitlab.com/groups/gitlab-org/-/epics/2810) | No | | | [Server-side Git hooks](../../server_hooks.md) | [No](https://gitlab.com/groups/gitlab-org/-/epics/1867) | No | No | | | [Elasticsearch integration](../../../integration/elasticsearch.md) | [No](https://gitlab.com/gitlab-org/gitlab/-/issues/1186) | No | No | | diff --git a/doc/api/boards.md b/doc/api/boards.md index 60df1a62173..fca22596c58 100644 --- a/doc/api/boards.md +++ b/doc/api/boards.md @@ -203,48 +203,12 @@ Example response: "web_url": "http://example.com/diaspora/diaspora-project-site" }, "name": "newboard", - "milestone": { - "id": 12 - "title": "10.0" - }, - "lists" : [ - { - "id" : 1, - "label" : { - "name" : "Testing", - "color" : "#F0AD4E", - "description" : null - }, - "position" : 1, - "max_issue_count": 0, - "max_issue_weight": 0, - "limit_metric": null - }, - { - "id" : 2, - "label" : { - "name" : "Ready", - "color" : "#FF0000", - "description" : null - }, - "position" : 2, - "max_issue_count": 0, - "max_issue_weight": 0, - "limit_metric": null - }, - { - "id" : 3, - "label" : { - "name" : "Production", - "color" : "#FF5F00", - "description" : null - }, - "position" : 3, - "max_issue_count": 0, - "max_issue_weight": 0, - "limit_metric": null - } - ] + "lists" : [], + "group": null, + "milestone": null, + "assignee" : null, + "labels" : [], + "weight" : null } ``` diff --git a/doc/api/graphql/reference/gitlab_schema.graphql b/doc/api/graphql/reference/gitlab_schema.graphql index bbb5be33cb4..2388ee09863 100644 --- a/doc/api/graphql/reference/gitlab_schema.graphql +++ b/doc/api/graphql/reference/gitlab_schema.graphql @@ -9271,7 +9271,42 @@ type HttpIntegrationCreatePayload { errors: [String!]! """ - The updated HTTP integration + The HTTP integration + """ + integration: AlertManagementHttpIntegration +} + +""" +Autogenerated input type of HttpIntegrationDestroy +""" +input HttpIntegrationDestroyInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The id of the integration to remove + """ + id: AlertManagementHttpIntegrationID! +} + +""" +Autogenerated return type of HttpIntegrationDestroy +""" +type HttpIntegrationDestroyPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + Errors encountered during execution of the mutation. + """ + errors: [String!]! + + """ + The HTTP integration """ integration: AlertManagementHttpIntegration } @@ -9306,7 +9341,7 @@ type HttpIntegrationResetTokenPayload { errors: [String!]! """ - The updated HTTP integration + The HTTP integration """ integration: AlertManagementHttpIntegration } @@ -9351,7 +9386,7 @@ type HttpIntegrationUpdatePayload { errors: [String!]! """ - The updated HTTP integration + The HTTP integration """ integration: AlertManagementHttpIntegration } @@ -12950,6 +12985,7 @@ type Mutation { epicSetSubscription(input: EpicSetSubscriptionInput!): EpicSetSubscriptionPayload epicTreeReorder(input: EpicTreeReorderInput!): EpicTreeReorderPayload httpIntegrationCreate(input: HttpIntegrationCreateInput!): HttpIntegrationCreatePayload + httpIntegrationDestroy(input: HttpIntegrationDestroyInput!): HttpIntegrationDestroyPayload httpIntegrationResetToken(input: HttpIntegrationResetTokenInput!): HttpIntegrationResetTokenPayload httpIntegrationUpdate(input: HttpIntegrationUpdateInput!): HttpIntegrationUpdatePayload issueMove(input: IssueMoveInput!): IssueMovePayload @@ -16764,6 +16800,11 @@ type Query { last: Int """ + Query to search users by name, username, or primary email. + """ + search: String + + """ Sort users by this criteria """ sort: Sort = created_desc diff --git a/doc/api/graphql/reference/gitlab_schema.json b/doc/api/graphql/reference/gitlab_schema.json index 93b796aca5e..f311613460c 100644 --- a/doc/api/graphql/reference/gitlab_schema.json +++ b/doc/api/graphql/reference/gitlab_schema.json @@ -25260,7 +25260,109 @@ }, { "name": "integration", - "description": "The updated HTTP integration", + "description": "The HTTP integration", + "args": [ + + ], + "type": { + "kind": "OBJECT", + "name": "AlertManagementHttpIntegration", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "HttpIntegrationDestroyInput", + "description": "Autogenerated input type of HttpIntegrationDestroy", + "fields": null, + "inputFields": [ + { + "name": "id", + "description": "The id of the integration to remove", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "AlertManagementHttpIntegrationID", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "HttpIntegrationDestroyPayload", + "description": "Autogenerated return type of HttpIntegrationDestroy", + "fields": [ + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "errors", + "description": "Errors encountered during execution of the mutation.", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "integration", + "description": "The HTTP integration", "args": [ ], @@ -25362,7 +25464,7 @@ }, { "name": "integration", - "description": "The updated HTTP integration", + "description": "The HTTP integration", "args": [ ], @@ -25484,7 +25586,7 @@ }, { "name": "integration", - "description": "The updated HTTP integration", + "description": "The HTTP integration", "args": [ ], @@ -36845,6 +36947,33 @@ "deprecationReason": null }, { + "name": "httpIntegrationDestroy", + "description": null, + "args": [ + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "HttpIntegrationDestroyInput", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "HttpIntegrationDestroyPayload", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { "name": "httpIntegrationResetToken", "description": null, "args": [ @@ -48498,6 +48627,16 @@ "defaultValue": "created_desc" }, { + "name": "search", + "description": "Query to search users by name, username, or primary email.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { "name": "after", "description": "Returns the elements in the list that come after the specified cursor.", "type": { diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md index 1f017d5ab0d..fcb113d6ccf 100644 --- a/doc/api/graphql/reference/index.md +++ b/doc/api/graphql/reference/index.md @@ -1335,7 +1335,17 @@ Autogenerated return type of HttpIntegrationCreate. | ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -| `integration` | AlertManagementHttpIntegration | The updated HTTP integration | +| `integration` | AlertManagementHttpIntegration | The HTTP integration | + +### HttpIntegrationDestroyPayload + +Autogenerated return type of HttpIntegrationDestroy. + +| Field | Type | Description | +| ----- | ---- | ----------- | +| `clientMutationId` | String | A unique identifier for the client performing the mutation. | +| `errors` | String! => Array | Errors encountered during execution of the mutation. | +| `integration` | AlertManagementHttpIntegration | The HTTP integration | ### HttpIntegrationResetTokenPayload @@ -1345,7 +1355,7 @@ Autogenerated return type of HttpIntegrationResetToken. | ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -| `integration` | AlertManagementHttpIntegration | The updated HTTP integration | +| `integration` | AlertManagementHttpIntegration | The HTTP integration | ### HttpIntegrationUpdatePayload @@ -1355,7 +1365,7 @@ Autogenerated return type of HttpIntegrationUpdate. | ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -| `integration` | AlertManagementHttpIntegration | The updated HTTP integration | +| `integration` | AlertManagementHttpIntegration | The HTTP integration | ### InstanceSecurityDashboard diff --git a/doc/api/instance_clusters.md b/doc/api/instance_clusters.md index 45bfc11c03b..bc4eca5abfd 100644 --- a/doc/api/instance_clusters.md +++ b/doc/api/instance_clusters.md @@ -1,6 +1,6 @@ --- -stage: none -group: unassigned +stage: Configure +group: Configure 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/#designated-technical-writers --- diff --git a/doc/development/experiment_guide/index.md b/doc/development/experiment_guide/index.md index a9334d2a79f..5d9e0569f2a 100644 --- a/doc/development/experiment_guide/index.md +++ b/doc/development/experiment_guide/index.md @@ -142,7 +142,7 @@ context 'when the experiment is active and the user is in the experimental group expect_snowplow_event( category: 'Growth::Activation::Experiment::SignUpFlow', action: 'action', - label: 'value', + value: 'value', label: 'experimentation_subject_id', property: 'experimental_group' ) @@ -254,7 +254,7 @@ For visibility, please also share any commands run against production in the `#s #### RSpec -Use the folowing in RSpec to mock the experiment: +Use the following in RSpec to mock the experiment: ```ruby context 'when the experiment is active' do diff --git a/doc/topics/autodevops/customize.md b/doc/topics/autodevops/customize.md index 76d5707435c..9022be25536 100644 --- a/doc/topics/autodevops/customize.md +++ b/doc/topics/autodevops/customize.md @@ -520,8 +520,7 @@ on the default branch. However, there are cases where you might want to use a staging environment, and deploy to production manually. For this scenario, the `STAGING_ENABLED` environment variable was introduced. -If you define `STAGING_ENABLED`, such as setting `STAGING_ENABLED` to -`1` as a CI/CD variable, then GitLab automatically deploys the application +If you define `STAGING_ENABLED` with a non-empty value, then GitLab automatically deploys the application to a `staging` environment, and creates a `production_manual` job for you when you're ready to manually deploy to production. @@ -532,8 +531,7 @@ you when you're ready to manually deploy to production. You can use a [canary environment](../../user/project/canary_deployments.md) before deploying any changes to production. -If you define `CANARY_ENABLED` in your project, such as setting `CANARY_ENABLED` to -`1` as a CI/CD variable, then two manual jobs are created: +If you define `CANARY_ENABLED` with a non-empty value, then two manual jobs are created: - `canary` - Deploys the application to the canary environment. - `production_manual` - Manually deploys the application to production. diff --git a/doc/user/packages/generic_packages/index.md b/doc/user/packages/generic_packages/index.md index 0c961b5c86f..eab5c9e707e 100644 --- a/doc/user/packages/generic_packages/index.md +++ b/doc/user/packages/generic_packages/index.md @@ -49,7 +49,7 @@ Example request: ```shell curl --header "PRIVATE-TOKEN: <your_access_token>" \ --upload-file path/to/file.txt \ - https://gitlab.example.com/api/v4/projects/24/generic/my_package/0.0.1/file.txt + https://gitlab.example.com/api/v4/projects/24/packages/generic/my_package/0.0.1/file.txt ``` Example response: @@ -85,7 +85,7 @@ Example request that uses a personal access token: ```shell curl --header "PRIVATE-TOKEN: <your_access_token>" \ - https://gitlab.example.com/api/v4/projects/24/generic/my_package/0.0.1/file.txt + https://gitlab.example.com/api/v4/projects/24/packages/generic/my_package/0.0.1/file.txt ``` ## Publish a generic package by using CI/CD diff --git a/doc/user/profile/account/two_factor_authentication.md b/doc/user/profile/account/two_factor_authentication.md index 2fe5d790bfc..ef0bdfc14c3 100644 --- a/doc/user/profile/account/two_factor_authentication.md +++ b/doc/user/profile/account/two_factor_authentication.md @@ -21,20 +21,20 @@ TIP: **Tip:** When you enable 2FA, don't forget to back up your [recovery codes](#recovery-codes)! In addition to time-based one time passwords (TOTP), GitLab supports U2F -(universal 2nd factor) devices as the second factor of authentication. Once +(universal 2nd factor) and WebAuthn (experimental) devices as the second factor of authentication. Once enabled, in addition to supplying your username and password to log in, you'll -be prompted to activate your U2F device (usually by pressing a button on it), +be prompted to activate your U2F / WebAuthn device (usually by pressing a button on it), and it will perform secure authentication on your behalf. It is highly recommended that you set up 2FA with both a [one-time password authenticator](#one-time-password) or use [FortiAuthenticator](#one-time-password-via-fortiauthenticator) -and a [U2F device](#u2f-device), so you can still access your account if you -lose your U2F device. +and a [U2F device](#u2f-device) or a [WebAuthn device](#webauthn-device), so you can still access your account +if you lose your U2F / WebAuthn device. ## Enabling 2FA -There are two ways to enable two-factor authentication: via a one time password authenticator -or a U2F device. +There are multiple ways to enable two-factor authentication: via a one time password authenticator +or a U2F / WebAuthn device. ### One-time password @@ -174,10 +174,46 @@ To set up 2FA with a U2F device: You will see a message indicating that your device was successfully set up. Click on **Register U2F Device** to complete the process. +### WebAuthn device + +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/22506) in GitLab 13.4. +> - It's [deployed behind a feature flag](../../feature_flags.md), disabled by default. +> - It's disabled on GitLab.com. +> - It's not recommended for production use. +> - To use it in GitLab self-managed instances, ask a GitLab administrator to [enable it](#enable-or-disable-webauthn). **(CORE ONLY)** + +The WebAuthn workflow is [supported by](https://caniuse.com/#search=webauthn) the +following desktop browsers: + +- Chrome +- Edge +- Firefox +- Opera +- Safari + +and the following mobile browsers: + +- Chrome for Android +- Firefox for Android +- iOS Safari (since iOS 13.3) + +To set up 2FA with a WebAuthn compatible device: + +1. Sign in to your GitLab account. +1. Go to your [**Profile settings**](../index.md#profile-settings). +1. Go to **Account**. +1. Select **Enable Two-Factor Authentication**. +1. Plug in your WebAuthn device. +1. Select **Set up New WebAuthn Device**. +1. Depending on your device, you might need to press a button or touch a sensor. + +You will see a message indicating that your device was successfully set up. +Recovery codes are not generated for WebAuthn devices. + ## Recovery codes NOTE: **Note:** -Recovery codes are not generated for U2F devices. +Recovery codes are not generated for U2F / WebAuthn devices. CAUTION: **Caution:** Each code can be used only once to log in to your account. @@ -215,6 +251,14 @@ To log in via a U2F device: You will see a message indicating that your device responded to the authentication request and you will be automatically logged in. +### Log in via WebAuthn device + +In supported browsers you should be automatically prompted to activate your WebAuthn device +(e.g. by touching/pressing its button) after entering your credentials. + +You will see a message indicating that your device responded to the authentication +request and you will be automatically logged in. + ## Disabling 2FA If you ever need to disable 2FA: @@ -225,7 +269,7 @@ If you ever need to disable 2FA: 1. Click **Disable**, under **Two-Factor Authentication**. This will clear all your two-factor authentication registrations, including mobile -applications and U2F devices. +applications and U2F / WebAuthn devices. ## Personal access tokens @@ -331,7 +375,8 @@ Sign in and re-enable two-factor authentication as soon as possible. you may have cases where authorization always fails because of time differences. - The GitLab U2F implementation does _not_ work when the GitLab instance is accessed from multiple hostnames, or FQDNs. Each U2F registration is linked to the _current hostname_ at - the time of registration, and cannot be used for other hostnames/FQDNs. + the time of registration, and cannot be used for other hostnames/FQDNs. The same applies to + WebAuthn registrations. For example, if a user is trying to access a GitLab instance from `first.host.xyz` and `second.host.xyz`: @@ -342,6 +387,25 @@ Sign in and re-enable two-factor authentication as soon as possible. - To enforce 2FA at the system or group levels see [Enforce Two-factor Authentication](../../../security/two_factor_authentication.md). +## Enable or disable WebAuthn **(CORE ONLY)** + +Support for WebAuthn is under development and not ready for production use. It is +deployed behind a feature flag that is **disabled by default**. +[GitLab administrators with access to the GitLab Rails console](../../../administration/feature_flags.md) +can enable it. + +To enable it: + +```ruby +Feature.enable(:webauthn) +``` + +To disable it: + +```ruby +Feature.disable(:webauthn) +``` + ## Troubleshooting If you are receiving an `invalid pin code` error, this may indicate that there is a time sync issue between the authentication application and the GitLab instance itself. diff --git a/doc/user/project/merge_requests/csv_export.md b/doc/user/project/merge_requests/csv_export.md index ae65c5d7012..d41a2567674 100644 --- a/doc/user/project/merge_requests/csv_export.md +++ b/doc/user/project/merge_requests/csv_export.md @@ -7,10 +7,12 @@ info: To determine the technical writer assigned to the Stage/Group associated w # Export Merge Requests to CSV **(CORE)** > - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/3619) in GitLab 13.6. -> - It's [deployed behind a feature flag](../../../administration/feature_flags.md), disabled by default. -> - It's disabled on GitLab.com. -> - It's not recommended for production use. -> - To use it in GitLab self-managed instances, ask a GitLab administrator to [enable it](#enable-or-disable-export-merge-requests-to-csv). **(CORE ONLY)** +> - It was [deployed behind a feature flag](../../../administration/feature_flags.md), disabled by default. +> - Became enabled by default in GitLab 13.6. +> - It's enabled on GitLab.com. +> - It's recommended for production use. +> - For GitLab self-managed instances, GitLab administrators can opt to [disable it](#enable-or-disable-export-merge-requests-to-csv). **(CORE ONLY)** +> - It can be enabled or disabled for a single project. CAUTION: **Warning:** This feature might not be available to you. Check the **version history** note above for details. @@ -55,25 +57,25 @@ The following table shows what attributes will be present in the CSV. ### Enable or disable Export Merge Requests to CSV **(CORE ONLY)** -Export merge requests to CSV is under development and not ready for production use. It is -deployed behind a feature flag that is **disabled by default**. +Export merge requests to CSV is under development but ready for production use. +It is deployed behind a feature flag that is **enabled by default**. [GitLab administrators with access to the GitLab Rails console](../../../administration/feature_flags.md) -can enable it. +can opt to disable it. To enable it: ```ruby +# For the instance Feature.enable(:export_merge_requests_as_csv) +# For a single project +Feature.enable(:export_merge_requests_as_csv, Project.find(<project id>)) ``` To disable it: ```ruby -Feature.enable(:export_merge_requests_as_csv) -``` - -Optionally, pass a project as an argument to enable for a single project. - -```ruby -Feature.enable(:export_merge_requests_as_csv, project) +# For the instance +Feature.disable(:export_merge_requests_as_csv) +# For a single project +Feature.disable(:export_merge_requests_as_csv, Project.find(<project id>)) ``` diff --git a/doc/user/project/repository/reducing_the_repo_size_using_git.md b/doc/user/project/repository/reducing_the_repo_size_using_git.md index 3a19e0ed5cc..9f4dfe54c47 100644 --- a/doc/user/project/repository/reducing_the_repo_size_using_git.md +++ b/doc/user/project/repository/reducing_the_repo_size_using_git.md @@ -202,6 +202,12 @@ To purge files from GitLab storage: ## Repository cleanup +NOTE: **Note:** +Safely cleaning the repository requires it to be made read-only for the duration +of the operation. This happens automatically, but submitting the cleanup request +will fail if any writes are ongoing, so cancel any outstanding `git push` +operations before continuing. + > [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/19376) in GitLab 11.6. Repository cleanup allows you to upload a text file of objects and GitLab will remove internal Git |