Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-11-03 21:09:22 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-11-03 21:09:22 +0300
commit62baa95f25f1cc56b100d2b64b0a3906f47dcfe1 (patch)
tree0bee30bc13c3cb7444f1d89d2647719718a31d76 /doc
parentff8eb438401fc82b883fc4ae69626f0035b69236 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'doc')
-rw-r--r--doc/administration/geo/replication/datatypes.md2
-rw-r--r--doc/api/boards.md48
-rw-r--r--doc/api/graphql/reference/gitlab_schema.graphql47
-rw-r--r--doc/api/graphql/reference/gitlab_schema.json145
-rw-r--r--doc/api/graphql/reference/index.md16
-rw-r--r--doc/api/instance_clusters.md4
-rw-r--r--doc/development/experiment_guide/index.md4
-rw-r--r--doc/topics/autodevops/customize.md6
-rw-r--r--doc/user/packages/generic_packages/index.md4
-rw-r--r--doc/user/profile/account/two_factor_authentication.md82
-rw-r--r--doc/user/project/merge_requests/csv_export.md30
-rw-r--r--doc/user/project/repository/reducing_the_repo_size_using_git.md6
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