diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md
new file mode 100644
index 00000000000..17c77c399d2
--- /dev/null
+++ b/.github/copilot-instructions.md
@@ -0,0 +1 @@
+- @azure Rule - Use Azure Best Practices: When generating code for Azure, running terminal commands for Azure, or performing operations related to Azure, invoke your `get_azure_best_practices` tool if available.
\ No newline at end of file
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
new file mode 100644
index 00000000000..d4b665de96b
--- /dev/null
+++ b/.github/workflows/stale.yml
@@ -0,0 +1,31 @@
+# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time.
+#
+# You can adjust the behavior by modifying this file.
+# For more information, see:
+# https://github.com/actions/stale
+name: Mark stale issues and pull requests
+
+on: workflow_dispatch
+
+jobs:
+ stale:
+ runs-on: ubuntu-latest
+ permissions:
+ issues: write
+ pull-requests: write
+
+ steps:
+ - uses: actions/stale@v5
+ with:
+ repo-token: ${{ secrets.GITHUB_TOKEN }}
+ days-before-issue-stale: 180
+ stale-issue-label: 'auto-close'
+ operations-per-run: 3000
+ close-issue-reason: not_planned
+ close-issue-label: inactive
+ days-before-issue-close: 3
+ exempt-issue-labels: keep-open
+ stale-issue-message: >
+ Unfortunately, we have been unable to review this issue in a timely manner. We apologize for the delayed response. We are closing this issue.
+
If you feel that this problem persists, please respond with additional feedback using our new feedback system. To learn more about our new feedback system please visit aka.ms/contentuserfeedback.
+
Please continue to provide feedback about our documentation. We appreciate your contributions to our community.
diff --git a/.openpublishing.build.ps1 b/.openpublishing.build.ps1
deleted file mode 100644
index aadef762022..00000000000
--- a/.openpublishing.build.ps1
+++ /dev/null
@@ -1,17 +0,0 @@
-param(
- [string]$buildCorePowershellUrl = "https://opbuildstorageprod.blob.core.windows.net/opps1container/.openpublishing.buildcore.ps1",
- [string]$parameters
-)
-# Main
-$errorActionPreference = 'Stop'
-
-# Step-1: Download buildcore script to local
-echo "download build core script to local with source url: $buildCorePowershellUrl"
-$repositoryRoot = Split-Path -Parent $MyInvocation.MyCommand.Definition
-$buildCorePowershellDestination = "$repositoryRoot\.openpublishing.buildcore.ps1"
-Invoke-WebRequest $buildCorePowershellUrl -OutFile "$buildCorePowershellDestination"
-
-# Step-2: Run build core
-echo "run build core script with parameters: $parameters"
-& "$buildCorePowershellDestination" "$parameters"
-exit $LASTEXITCODE
diff --git a/.openpublishing.publish.config.json b/.openpublishing.publish.config.json
index 70812521634..966c94a82cb 100644
--- a/.openpublishing.publish.config.json
+++ b/.openpublishing.publish.config.json
@@ -62,24 +62,6 @@
"branch": "main",
"branch_mapping": {}
},
- {
- "path_to_root": "snippets",
- "url": "https://github.com/MicrosoftDocs/snippets-azure-devops-docs-pr",
- "branch": "master",
- "branch_mapping": {}
- },
- {
- "path_to_root": "azure-docs",
- "url": "https://github.com/MicrosoftDocs/azure-docs-pr",
- "branch": "main",
- "branch_mapping": {}
- },
- {
- "path_to_root": "quickstart-templates",
- "url": "https://github.com/Azure/azure-quickstart-templates",
- "branch": "master",
- "branch_mapping": {}
- },
{
"path_to_root": "docs/reusable-content",
"url": "https://github.com/MicrosoftDocs/reusable-content",
@@ -102,6 +84,7 @@
".openpublishing.redirection.archive.2013.json",
".openpublishing.redirection.archive.2015.json",
".openpublishing.redirection.archive.2017.json",
+ ".openpublishing.redirection.archive.2018.json",
"docs/legacy/.openpublishing.redirection.legacy.json",
"docs/organizations/.openpublishing.redirection.notifications.json",
"docs/pipelines/.openpublishing.redirection.pipelines.json",
@@ -120,4 +103,4 @@
"docs_build_engine": {
"name": "docfx_v3"
}
-}
\ No newline at end of file
+}
diff --git a/.openpublishing.redirection.archive.2018.json b/.openpublishing.redirection.archive.2018.json
new file mode 100644
index 00000000000..0b90025d037
--- /dev/null
+++ b/.openpublishing.redirection.archive.2018.json
@@ -0,0 +1,5067 @@
+{
+ "redirections": [
+ {
+ "source_path": "docs/boards/backlogs/office/bulk-add-modify-work-items-excel.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/office/bulk-add-modify-work-items-excel",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/office/faqs.yml",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/office/faqs",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/office/resolve-excel-data-conflicts-publish-refresh.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/office/resolve-excel-data-conflicts-publish-refresh",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/office/resolve-excel-data-validation-errors.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/office/resolve-excel-data-validation-errors",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/office/tfs-office-integration-issues.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/office/tfs-office-integration-issues",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/office/track-work.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/office/track-work",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/add-link.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/add-link",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/add-work-items.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/add-work-items",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/automate-work-item-state-transitions.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/automate-work-item-state-transitions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/backlogs-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/backlogs-overview",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/bulk-modify-work-items.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/bulk-modify-work-items",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/connect-work-items-to-git-dev-ops.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/connect-work-items-to-git-dev-ops",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/copy-clone-work-items.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/copy-clone-work-items",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/create-your-backlog.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/create-your-backlog",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/define-features-epics.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/define-features-epics",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/delete-test-artifacts.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/delete-test-artifacts",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/filter-backlogs-boards-plans.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/filter-backlogs-boards-plans",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/manage-bugs.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/manage-bugs",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/manage-issues-impediments.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/manage-issues-impediments",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/organize-backlog.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/organize-backlog",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/remove-delete-work-items.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/remove-delete-work-items",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/resolve-backlog-reorder-issues.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/resolve-backlog-reorder-issues",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/set-column-options.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/set-column-options",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/set-up-your-backlog.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/set-up-your-backlog",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/work-item-template.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/work-item-template",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/boards/add-columns.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/boards/add-columns",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/boards/add-run-update-tests.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/boards/add-run-update-tests",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/boards/add-task-checklists.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/boards/add-task-checklists",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/boards/customize-cards.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/boards/customize-cards",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/boards/expedite-work.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/boards/expedite-work",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/boards/kanban-epics-features-stories.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/boards/kanban-epics-features-stories",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/boards/kanban-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/boards/kanban-overview",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/boards/kanban-quickstart.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/boards/kanban-quickstart",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/boards/wip-limits.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/boards/wip-limits",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/extensions/migrate-integrate.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/extensions/migrate-integrate",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/get-started/permissions-access-boards.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/get-started/permissions-access-boards",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/get-started/plan-track-work.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/get-started/plan-track-work",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/get-started/what-is-azure-boards.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/get-started/what-is-azure-boards",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/agile-culture.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/agile-culture",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/configure-hierarchical-teams.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/configure-hierarchical-teams",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/index.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/portfolio-management.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/portfolio-management",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/practices-that-scale.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/practices-that-scale",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/safe-concepts.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/safe-concepts",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/safe-configure-boards.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/safe-configure-boards",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/safe-customize.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/safe-customize",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/safe-plan-track-boards.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/safe-plan-track-boards",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/safe-review-roadmaps-progress.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/safe-review-roadmaps-progress",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/scaled-agile-framework.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/scaled-agile-framework",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/visibility-across-teams.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/visibility-across-teams",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/about-managed-queries.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/about-managed-queries",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/add-tags-to-work-items.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/add-tags-to-work-items",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/build-test-integration.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/build-test-integration",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/example-query-charts.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/example-query-charts",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/history-and-auditing.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/history-and-auditing",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/link-type-reference.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/link-type-reference",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/linking-attachments.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/linking-attachments",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/organize-queries.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/organize-queries",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/planning-ranking-priorities.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/planning-ranking-priorities",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/query-by-area-iteration-path.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/query-by-area-iteration-path",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/query-by-date-or-current-iteration.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/query-by-date-or-current-iteration",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/query-by-workflow-changes.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/query-by-workflow-changes",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/query-field-value.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/query-field-value",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/query-index-quick-ref.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/query-index-quick-ref",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/query-numeric.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/query-numeric",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/query-operators-variables.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/query-operators-variables",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/search-box-queries.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/search-box-queries",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/set-query-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/set-query-permissions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/titles-ids-descriptions.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/titles-ids-descriptions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/using-queries.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/using-queries",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/view-run-query.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/view-run-query",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/wiql-syntax.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/wiql-syntax",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/query-faqs.yml",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/query-faqs",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/add-tasks.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/add-tasks",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/adjust-work.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/adjust-work",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/assign-work-sprint.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/assign-work-sprint",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/best-practices-scrum.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/best-practices-scrum",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/customize-taskboard.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/customize-taskboard",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/define-sprints.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/define-sprints",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/end-sprint-activities.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/end-sprint-activities",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/forecast.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/forecast",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/scrum-key-concepts.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/scrum-key-concepts",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/scrum-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/scrum-overview",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/set-capacity.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/set-capacity",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/share-plan.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/share-plan",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/task-board.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/task-board",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/about-work-items.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/about-work-items",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/agile-glossary.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/agile-glossary",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/auto-complete-work-items-pull-requests.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/auto-complete-work-items-pull-requests",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/email-work-items.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/email-work-items",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/follow-work-items.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/follow-work-items",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/move-work-items.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/move-work-items",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/quick-ref.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/quick-ref",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/work-item-fields.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/work-item-fields",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/work-item-template-examples.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/work-item-template-examples",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/workflow-and-state-categories.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/workflow-and-state-categories",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/agile-process-workflow.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/agile-process-workflow",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/agile-process.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/agile-process",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/choose-process.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/choose-process",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/cmmi-process-workflow.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/cmmi-process-workflow",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/cmmi-process.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/cmmi-process",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/guidance-code-review-feedback-field-reference.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/guidance-code-review-feedback-field-reference",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/manage-process-templates.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/manage-process-templates",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/scrum-process-workflow.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/scrum-process-workflow",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/scrum-process.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/scrum-process",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/work-item-field.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/work-item-field",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/cmmi/guidance-background-to-cmmi.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/cmmi/guidance-background-to-cmmi",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/cmmi/guidance-bugs-issues-risks-field-reference-cmmi",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/best-practices-agile-project-management.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/best-practices-agile-project-management",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/configure-customize.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/configure-customize",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/faqs.yml",
+ "redirect_url": "/previous-versions/azure/devops/boards/faqs",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/boards/index.yml",
+ "redirect_url": "/previous-versions/azure/devops/boards/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/index.yml",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/artifacts-key-concepts.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/artifacts-key-concepts",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/collaborate-with-packages.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/collaborate-with-packages",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/get-started-maven.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/get-started-maven",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/get-started-npm.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/get-started-npm",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/get-started-nuget.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/get-started-nuget",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/package-badges.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/package-badges",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/start-using-azure-artifacts.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/start-using-azure-artifacts",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/concepts/best-practices.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/concepts/best-practices",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/concepts/feeds.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/concepts/feeds",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/concepts/package-graph.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/concepts/package-graph",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/concepts/symbols.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/concepts/symbols",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/concepts/upstream-sources.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/concepts/upstream-sources",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/concepts/views.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/concepts/views",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/feeds/feed-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/feeds/feed-permissions",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/feeds/project-scoped-feeds.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/feeds/project-scoped-feeds",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/feeds/views.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/feeds/views",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/how-to/delete-and-recover-packages.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/how-to/delete-and-recover-packages",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/how-to/follow-package-notifications.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/how-to/follow-package-notifications",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/how-to/public-feeds-upstream-sources.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/how-to/public-feeds-upstream-sources",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/how-to/set-up-upstream-sources.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/how-to/set-up-upstream-sources",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/maven/google-maven.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/maven/google-maven",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/maven/gradle-plugins.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/maven/gradle-plugins",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/maven/install.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/maven/install",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/maven/jitpack-upstream.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/maven/jitpack-upstream",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/maven/pom-and-settings.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/maven/pom-and-settings",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/maven/publish-with-gradle.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/maven/publish-with-gradle",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/maven/upstream-sources.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/maven/upstream-sources",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/npm/npmrc.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/npm/npmrc",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/npm/publish.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/npm/publish",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/npm/scopes.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/npm/scopes",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/npm/upstream-sources.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/npm/upstream-sources",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/nuget/consume.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/nuget/consume",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/nuget/dotnet-exe.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/nuget/dotnet-exe",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/nuget/dotnet-setup.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/nuget/dotnet-setup",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/nuget/move-from-fileshares.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/nuget/move-from-fileshares",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/nuget/nuget-exe.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/nuget/nuget-exe",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/nuget/publish-to-nuget-org.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/nuget/publish-to-nuget-org",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/nuget/publish.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/nuget/publish",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/nuget/upstream-sources.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/nuget/upstream-sources",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/reference/limits.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/reference/limits",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/symbols/debug-with-symbols-visual-studio.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/symbols/debug-with-symbols-visual-studio",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/symbols/debug-with-symbols-windbg.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/symbols/debug-with-symbols-windbg",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/tutorials/protect-oss-packages-with-upstream-sources.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/tutorials/protect-oss-packages-with-upstream-sources",
+ "redirect_document_id": false,
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/cross-service/cross-service-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/cross-service/cross-service-overview",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/cross-service/index.yml",
+ "redirect_url": "/previous-versions/azure/devops/cross-service/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/cross-service/manage-change.md",
+ "redirect_url": "/previous-versions/azure/devops/cross-service/manage-change",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/cross-service/manage-requirements.md",
+ "redirect_url": "/previous-versions/azure/devops/cross-service/manage-requirements",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/extension-report.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/extension-report",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/overview.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/overview",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/add-action.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/add-action",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/add-build-task.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/add-build-task",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/add-hub-group.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/add-hub-group",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/add-query-result-tabs.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/add-query-result-tabs",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/add-service-hook.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/add-service-hook",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/add-workitem-extension.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/add-workitem-extension",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/auth-schemes.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/auth-schemes",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/auth.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/auth",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/call-rest-api.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/call-rest-api",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/configure-workitemform-extensions.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/configure-workitemform-extensions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/contributions-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/contributions-overview",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/custom-control.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/custom-control",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/data-storage.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/data-storage",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/host-navigation.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/host-navigation",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/integrate-build-task.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/integrate-build-task",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/manifest.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/manifest",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/samples-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/samples-overview",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/service-endpoints.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/service-endpoints",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/styles-from-widget-sdk.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/styles-from-widget-sdk",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/using-host-dialog.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/using-host-dialog",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/get-started/node.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/get-started/node",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/publish/command-line.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/publish/command-line",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/publish/integration.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/publish/integration",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/publish/overview.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/publish/overview",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/publish/publish-azure.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/publish/publish-azure",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/extend/reference/targets/overview.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/reference/targets/overview",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/get-started/index.yml",
+ "redirect_url": "/previous-versions/azure/devops/get-started/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/integrate/index.md",
+ "redirect_url": "/previous-versions/azure/devops/integrate/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/integrate/concepts/dotnet-client-libraries.md",
+ "redirect_url": "/previous-versions/azure/devops/integrate/concepts/dotnet-client-libraries",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/integrate/concepts/rest-api-versioning.md",
+ "redirect_url": "/previous-versions/azure/devops/integrate/concepts/rest-api-versioning",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/integrate/get-started/auth/tfs-basic-auth.md",
+ "redirect_url": "/previous-versions/azure/devops/integrate/get-started/auth/tfs-basic-auth",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/integrate/get-started/authentication/authentication-guidance.md",
+ "redirect_url": "/previous-versions/azure/devops/integrate/get-started/authentication/authentication-guidance",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/integrate/get-started/authentication/iis-basic-auth.md",
+ "redirect_url": "/previous-versions/azure/devops/integrate/get-started/authentication/iis-basic-auth",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/integrate/get-started/authentication/service-principal-managed-identity.md",
+ "redirect_url": "/previous-versions/azure/devops/integrate/get-started/authentication/service-principal-managed-identity",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/integrate/get-started/client-libraries/samples.md",
+ "redirect_url": "/previous-versions/azure/devops/integrate/get-started/client-libraries/samples",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/integrate/get-started/client-libraries/soapSamples.md",
+ "redirect_url": "/previous-versions/azure/devops/integrate/get-started/client-libraries/soapSamples",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/integrate/get-started/rest/samples.md",
+ "redirect_url": "/previous-versions/azure/devops/integrate/get-started/rest/samples",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/integrate/how-to/call-rest-api.md",
+ "redirect_url": "/previous-versions/azure/devops/integrate/how-to/call-rest-api",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/integrate/quickstarts/create-bug-quickstart.md",
+ "redirect_url": "/previous-versions/azure/devops/integrate/quickstarts/create-bug-quickstart",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/marketplace/grant-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/marketplace/grant-permissions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/marketplace/install-extension.md",
+ "redirect_url": "/previous-versions/azure/devops/marketplace/install-extension",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/marketplace/request-extensions.md",
+ "redirect_url": "/previous-versions/azure/devops/marketplace/request-extensions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/marketplace-extensibility/index.yml",
+ "redirect_url": "/previous-versions/azure/devops/marketplace-extensibility/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/migrate/faqs.yml",
+ "redirect_url": "/previous-versions/azure/devops/migrate/faqs",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/migrate/migrate-from-tfs.md",
+ "redirect_url": "/previous-versions/azure/devops/migrate/migrate-from-tfs",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/migrate/migration-import-large-collections.md",
+ "redirect_url": "/previous-versions/azure/devops/migrate/migration-import-large-collections",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/migrate/migration-import.md",
+ "redirect_url": "/previous-versions/azure/devops/migrate/migration-import",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/migrate/migration-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/migrate/migration-overview",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/migrate/migration-post-import.md",
+ "redirect_url": "/previous-versions/azure/devops/migrate/migration-post-import",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/migrate/migration-processtemplates.md",
+ "redirect_url": "/previous-versions/azure/devops/migrate/migration-processtemplates",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/migrate/migration-restricting-access-to-azure-devops-services.md",
+ "redirect_url": "/previous-versions/azure/devops/migrate/migration-restricting-access-to-azure-devops-services",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/migrate/migration-troubleshooting.md",
+ "redirect_url": "/previous-versions/azure/devops/migrate/migration-troubleshooting",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/migrate/phase-rollout-with-rings.md",
+ "redirect_url": "/previous-versions/azure/devops/migrate/phase-rollout-with-rings",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/index.yml",
+ "redirect_url": "/previous-versions/azure/devops/organizations/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/work/faqs.yml",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/work/faqs",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/accounts/faq-configure-customize-organization.yml",
+ "redirect_url": "/previous-versions/azure/devops/organizations/accounts/faq-configure-customize-organization",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/accounts/faq-user-and-permissions-management.yml",
+ "redirect_url": "/previous-versions/azure/devops/organizations/accounts/faq-user-and-permissions-management",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/billing/billing-faq.yml",
+ "redirect_url": "/previous-versions/azure/devops/organizations/billing/billing-faq",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/faq-notifications.yml",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/faq-notifications",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/index.yml",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/accounts/admin-revoke-user-pats.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/accounts/admin-revoke-user-pats",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/accounts/create-organization.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/accounts/create-organization",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/accounts/use-personal-access-tokens-to-authenticate.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/billing/buy-access-tfs-test-hub.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/billing/buy-access-tfs-test-hub",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/billing/buy-basic-access-add-users.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/billing/buy-basic-access-add-users",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/billing/overview.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/billing/overview",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/about-notifications.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/about-notifications",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/at-mentions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/at-mentions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/change-email-address.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/change-email-address",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/concepts-email-recipients.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/concepts-email-recipients",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/exclude-self-from-email.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/exclude-self-from-email",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/integrate-third-party-services.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/integrate-third-party-services",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/manage-team-group-global-organization-notifications.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/manage-team-group-global-organization-notifications",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/manage-your-personal-notifications.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/manage-your-personal-notifications",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/navigating-the-ui.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/navigating-the-ui",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/oob-built-in-notifications.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/oob-built-in-notifications",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/oob-supported-event-types.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/oob-supported-event-types",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/troubleshoot-contact-support.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/troubleshoot-contact-support",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/troubleshoot-delayed-email.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/troubleshoot-delayed-email",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/troubleshoot-not-getting-email.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/troubleshoot-not-getting-email",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/troubleshoot-unexpected-email.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/troubleshoot-unexpected-email",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/unsubscribe-default-notification.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/unsubscribe-default-notification",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/use-subscription-logging.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/use-subscription-logging",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/view-organization-notification-statistics.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/view-organization-notification-statistics",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/about-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/about-permissions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/about-security-identity.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/about-security-identity",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/about-security-roles.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/about-security-roles",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/access-levels.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/access-levels",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/add-ad-aad-built-in-security-groups.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/add-ad-aad-built-in-security-groups",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/add-remove-manage-user-group-security-group.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/add-remove-manage-user-group-security-group",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/add-users-team-project.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/add-users-team-project",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/allow-list-ip-url.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/allow-list-ip-url",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/change-access-levels.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/change-access-levels",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/change-organization-collection-level-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/change-organization-collection-level-permissions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/change-project-level-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/change-project-level-permissions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/default-git-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/default-git-permissions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/default-tfvc-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/default-tfvc-permissions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/export-users-audit-log.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/export-users-audit-log",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/get-started-stakeholder.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/get-started-stakeholder",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/look-up-project-administrators.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/look-up-project-administrators",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/look-up-project-collection-administrators.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/look-up-project-collection-administrators",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/namespace-reference.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/namespace-reference",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/permissions-access.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/permissions-access",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/permissions-lookup-guide.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/permissions-lookup-guide",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/permissions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/quick-reference-index-security.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/quick-reference-index-security",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/remove-users-prohibit-access.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/remove-users-prohibit-access",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/request-changes-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/request-changes-permissions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/restrict-access.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/restrict-access",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/security-best-practices.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/security-best-practices",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/security-glossary.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/security-glossary",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/security-tools-reference.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/security-tools-reference",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/set-object-level-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/set-object-level-permissions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/set-permissions-access-test.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/set-permissions-access-test",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/set-permissions-access-work-tracking.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/set-permissions-access-work-tracking",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/troubleshoot-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/troubleshoot-permissions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/view-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/view-permissions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/about-areas-iterations.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/about-areas-iterations",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/about-settings.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/about-settings",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/about-teams-and-settings.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/about-teams-and-settings",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/add-team-administrator.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/add-team-administrator",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/add-teams.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/add-teams",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/naming-restrictions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/naming-restrictions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/rename-remove-team.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/rename-remove-team",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/select-backlog-navigation-levels.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/select-backlog-navigation-levels",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/set-area-paths.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/set-area-paths",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/set-iteration-paths-sprints.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/set-iteration-paths-sprints",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/set-your-preferences.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/set-your-preferences",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/show-bugs-on-backlog.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/show-bugs-on-backlog",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/timezone-settings-usage.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/timezone-settings-usage",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/work/object-limits.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/work/object-limits",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/work/rule-reference.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/work/rule-reference",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/work/rule-samples.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/work/rule-samples",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/index.yml",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/create-first-pipeline.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/create-first-pipeline",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/overview-azure.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/overview-azure",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/agent-authentication-options.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/agent-authentication-options",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/agents.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/agents",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/certificate.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/certificate",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/hosted.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/hosted",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/linux-agent.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/linux-agent",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/osx-agent.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/osx-agent",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/personal-access-token-agent-registration.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/personal-access-token-agent-registration",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/pools-queues.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/pools-queues",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/proxy.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/proxy",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/v2-linux-agent.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/v2-linux-agent",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/v2-osx-agent.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/v2-osx-agent",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/v2-windows-agent.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/v2-windows-agent",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/windows-agent.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/windows-agent",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/apps/aspnet/build-aspnet-4.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/apps/aspnet/build-aspnet-4",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/apps/cd/deploy-docker-webapp.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/apps/cd/deploy-docker-webapp",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/apps/mobile/app-signing.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/apps/mobile/app-signing",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/architectures/devops-pipelines-azure-web-apps-architecture.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/architectures/devops-pipelines-azure-web-apps-architecture",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/architectures/devops-pipelines-baseline-architecture.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/architectures/devops-pipelines-baseline-architecture",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/architectures/devops-pipelines-devtest-iaas-architecture.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/architectures/devops-pipelines-devtest-iaas-architecture",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/architectures/devops-pipelines-iaas-vms-architecture.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/architectures/devops-pipelines-iaas-vms-architecture",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/artifacts/artifacts-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/artifacts/artifacts-overview",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/artifacts/build-artifacts.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/artifacts/build-artifacts",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/artifacts/npm.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/artifacts/npm",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/artifacts/nuget.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/artifacts/nuget",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/artifacts/publish-maven-artifacts.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/artifacts/publish-maven-artifacts",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/artifacts/publish-public-registry.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/artifacts/publish-public-registry",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/artifacts/pull-package-gradle.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/artifacts/pull-package-gradle",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/artifacts/symbols.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/artifacts/symbols",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/build/ci-build-git.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/build/ci-build-git",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/build/history.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/build/history",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/build/options.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/build/options",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/build/triggers.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/build/triggers",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/build/variables.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/build/variables",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/ecosystems/customize-javascript.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/ecosystems/customize-javascript",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/ecosystems/customize-python.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/ecosystems/customize-python",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/ecosystems/ecosystems.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/ecosystems/ecosystems",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/ecosystems/javascript.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/ecosystems/javascript",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/ecosystems/nodejs-tutorial.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/ecosystems/nodejs-tutorial",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/ecosystems/xcode.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/ecosystems/xcode",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/get-started/clone-import-pipeline.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/get-started/clone-import-pipeline",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/get-started/pipelines-get-started.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/get-started/pipelines-get-started",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/get-started/what-is-azure-pipelines.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/get-started/what-is-azure-pipelines",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/integrations/configure-pipelines-work-tracking.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/integrations/configure-pipelines-work-tracking",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/library/add-resource-protection.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/library/add-resource-protection",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/library/connect-to-azure.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/library/connect-to-azure",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/library/index.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/library/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/library/secure-files.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/library/secure-files",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/library/service-endpoints.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/library/service-endpoints",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/library/task-groups.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/library/task-groups",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/library/variable-groups.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/library/variable-groups",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/licensing/concurrent-jobs.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/licensing/concurrent-jobs",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/packages/nuget-restore.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/packages/nuget-restore",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/policies/permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/policies/permissions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/policies/retention.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/policies/retention",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/policies/set-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/policies/set-permissions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/access-tokens.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/access-tokens",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/conditions.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/conditions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/create-multistage-pipeline.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/create-multistage-pipeline",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/deployment-group-phases.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/deployment-group-phases",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/parameters.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/parameters",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/phases.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/phases",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/run-number.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/run-number",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/scheduled-triggers.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/scheduled-triggers",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/set-variables-scripts.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/set-variables-scripts",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/stages.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/stages",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/tasks.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/tasks",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/variables.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/variables",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/artifacts.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/artifacts",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/azure-rm-endpoint.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/azure-rm-endpoint",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/define-multistage-release-process.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/define-multistage-release-process",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/deploy-using-approvals.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/deploy-using-approvals",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/deploy-webdeploy-iis-deploygroups.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/deploy-webdeploy-iis-deploygroups",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/env-templates.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/env-templates",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/index.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/releases.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/releases",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/triggers.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/triggers",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/variables.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/variables",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/approvals/approvals.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/approvals/approvals",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/approvals/gates.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/approvals/gates",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/approvals/index.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/approvals/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/approvals/servicenow.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/approvals/servicenow",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/deployment-groups/deploying-azure-vms-deployment-groups.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/deployment-groups/deploying-azure-vms-deployment-groups",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/deployment-groups/howto-provision-deployment-group-agents.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/deployment-groups/howto-provision-deployment-group-agents",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/deployment-groups/index.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/deployment-groups/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/repos/azure-repos-git.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/repos/azure-repos-git",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/repos/index.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/repos/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/repos/pipeline-options-for-git.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/repos/pipeline-options-for-git",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/repos/tfvc.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/repos/tfvc",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/scripts/cross-platform-scripting.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/scripts/cross-platform-scripting",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/scripts/git-commands.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/scripts/git-commands",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/scripts/logging-commands.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/scripts/logging-commands",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/scripts/powershell.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/scripts/powershell",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/targets/azure-sqldb.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/targets/azure-sqldb",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/targets/create-virtual-network.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/targets/create-virtual-network",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/tasks/file-matching-patterns.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/tasks/file-matching-patterns",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/tasks/transforms-variable-substitution.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/tasks/transforms-variable-substitution",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/test/continuous-test-selenium.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/test/continuous-test-selenium",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/test/parallel-testing-vstest.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/test/parallel-testing-vstest",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/test/requirements-traceability.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/test/requirements-traceability",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/test/review-code-coverage-results.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/test/review-code-coverage-results",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/test/review-continuous-test-results-after-build.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/test/review-continuous-test-results-after-build",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/test/test-glossary.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/test/test-glossary",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/test/test-impact-analysis.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/test/test-impact-analysis",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/test/ui-testing-considerations.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/test/ui-testing-considerations",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/troubleshooting/review-logs.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/troubleshooting/review-logs",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/troubleshooting/troubleshoot-start.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/troubleshooting/troubleshoot-start",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/troubleshooting/troubleshoot-triggers.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/troubleshooting/troubleshoot-triggers",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/troubleshooting/troubleshooting.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/troubleshooting/troubleshooting",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/index.yml",
+ "redirect_url": "/previous-versions/azure/devops/project/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/work-across-projects-faqs.yml",
+ "redirect_url": "/previous-versions/azure/devops/project/work-across-projects-faqs",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/feedback/index.md",
+ "redirect_url": "/previous-versions/azure/devops/project/feedback/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/navigation/add-artifact-team.md",
+ "redirect_url": "/previous-versions/azure/devops/project/navigation/add-artifact-team",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/navigation/filter-basics.md",
+ "redirect_url": "/previous-versions/azure/devops/project/navigation/filter-basics",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/navigation/glossary.md",
+ "redirect_url": "/previous-versions/azure/devops/project/navigation/glossary",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/navigation/go-to-project-repo.md",
+ "redirect_url": "/previous-versions/azure/devops/project/navigation/go-to-project-repo",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/navigation/go-to-service-page.md",
+ "redirect_url": "/previous-versions/azure/devops/project/navigation/go-to-service-page",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/navigation/index.md",
+ "redirect_url": "/previous-versions/azure/devops/project/navigation/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/navigation/keyboard-shortcuts.md",
+ "redirect_url": "/previous-versions/azure/devops/project/navigation/keyboard-shortcuts",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/navigation/mobile-work.md",
+ "redirect_url": "/previous-versions/azure/devops/project/navigation/mobile-work",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/navigation/set-favorites.md",
+ "redirect_url": "/previous-versions/azure/devops/project/navigation/set-favorites",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/navigation/work-across-projects.md",
+ "redirect_url": "/previous-versions/azure/devops/project/navigation/work-across-projects",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/search/functional-code-search.md",
+ "redirect_url": "/previous-versions/azure/devops/project/search/functional-code-search",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/search/functional-work-item-search.md",
+ "redirect_url": "/previous-versions/azure/devops/project/search/functional-work-item-search",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/search/get-started-search.md",
+ "redirect_url": "/previous-versions/azure/devops/project/search/get-started-search",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/search/install-configure-search.md",
+ "redirect_url": "/previous-versions/azure/devops/project/search/install-configure-search",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/search/manage-search.md",
+ "redirect_url": "/previous-versions/azure/devops/project/search/manage-search",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/about-readme-wiki.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/about-readme-wiki",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/add-edit-wiki.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/add-edit-wiki",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/filter-print-wiki.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/filter-print-wiki",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/manage-readme-wiki-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/manage-readme-wiki-permissions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/markdown-guidance.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/markdown-guidance",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/migrate-extension-wiki-pages.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/migrate-extension-wiki-pages",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/provisioned-vs-published-wiki.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/provisioned-vs-published-wiki",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/publish-repo-to-wiki.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/publish-repo-to-wiki",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/restore-deleted-wiki.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/restore-deleted-wiki",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/wiki-create-repo.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/wiki-create-repo",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/wiki-file-structure.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/wiki-file-structure",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/wiki-readme-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/wiki-readme-permissions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/wiki-update-offline.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/wiki-update-offline",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/wiki-view-history.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/wiki-view-history",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/reference/process-templates/customize-process.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/process-templates/customize-process",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/reference/process-templates/index.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/process-templates/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/reference/witadmin/manage-work-item-fields.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/witadmin/manage-work-item-fields",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/reference/witadmin/witadmin-customize-and-manage-objects-for-tracking-work.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/witadmin/witadmin-customize-and-manage-objects-for-tracking-work",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/reference/witadmin/witadmin-import-export-manage-wits.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/witadmin/witadmin-import-export-manage-wits",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/reference/witadmin/witadmin-import-export-process-configuration.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/witadmin/witadmin-import-export-process-configuration",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/reference/xml/change-workflow-wit.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/xml/change-workflow-wit",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/reference/xml/process-configuration-xml-element.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/xml/process-configuration-xml-element",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/reference/xml/provide-help-text-hyperlinks-web-content-form.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/xml/provide-help-text-hyperlinks-web-content-form",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/reference/xml/support-rollup-of-work-and-other-fields.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/xml/support-rollup-of-work-and-other-fields",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/reference/add-modify-field.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/add-modify-field",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/reference/add-modify-wit.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/add-modify-wit",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/reference/add-portfolio-backlogs.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/add-portfolio-backlogs",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/reference/add-wits-to-backlogs-and-boards.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/add-wits-to-backlogs-and-boards",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/reference/customize-wit-form.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/customize-wit-form",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/reference/customize-work.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/customize-work",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/reference/index.yml",
+ "redirect_url": "/previous-versions/azure/devops/reference/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/reference/on-premises-xml-process-model.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/on-premises-xml-process-model",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/reference/quick-reference-index-boards-settings.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/quick-reference-index-boards-settings",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/report/index.yml",
+ "redirect_url": "/previous-versions/azure/devops/report/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/faqs.yml",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/faqs",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/add-charts-to-dashboard.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/add-charts-to-dashboard",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/add-markdown-to-dashboard.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/add-markdown-to-dashboard",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/add-widget-to-dashboard.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/add-widget-to-dashboard",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/charts-dashboard-permissions-access.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/charts-dashboard-permissions-access",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/charts.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/charts",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/configure-chart-work-items-widget.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/configure-chart-work-items-widget",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/cumulative-flow-cycle-lead-time-guidance.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/cumulative-flow-cycle-lead-time-guidance",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/cumulative-flow.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/cumulative-flow",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/dashboard-focus.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/dashboard-focus",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/dashboard-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/dashboard-permissions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/dashboards.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/dashboards",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/overview.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/overview",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/quick-ref.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/quick-ref",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/widget-catalog.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/widget-catalog",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/reporting-roadmap.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/reporting-roadmap",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/index.yml",
+ "redirect_url": "/previous-versions/azure/devops/repos/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/howto.yml",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/howto",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/index.yml",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/index.yml",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/get-started/index.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/get-started/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/get-started/what-is-repos.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/get-started/what-is-repos",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/about-pull-requests.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/about-pull-requests",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/auth-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/auth-overview",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/branch-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/branch-permissions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/branch-policies-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/branch-policies-overview",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/branch-policies.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/branch-policies",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/case-sensitivity.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/case-sensitivity",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/change-default-branch.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/change-default-branch",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/cherry-pick.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/cherry-pick",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/clone.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/clone",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/command-prompt.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/command-prompt",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/commit-details.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/commit-details",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/commit-history.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/commit-history",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/commits.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/commits",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/complete-pull-requests.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/complete-pull-requests",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/create-a-readme.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/create-a-readme",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/create-branch.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/create-branch",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/create-new-repo.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/create-new-repo",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/create-pr-status-server-with-azure-functions.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/create-pr-status-server-with-azure-functions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/create-pr-status-server.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/create-pr-status-server",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/create-repo-intellij.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/create-repo-intellij",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/creatingrepo.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/creatingrepo",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/delete-branch.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/delete-branch",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/delete-existing-repo.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/delete-existing-repo",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/delete-git-branch.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/delete-git-branch",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/find-a-file.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/find-a-file",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/forks.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/forks",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/gcm-ssh-passphrase.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/gcm-ssh-passphrase",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/git-branching-guidance.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/git-branching-guidance",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/git-config.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/git-config",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/git-dates.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/git-dates",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/git-index-lock.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/git-index-lock",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/git-log-history-simplification.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/git-log-history-simplification",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/git-names.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/git-names",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/git-tags.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/git-tags",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/gitquickstart.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/gitquickstart",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/gitworkflow.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/gitworkflow",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/history.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/history",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/ignore-files.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/ignore-files",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/import-from-TFVC.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/import-from-TFVC",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/import-git-repository.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/import-git-repository",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/lfs-kerberos.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/lfs-kerberos",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/lock-branches.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/lock-branches",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/manage-large-files.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/manage-large-files",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/manage-your-branches.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/manage-your-branches",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/mapping-my-tfvc-actions-to-git.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/mapping-my-tfvc-actions-to-git",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/merging-with-squash.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/merging-with-squash",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/merging.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/merging",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/move-git-repos-between-team-projects.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/move-git-repos-between-team-projects",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/os-compatibility.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/os-compatibility",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/perform-migration-from-svn-to-git.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/perform-migration-from-svn-to-git",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/pr-status-policy.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/pr-status-policy",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/pull-request-notifications.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/pull-request-notifications",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/pull-request-status.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/pull-request-status",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/pull-requests.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/pull-requests",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/pulling.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/pulling",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/pushing.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/pushing",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/rebase.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/rebase",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/remove-binaries.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/remove-binaries",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/repo-rename.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/repo-rename",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/repository-settings.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/repository-settings",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/require-branch-folders.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/require-branch-folders",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/restore-deleted-branch.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/restore-deleted-branch",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/review-history.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/review-history",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/review-pull-requests.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/review-pull-requests",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/rpc-failures-http-postbuffer.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/rpc-failures-http-postbuffer",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/set-git-repository-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/set-git-repository-permissions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/set-up-credential-managers.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/set-up-credential-managers",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/share-your-code-in-git-eclipse.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/share-your-code-in-git-eclipse",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/share-your-code-in-git-vs.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/share-your-code-in-git-vs",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/share-your-code-in-git-xcode.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/share-your-code-in-git-xcode",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/team-projects.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/team-projects",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/undo.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/undo",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/use-ssh-keys-to-authenticate.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/use-ssh-keys-to-authenticate",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/view-pull-requests.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/view-pull-requests",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/add-check-policies.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/add-check-policies",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/add-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/add-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/add-files-server.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/add-files-server",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/associate-file-type-file-comparison-tool.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/associate-file-type-file-comparison-tool",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/associate-file-type-merge-tool.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/associate-file-type-merge-tool",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/branch-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/branch-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/branch-folders-files.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/branch-folders-files",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/branch-strategically.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/branch-strategically",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/branches-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/branches-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/branching-strategies-with-tfvc.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/branching-strategies-with-tfvc",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/changeset-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/changeset-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/check-folder-controlled-by-gated-check-build-process.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/check-folder-controlled-by-gated-check-build-process",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/check-out-edit-files.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/check-out-edit-files",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/check-your-work-team-codebase.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/check-your-work-team-codebase",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/checkin-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/checkin-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/checkout-or-edit-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/checkout-or-edit-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/clean-up-files-when-users-leave.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/clean-up-files-when-users-leave",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/compare-files.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/compare-files",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/compare-folders.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/compare-folders",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/comparison-git-tfvc.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/comparison-git-tfvc",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/configure-check-notes.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/configure-check-notes",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/configure-check-out-settings.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/configure-check-out-settings",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/configure-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/configure-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/control-access-team-foundation-version-control.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/control-access-team-foundation-version-control",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/create-work-workspaces.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/create-work-workspaces",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/day-life-alm-developer-write-new-code-user-story.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/day-life-alm-developer-write-new-code-user-story",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/decide-between-using-local-server-workspace.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/decide-between-using-local-server-workspace",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/delete-command-team-foundation-version-control.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/delete-command-team-foundation-version-control",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/delete-restore-files-folders.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/delete-restore-files-folders",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/destroy-command-team-foundation-version-control.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/destroy-command-team-foundation-version-control",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/destroy-version-controlled-files.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/destroy-version-controlled-files",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/develop-code-manage-pending-changes.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/develop-code-manage-pending-changes",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/develop-your-app-team-foundation-version-control.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/develop-your-app-team-foundation-version-control",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/difference-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/difference-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/dir-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/dir-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/download-get-files-from-server.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/download-get-files-from-server",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/edit-check-policies.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/edit-check-policies",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/effective-feature-isolation-on-tfvc.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/effective-feature-isolation-on-tfvc",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/effective-tfvc-branching-strategies-for-devops.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/effective-tfvc-branching-strategies-for-devops",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/enable-disable-check-policies.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/enable-disable-check-policies",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/find-view-changesets.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/find-view-changesets",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/folder-comparison-filters.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/folder-comparison-filters",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/folderdiff-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/folderdiff-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/get-code-reviewed-vs.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/get-code-reviewed-vs",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/get-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/get-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/get-history-item.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/get-history-item",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/git-permission-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/git-permission-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/git-view-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/git-view-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/help-command-team-foundation-version-control.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/help-command-team-foundation-version-control",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/history-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/history-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/label-command-team-foundation-version-control.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/label-command-team-foundation-version-control",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/labels-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/labels-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/localversions-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/localversions-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/lock-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/lock-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/lock-unlock-folders-files.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/lock-unlock-folders-files",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/merge-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/merge-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/merge-folders-files.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/merge-folders-files",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/merges-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/merges-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/msdn-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/msdn-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/optimize-your-workspace.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/optimize-your-workspace",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/permission-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/permission-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/properties-or-info-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/properties-or-info-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/proxy-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/proxy-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/reconcile-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/reconcile-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/reconcile-differences-between-two-folders.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/reconcile-differences-between-two-folders",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/remove-access-version-control-files.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/remove-access-version-control-files",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/remove-check-policies.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/remove-check-policies",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/rename-command-team-foundation-version-control.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/rename-command-team-foundation-version-control",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/rename-move-files-folders.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/rename-move-files-folders",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/resolve-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/resolve-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/resolve-team-foundation-version-control-conflicts.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/resolve-team-foundation-version-control-conflicts",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/roll-back-changesets.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/roll-back-changesets",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/rollback-command-team-foundation-version-control.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/rollback-command-team-foundation-version-control",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/set-enforce-quality-gates.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/set-enforce-quality-gates",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/set-tfvc-repository-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/set-tfvc-repository-permissions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/set-up-team-foundation-version-control-your-dev-machine.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/set-up-team-foundation-version-control-your-dev-machine",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/share-your-code-in-tfvc-eclipse.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/share-your-code-in-tfvc-eclipse",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/share-your-code-in-tfvc-vs.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/share-your-code-in-tfvc-vs",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/share-your-code-in-tfvc-xcode.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/share-your-code-in-tfvc-xcode",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/shelve-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/shelve-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/shelvesets-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/shelvesets-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/status-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/status-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/suspend-your-work-manage-your-shelvesets.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/suspend-your-work-manage-your-shelvesets",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/test-impact-for-partially-mapped-tfvc-repositories.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/test-impact-for-partially-mapped-tfvc-repositories",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/undelete-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/undelete-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/understand-lock-types.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/understand-lock-types",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/undo-changes-another-user-workspace.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/undo-changes-another-user-workspace",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/undo-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/undo-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/unlabel-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/unlabel-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/unshelve-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/unshelve-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/use-labels-take-snapshot-your-files.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/use-labels-take-snapshot-your-files",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/use-source-control-explorer-manage-files-under-version-control.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/use-source-control-explorer-manage-files-under-version-control",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/use-team-foundation-version-control-commands.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/use-team-foundation-version-control-commands",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/use-visual-studio-git.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/use-visual-studio-git",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/view-branch-hierarchy-team-project.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/view-branch-hierarchy-team-project",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/view-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/view-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/view-file-changes-using-annotate.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/view-file-changes-using-annotate",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/view-manage-past-versions.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/view-manage-past-versions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/view-where-when-changesets-have-been-merged.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/view-where-when-changesets-have-been-merged",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/what-is-tfvc.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/what-is-tfvc",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/work-version-control-locks.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/work-version-control-locks",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/workfold-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/workfold-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/workspace-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/workspace-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/workspaces-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/workspaces-command",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/authorize.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/authorize",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/consumers.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/consumers",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/create-subscription.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/create-subscription",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/events.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/events",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/overview.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/overview",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/troubleshoot.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/troubleshoot",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/services/jenkins.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/services/jenkins",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/services/slack.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/services/slack",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/services/teams.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/services/teams",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/services/trello.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/services/trello",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/services/webhooks.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/services/webhooks",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/services/workplace-messaging-apps.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/services/workplace-messaging-apps",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/index.yml",
+ "redirect_url": "/previous-versions/azure/devops/test/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/reference-qa.yml",
+ "redirect_url": "/previous-versions/azure/devops/test/reference-qa",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/add-to-bugs-exploratory-testing.md",
+ "redirect_url": "/previous-versions/azure/devops/test/add-to-bugs-exploratory-testing",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/associate-automated-test-with-test-case.md",
+ "redirect_url": "/previous-versions/azure/devops/test/associate-automated-test-with-test-case",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/collect-diagnostic-data.md",
+ "redirect_url": "/previous-versions/azure/devops/test/collect-diagnostic-data",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/connected-mode-exploratory-testing.md",
+ "redirect_url": "/previous-versions/azure/devops/test/connected-mode-exploratory-testing",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/copy-clone-test-items.md",
+ "redirect_url": "/previous-versions/azure/devops/test/copy-clone-test-items",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/create-a-test-plan.md",
+ "redirect_url": "/previous-versions/azure/devops/test/create-a-test-plan",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/create-test-cases.md",
+ "redirect_url": "/previous-versions/azure/devops/test/create-test-cases",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/explore-workitems-exploratory-testing.md",
+ "redirect_url": "/previous-versions/azure/devops/test/explore-workitems-exploratory-testing",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/how-long-to-keep-test-results.md",
+ "redirect_url": "/previous-versions/azure/devops/test/how-long-to-keep-test-results",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/insights-exploratory-testing.md",
+ "redirect_url": "/previous-versions/azure/devops/test/insights-exploratory-testing",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/manual-test-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/test/manual-test-permissions",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/overview.md",
+ "redirect_url": "/previous-versions/azure/devops/test/overview",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/perform-exploratory-tests.md",
+ "redirect_url": "/previous-versions/azure/devops/test/perform-exploratory-tests",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/provide-stakeholder-feedback.md",
+ "redirect_url": "/previous-versions/azure/devops/test/provide-stakeholder-feedback",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/repeat-test-with-different-data.md",
+ "redirect_url": "/previous-versions/azure/devops/test/repeat-test-with-different-data",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/request-stakeholder-feedback.md",
+ "redirect_url": "/previous-versions/azure/devops/test/request-stakeholder-feedback",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/run-automated-tests-from-test-hub.md",
+ "redirect_url": "/previous-versions/azure/devops/test/run-automated-tests-from-test-hub",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/run-manual-tests.md",
+ "redirect_url": "/previous-versions/azure/devops/test/run-manual-tests",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/share-steps-between-test-cases.md",
+ "redirect_url": "/previous-versions/azure/devops/test/share-steps-between-test-cases",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/standalone-mode-exploratory-testing.md",
+ "redirect_url": "/previous-versions/azure/devops/test/standalone-mode-exploratory-testing",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/test-case-managment-reference.md",
+ "redirect_url": "/previous-versions/azure/devops/test/test-case-managment-reference",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/test-different-configurations.md",
+ "redirect_url": "/previous-versions/azure/devops/test/test-different-configurations",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/test-objects-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/test/test-objects-overview",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/track-stakeholder-feedback.md",
+ "redirect_url": "/previous-versions/azure/devops/test/track-stakeholder-feedback",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/track-test-status.md",
+ "redirect_url": "/previous-versions/azure/devops/test/track-test-status",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/user-acceptance-testing.md",
+ "redirect_url": "/previous-versions/azure/devops/test/user-acceptance-testing",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/test/voluntary-stakeholder-feedback.md",
+ "redirect_url": "/previous-versions/azure/devops/test/voluntary-stakeholder-feedback",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/about-azure-devops-services-tfs.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/about-azure-devops-services-tfs",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/add-run-manual-tests.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/add-run-manual-tests",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/code-with-git.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/code-with-git",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/devops-alm-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/devops-alm-overview",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/lookup-platform-version.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/lookup-platform-version",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/manage-organization-collection.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/manage-organization-collection",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/plan-your-azure-devops-org-structure.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/plan-your-azure-devops-org-structure",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/project-admin-tutorial.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/project-admin-tutorial",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/provide-feedback.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/provide-feedback",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/roles.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/roles",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/services.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/services",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/source-control.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/source-control",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/tools.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/tools",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/troubleshoot-connection.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/troubleshoot-connection",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/what-is-azure-devops.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/what-is-azure-devops",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/work-team-explorer.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/work-team-explorer",
+ "monikers": [
+ "tfs-2018"
+ ]
+ },
+ {
+ "source_path": "docs/index.yml",
+ "redirect_url": "/previous-versions/azure/devops/index",
+ "monikers": [
+ "tfs-2018"
+ ]
+ }
+ ]
+}
+
diff --git a/.openpublishing.redirection.json b/.openpublishing.redirection.json
index ed84013e273..54d3659627d 100644
--- a/.openpublishing.redirection.json
+++ b/.openpublishing.redirection.json
@@ -1,39 +1,6608 @@
{
"redirections": [
+ {
+ "source_path": "docs/artifacts/artifacts-key-concepts.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/artifacts-key-concepts",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/get-started-maven.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/get-started-maven",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/get-started-npm.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/get-started-npm",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/get-started-nuget.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/get-started-nuget",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/package-badges.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/package-badges",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/start-using-azure-artifacts.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/start-using-azure-artifacts",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/concepts/best-practices.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/concepts/best-practices",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/concepts/feeds.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/concepts/feeds",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/concepts/package-graph.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/concepts/package-graph",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/concepts/symbols.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/concepts/symbols",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/concepts/upstream-sources.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/concepts/upstream-sources",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/concepts/views.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/concepts/views",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/feeds/feed-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/feeds/feed-permissions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/feeds/project-scoped-feeds.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/feeds/project-scoped-feeds",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/feeds/views.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/feeds/views",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/how-to/delete-and-recover-packages.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/how-to/delete-and-recover-packages",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/how-to/follow-package-notifications.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/how-to/follow-package-notifications",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/how-to/set-up-upstream-sources.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/how-to/set-up-upstream-sources",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/maven/google-maven.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/maven/google-maven",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/maven/gradle-plugins.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/maven/gradle-plugins",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/maven/install.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/maven/install",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/maven/jitpack-upstream.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/maven/jitpack-upstream",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/maven/pom-and-settings.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/maven/pom-and-settings",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/maven/publish-with-gradle.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/maven/publish-with-gradle",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/maven/upstream-sources.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/maven/upstream-sources",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/npm/npmrc.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/npm/npmrc",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/npm/publish.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/npm/publish",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/npm/restore-npm-packages.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/npm/restore-npm-packages",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/npm/scopes.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/npm/scopes",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/npm/upstream-sources.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/npm/upstream-sources",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/nuget/install-nuget-packages-with-visual-studio.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/nuget/install-nuget-packages-with-visual-studio",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/nuget/move-from-fileshares.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/nuget/move-from-fileshares",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/nuget/nuget-exe.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/nuget/nuget-exe",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/nuget/publish-to-nuget-org.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/nuget/publish-to-nuget-org",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/nuget/publish.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/nuget/publish",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/nuget/restore-nuget-packages-nuget-exe.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/nuget/restore-nuget-packages-nuget-exe",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/nuget/upstream-sources.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/nuget/upstream-sources",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/python/project-setup-python.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/python/project-setup-python",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/python/use-packages-from-pypi.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/python/use-packages-from-pypi",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/quickstarts/install-python-packages.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/quickstarts/install-python-packages",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/quickstarts/python-cli.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/quickstarts/python-cli",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/quickstarts/python-packages.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/quickstarts/python-packages",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/reference/limits.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/reference/limits",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/symbols/debug-with-symbols-visual-studio.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/symbols/debug-with-symbols-visual-studio",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/symbols/debug-with-symbols-windbg.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/symbols/debug-with-symbols-windbg",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/artifacts/tutorials/protect-oss-packages-with-upstream-sources.md",
+ "redirect_url": "/previous-versions/azure/devops/artifacts/tutorials/protect-oss-packages-with-upstream-sources",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/best-practices-agile-project-management.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/best-practices-agile-project-management",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/configure-customize.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/configure-customize",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/add-link.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/add-link",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/automate-work-item-state-transitions.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/automate-work-item-state-transitions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/backlogs-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/backlogs-overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/bulk-modify-work-items.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/bulk-modify-work-items",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/configure-your-backlog-view.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/configure-your-backlog-view",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/connect-work-items-to-git-dev-ops.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/connect-work-items-to-git-dev-ops",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/copy-clone-work-items.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/copy-clone-work-items",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/create-your-backlog.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/create-your-backlog",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/define-features-epics.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/define-features-epics",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/delete-test-artifacts.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/delete-test-artifacts",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/filter-backlogs-boards-plans.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/filter-backlogs-boards-plans",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/manage-bugs.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/manage-bugs",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/manage-issues-impediments.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/manage-issues-impediments",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/manage-work-items.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/manage-work-items",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/move-change-type.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/move-change-type",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/organize-backlog.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/organize-backlog",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/remove-delete-work-items.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/remove-delete-work-items",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/resolve-backlog-reorder-issues.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/resolve-backlog-reorder-issues",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/set-column-options.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/set-column-options",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/set-up-your-backlog.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/set-up-your-backlog",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/work-item-template.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/work-item-template",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/office/bulk-add-modify-work-items-excel.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/office/bulk-add-modify-work-items-excel",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/office/tfs-office-integration-issues.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/office/tfs-office-integration-issues",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/backlogs/office/track-work.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/backlogs/office/track-work",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/boards/add-columns.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/boards/add-columns",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/boards/add-run-update-tests.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/boards/add-run-update-tests",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/boards/add-task-checklists.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/boards/add-task-checklists",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/boards/customize-cards.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/boards/customize-cards",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/boards/expedite-work.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/boards/expedite-work",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/boards/kanban-epics-features-stories.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/boards/kanban-epics-features-stories",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/boards/kanban-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/boards/kanban-overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/boards/kanban-quickstart.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/boards/kanban-quickstart",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/boards/wip-limits.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/boards/wip-limits",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/extensions/migrate-integrate.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/extensions/migrate-integrate",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/get-started/permissions-access-boards.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/get-started/permissions-access-boards",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/get-started/plan-track-work.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/get-started/plan-track-work",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/get-started/what-is-azure-boards.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/get-started/what-is-azure-boards",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/github/configure-status-badges.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/github/configure-status-badges",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/github/connect-on-premises-to-github.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/github/connect-on-premises-to-github",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/github/index.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/github/index",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/github/install-github-app.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/github/install-github-app",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/github/link-to-from-github.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/github/link-to-from-github",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/agile-culture.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/agile-culture",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/configure-hierarchical-teams.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/configure-hierarchical-teams",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/index.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/index",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/portfolio-management.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/portfolio-management",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/practices-that-scale.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/practices-that-scale",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/safe-concepts.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/safe-concepts",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/safe-configure-boards.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/safe-configure-boards",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/safe-customize.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/safe-customize",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/safe-plan-track-boards.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/safe-plan-track-boards",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/safe-review-roadmaps-progress.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/safe-review-roadmaps-progress",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/scaled-agile-framework.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/scaled-agile-framework",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/plans/visibility-across-teams.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/plans/visibility-across-teams",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/about-managed-queries.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/about-managed-queries",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/add-tags-to-work-items.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/add-tags-to-work-items",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/build-test-integration.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/build-test-integration",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/example-query-charts.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/example-query-charts",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/history-and-auditing.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/history-and-auditing",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/import-work-items-from-csv.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/import-work-items-from-csv",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/link-type-reference.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/link-type-reference",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/linking-attachments.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/linking-attachments",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/organize-queries.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/organize-queries",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/planning-ranking-priorities.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/planning-ranking-priorities",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/query-by-area-iteration-path.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/query-by-area-iteration-path",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/query-by-date-or-current-iteration.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/query-by-date-or-current-iteration",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/query-by-workflow-changes.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/query-by-workflow-changes",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/query-field-value.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/query-field-value",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/query-index-quick-ref.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/query-index-quick-ref",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/query-numeric.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/query-numeric",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/query-operators-variables.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/query-operators-variables",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/search-box-queries.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/search-box-queries",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/set-query-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/set-query-permissions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/titles-ids-descriptions.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/titles-ids-descriptions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/using-queries.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/using-queries",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/view-run-query.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/view-run-query",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/queries/wiql-syntax.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/queries/wiql-syntax",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/add-tasks.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/add-tasks",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/adjust-work.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/adjust-work",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/assign-work-sprint.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/assign-work-sprint",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/best-practices-scrum.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/best-practices-scrum",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/customize-taskboard.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/customize-taskboard",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/define-sprints.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/define-sprints",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/end-sprint-activities.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/end-sprint-activities",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/forecast.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/forecast",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/scrum-key-concepts.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/scrum-key-concepts",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/scrum-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/scrum-overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/set-capacity.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/set-capacity",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/share-plan.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/share-plan",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/sprints/task-board.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/sprints/task-board",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/about-work-items.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/about-work-items",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/agile-glossary.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/agile-glossary",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/auto-complete-work-items-pull-requests.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/auto-complete-work-items-pull-requests",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/email-work-items.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/email-work-items",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/follow-work-items.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/follow-work-items",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/manage-attachments.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/manage-attachments",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/move-work-items.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/move-work-items",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/quick-ref.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/quick-ref",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/set-work-item-experience-vs.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/set-work-item-experience-vs",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/view-add-work-items.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/view-add-work-items",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/work-item-fields.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/work-item-fields",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/work-item-template-examples.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/work-item-template-examples",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/workflow-and-state-categories.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/workflow-and-state-categories",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/agile-process-workflow.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/agile-process-workflow",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/agile-process.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/agile-process",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/choose-process.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/choose-process",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/cmmi-process-workflow.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/cmmi-process-workflow",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/cmmi-process.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/cmmi-process",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/guidance-code-review-feedback-field-reference.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/guidance-code-review-feedback-field-reference",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/manage-process-templates.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/manage-process-templates",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/scrum-process-workflow.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/scrum-process-workflow",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/scrum-process.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/scrum-process",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/work-item-field.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/work-item-field",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/cmmi/guidance-background-to-cmmi.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/cmmi/guidance-background-to-cmmi",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/boards/work-items/guidance/cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md",
+ "redirect_url": "/previous-versions/azure/devops/boards/work-items/guidance/cmmi/guidance-bugs-issues-risks-field-reference-cmmi",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/cross-service/cross-service-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/cross-service/cross-service-overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/cross-service/github-integration.md",
+ "redirect_url": "/previous-versions/azure/devops/cross-service/github-integration",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/cross-service/manage-change.md",
+ "redirect_url": "/previous-versions/azure/devops/cross-service/manage-change",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/cross-service/manage-requirements.md",
+ "redirect_url": "/previous-versions/azure/devops/cross-service/manage-requirements",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/extension-report.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/extension-report",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/overview.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/add-action.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/add-action",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/add-build-task.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/add-build-task",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/add-chart.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/add-chart",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/add-dashboard-widget.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/add-dashboard-widget",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/add-hub-group.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/add-hub-group",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/add-query-result-tabs.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/add-query-result-tabs",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/add-service-hook.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/add-service-hook",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/add-workitem-extension.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/add-workitem-extension",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/auth-schemes.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/auth-schemes",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/auth.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/auth",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/call-rest-api.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/call-rest-api",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/configure-workitemform-extensions.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/configure-workitemform-extensions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/contributions-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/contributions-overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/custom-control.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/custom-control",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/data-storage.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/data-storage",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/host-navigation.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/host-navigation",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/integrate-build-task.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/integrate-build-task",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/manifest.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/manifest",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/samples-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/samples-overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/service-endpoints.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/service-endpoints",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/styles-from-widget-sdk.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/styles-from-widget-sdk",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/develop/using-host-dialog.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/develop/using-host-dialog",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/get-started/node.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/get-started/node",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/publish/command-line.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/publish/command-line",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/publish/integration.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/publish/integration",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/publish/overview.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/publish/overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/publish/publish-azure.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/publish/publish-azure",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/extend/reference/targets/overview.md",
+ "redirect_url": "/previous-versions/azure/devops/extend/reference/targets/overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/integrate/index.md",
+ "redirect_url": "/previous-versions/azure/devops/integrate/index",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/integrate/concepts/dotnet-client-libraries.md",
+ "redirect_url": "/previous-versions/azure/devops/integrate/concepts/dotnet-client-libraries",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/integrate/concepts/rest-api-versioning.md",
+ "redirect_url": "/previous-versions/azure/devops/integrate/concepts/rest-api-versioning",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/integrate/get-started/auth/tfs-basic-auth.md",
+ "redirect_url": "/previous-versions/azure/devops/integrate/get-started/auth/tfs-basic-auth",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/integrate/get-started/authentication/authentication-guidance.md",
+ "redirect_url": "/previous-versions/azure/devops/integrate/get-started/authentication/authentication-guidance",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/integrate/get-started/client-libraries/samples.md",
+ "redirect_url": "/previous-versions/azure/devops/integrate/get-started/client-libraries/samples",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/integrate/get-started/client-libraries/soapSamples.md",
+ "redirect_url": "/previous-versions/azure/devops/integrate/get-started/client-libraries/soapSamples",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/integrate/get-started/rest/samples.md",
+ "redirect_url": "/previous-versions/azure/devops/integrate/get-started/rest/samples",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/integrate/how-to/call-rest-api.md",
+ "redirect_url": "/previous-versions/azure/devops/integrate/how-to/call-rest-api",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/integrate/quickstarts/create-bug-quickstart.md",
+ "redirect_url": "/previous-versions/azure/devops/integrate/quickstarts/create-bug-quickstart",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/marketplace/grant-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/marketplace/grant-permissions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/marketplace/high-risk-extensions.md",
+ "redirect_url": "/previous-versions/azure/devops/marketplace/high-risk-extensions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/marketplace/install-extension.md",
+ "redirect_url": "/previous-versions/azure/devops/marketplace/install-extension",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/marketplace/request-extensions.md",
+ "redirect_url": "/previous-versions/azure/devops/marketplace/request-extensions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/migrate/migration-get-started.md",
+ "redirect_url": "/previous-versions/azure/devops/migrate/migration-get-started",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/migrate/migration-migrate.md",
+ "redirect_url": "/previous-versions/azure/devops/migrate/migration-migrate",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/migrate/migration-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/migrate/migration-overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/migrate/migration-post-migration.md",
+ "redirect_url": "/previous-versions/azure/devops/migrate/migration-post-migration",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/migrate/migration-prepare-test-run.md",
+ "redirect_url": "/previous-versions/azure/devops/migrate/migration-prepare-test-run",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/migrate/migration-prerequisites.md",
+ "redirect_url": "/previous-versions/azure/devops/migrate/migration-prerequisites",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/migrate/migration-test-run.md",
+ "redirect_url": "/previous-versions/azure/devops/migrate/migration-test-run",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/migrate/migration-troubleshooting.md",
+ "redirect_url": "/previous-versions/azure/devops/migrate/migration-troubleshooting",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/migrate/migration-validate.md",
+ "redirect_url": "/previous-versions/azure/devops/migrate/migration-validate",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/accounts/admin-revoke-user-pats.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/accounts/admin-revoke-user-pats",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/accounts/create-organization.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/accounts/create-organization",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/accounts/delete-organization-users.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/accounts/delete-organization-users",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/accounts/use-personal-access-tokens-to-authenticate.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/billing/buy-access-tfs-test-hub.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/billing/buy-access-tfs-test-hub",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/billing/buy-basic-access-add-users.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/billing/buy-basic-access-add-users",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/billing/overview.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/billing/overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/about-notifications.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/about-notifications",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/at-mentions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/at-mentions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/change-email-address.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/change-email-address",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/concepts-email-recipients.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/concepts-email-recipients",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/exclude-self-from-email.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/exclude-self-from-email",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/integrate-third-party-services.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/integrate-third-party-services",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/manage-team-group-global-organization-notifications.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/manage-team-group-global-organization-notifications",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/manage-your-personal-notifications.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/manage-your-personal-notifications",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/navigating-the-ui.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/navigating-the-ui",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/oob-built-in-notifications.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/oob-built-in-notifications",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/oob-supported-event-types.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/oob-supported-event-types",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/troubleshoot-delayed-email.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/troubleshoot-delayed-email",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/troubleshoot-not-getting-email.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/troubleshoot-not-getting-email",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/troubleshoot-unexpected-email.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/troubleshoot-unexpected-email",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/unsubscribe-default-notification.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/unsubscribe-default-notification",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/use-subscription-logging.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/use-subscription-logging",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/notifications/view-organization-notification-statistics.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/notifications/view-organization-notification-statistics",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/projects/about-projects.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/projects/about-projects",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/projects/connect-to-projects.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/projects/connect-to-projects",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/projects/create-project.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/projects/create-project",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/projects/delete-project.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/projects/delete-project",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/projects/project-vision-status.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/projects/project-vision-status",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/projects/rename-project.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/projects/rename-project",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/about-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/about-permissions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/about-security-identity.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/about-security-identity",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/about-security-roles.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/about-security-roles",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/access-levels.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/access-levels",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/add-ad-aad-built-in-security-groups.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/add-ad-aad-built-in-security-groups",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/add-remove-manage-user-group-security-group.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/add-remove-manage-user-group-security-group",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/add-users-team-project.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/add-users-team-project",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/allow-list-ip-url.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/allow-list-ip-url",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/change-access-levels.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/change-access-levels",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/change-organization-collection-level-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/change-organization-collection-level-permissions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/change-project-level-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/change-project-level-permissions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/default-git-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/default-git-permissions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/default-tfvc-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/default-tfvc-permissions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/export-users-audit-log.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/export-users-audit-log",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/get-started-stakeholder.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/get-started-stakeholder",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/look-up-project-administrators.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/look-up-project-administrators",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/look-up-project-collection-administrators.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/look-up-project-collection-administrators",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/namespace-reference.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/namespace-reference",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/permissions-access.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/permissions-access",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/permissions-lookup-guide.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/permissions-lookup-guide",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/permissions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/request-changes-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/request-changes-permissions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/restrict-access.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/restrict-access",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/security-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/security-overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/set-object-level-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/set-object-level-permissions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/set-permissions-access-test.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/set-permissions-access-test",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/set-permissions-access-work-tracking.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/set-permissions-access-work-tracking",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/stakeholder-access.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/stakeholder-access",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/troubleshoot-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/troubleshoot-permissions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/security/view-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/security/view-permissions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/about-areas-iterations.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/about-areas-iterations",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/about-settings.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/about-settings",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/about-teams-and-settings.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/about-teams-and-settings",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/add-team-administrator.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/add-team-administrator",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/add-teams.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/add-teams",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/manage-banners.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/manage-banners",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/manage-teams.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/manage-teams",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/naming-restrictions.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/naming-restrictions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/rename-remove-team.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/rename-remove-team",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/select-backlog-navigation-levels.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/select-backlog-navigation-levels",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/set-area-paths.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/set-area-paths",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/set-iteration-paths-sprints.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/set-iteration-paths-sprints",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/set-services.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/set-services",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/set-your-preferences.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/set-your-preferences",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/show-bugs-on-backlog.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/show-bugs-on-backlog",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/timezone-settings-usage.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/timezone-settings-usage",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/work/add-custom-field.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/work/add-custom-field",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/work/add-custom-wit.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/work/add-custom-wit",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/work/apply-rules-to-workflow-states.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/work/apply-rules-to-workflow-states",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/work/custom-controls-process.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/work/custom-controls-process",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/work/custom-rules.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/work/custom-rules",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/work/customize-process-backlogs-boards.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/work/customize-process-backlogs-boards",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/work/customize-process-field.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/work/customize-process-field",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/work/customize-process-form.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/work/customize-process-form",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/work/customize-process-work-item-type.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/work/customize-process-work-item-type",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/work/customize-process-workflow.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/work/customize-process-workflow",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/work/customize-process.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/work/customize-process",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/work/inheritance-process-model.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/work/inheritance-process-model",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/work/manage-process.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/work/manage-process",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/work/object-limits.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/work/object-limits",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/work/rule-reference.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/work/rule-reference",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/organizations/settings/work/rule-samples.md",
+ "redirect_url": "/previous-versions/azure/devops/organizations/settings/work/rule-samples",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/create-first-pipeline.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/create-first-pipeline",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/customize-pipeline.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/customize-pipeline",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/overview-azure.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/overview-azure",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/agent-authentication-options.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/agent-authentication-options",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/agents.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/agents",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/certificate.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/certificate",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/docker.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/docker",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/hosted.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/hosted",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/linux-agent.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/linux-agent",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/osx-agent.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/osx-agent",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/personal-access-token-agent-registration.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/personal-access-token-agent-registration",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/pools-queues.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/pools-queues",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/proxy.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/proxy",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/v2-linux-agent.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/v2-linux-agent",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/v2-osx-agent.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/v2-osx-agent",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/v2-windows-agent.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/v2-windows-agent",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/agents/windows-agent.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/agents/windows-agent",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/apps/aspnet/build-aspnet-4.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/apps/aspnet/build-aspnet-4",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/apps/cd/deploy-docker-webapp.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/apps/cd/deploy-docker-webapp",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/apps/mobile/app-signing.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/apps/mobile/app-signing",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/architectures/devops-pipelines-azure-web-apps-architecture.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/architectures/devops-pipelines-azure-web-apps-architecture",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/architectures/devops-pipelines-baseline-architecture.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/architectures/devops-pipelines-baseline-architecture",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/architectures/devops-pipelines-devtest-iaas-architecture.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/architectures/devops-pipelines-devtest-iaas-architecture",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/architectures/devops-pipelines-iaas-vms-architecture.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/architectures/devops-pipelines-iaas-vms-architecture",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/artifacts/artifacts-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/artifacts/artifacts-overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/artifacts/build-artifacts.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/artifacts/build-artifacts",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/artifacts/build-publish-artifacts-gradle.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/artifacts/build-publish-artifacts-gradle",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/artifacts/npm.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/artifacts/npm",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/artifacts/publish-maven-artifacts.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/artifacts/publish-maven-artifacts",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/artifacts/publish-public-registry.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/artifacts/publish-public-registry",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/artifacts/pypi.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/artifacts/pypi",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/artifacts/symbols.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/artifacts/symbols",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/build/ci-build-git.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/build/ci-build-git",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/build/triggers.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/build/triggers",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/build/variables.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/build/variables",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/ecosystems/customize-javascript.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/ecosystems/customize-javascript",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/ecosystems/customize-python.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/ecosystems/customize-python",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/ecosystems/dotnet-core.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/ecosystems/dotnet-core",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/ecosystems/ecosystems.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/ecosystems/ecosystems",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/ecosystems/java.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/ecosystems/java",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/ecosystems/javascript.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/ecosystems/javascript",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/ecosystems/nodejs-tutorial.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/ecosystems/nodejs-tutorial",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/ecosystems/python.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/ecosystems/python",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/ecosystems/xcode.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/ecosystems/xcode",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/get-started/clone-import-pipeline.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/get-started/clone-import-pipeline",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/get-started/pipelines-get-started.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/get-started/pipelines-get-started",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/get-started/what-is-azure-pipelines.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/get-started/what-is-azure-pipelines",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/get-started/yaml-pipeline-editor.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/get-started/yaml-pipeline-editor",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/integrations/configure-pipelines-work-tracking.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/integrations/configure-pipelines-work-tracking",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/library/add-resource-protection.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/library/add-resource-protection",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/library/azure-resource-manager-alternate-approaches.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/library/azure-resource-manager-alternate-approaches",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/library/connect-to-azure.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/library/connect-to-azure",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/library/index.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/library/index",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/library/link-variable-groups-to-key-vaults.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/library/link-variable-groups-to-key-vaults",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/library/secure-files.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/library/secure-files",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/library/service-endpoints.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/library/service-endpoints",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/library/variable-groups.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/library/variable-groups",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/licensing/concurrent-jobs.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/licensing/concurrent-jobs",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/packages/maven-restore.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/packages/maven-restore",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/packages/nuget-restore.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/packages/nuget-restore",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/policies/permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/policies/permissions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/policies/retention.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/policies/retention",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/policies/set-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/policies/set-permissions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/about-resources.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/about-resources",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/access-tokens.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/access-tokens",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/conditions.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/conditions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/container-phases.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/container-phases",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/create-multistage-pipeline.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/create-multistage-pipeline",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/expressions.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/expressions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/phases.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/phases",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/repository-resource.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/repository-resource",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/resources.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/resources",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/run-number.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/run-number",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/runs.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/runs",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/scheduled-triggers.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/scheduled-triggers",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/set-secret-variables.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/set-secret-variables",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/set-variables-scripts.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/set-variables-scripts",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/stages.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/stages",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/tasks.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/tasks",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/template-parameters.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/template-parameters",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/templates.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/templates",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/process/variables.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/process/variables",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/artifacts.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/artifacts",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/azure-rm-endpoint.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/azure-rm-endpoint",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/define-multistage-release-process.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/define-multistage-release-process",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/deploy-multiple-branches.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/deploy-multiple-branches",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/deploy-pull-request-builds.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/deploy-pull-request-builds",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/deploy-using-approvals.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/deploy-using-approvals",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/deploy-webdeploy-iis-deploygroups.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/deploy-webdeploy-iis-deploygroups",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/deployment-group-phases.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/deployment-group-phases",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/env-templates.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/env-templates",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/history.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/history",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/index.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/index",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/key-vault-access.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/key-vault-access",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/key-vault-in-own-project.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/key-vault-in-own-project",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/options.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/options",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/parameters.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/parameters",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/pipeline-triggers-classic.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/pipeline-triggers-classic",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/releases.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/releases",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/task-groups.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/task-groups",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/triggers.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/triggers",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/variables.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/variables",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/approvals/approvals.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/approvals/approvals",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/approvals/gates.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/approvals/gates",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/approvals/index.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/approvals/index",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/approvals/servicenow.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/approvals/servicenow",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/deployment-groups/deploying-azure-vms-deployment-groups.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/deployment-groups/deploying-azure-vms-deployment-groups",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/deployment-groups/howto-provision-deployment-group-agents.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/deployment-groups/howto-provision-deployment-group-agents",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/release/deployment-groups/index.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/release/deployment-groups/index",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/reports/pipeline-widgets.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/reports/pipeline-widgets",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/reports/pipelinereport.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/reports/pipelinereport",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/repos/azure-repos-git.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/repos/azure-repos-git",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/repos/index.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/repos/index",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/repos/pipeline-options-for-git.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/repos/pipeline-options-for-git",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/repos/tfvc.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/repos/tfvc",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/scripts/cross-platform-scripting.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/scripts/cross-platform-scripting",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/scripts/git-commands.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/scripts/git-commands",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/scripts/logging-commands.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/scripts/logging-commands",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/scripts/powershell.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/scripts/powershell",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/targets/azure-sqldb.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/targets/azure-sqldb",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/targets/azure-stack.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/targets/azure-stack",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/targets/create-virtual-network.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/targets/create-virtual-network",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/tasks/file-matching-patterns.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/tasks/file-matching-patterns",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/test/continuous-test-selenium.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/test/continuous-test-selenium",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/test/parallel-testing-any-test-runner.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/test/parallel-testing-any-test-runner",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/test/parallel-testing-vstest.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/test/parallel-testing-vstest",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/test/requirements-traceability.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/test/requirements-traceability",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/test/review-code-coverage-results.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/test/review-code-coverage-results",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/test/review-continuous-test-results-after-build.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/test/review-continuous-test-results-after-build",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/test/test-analytics.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/test/test-analytics",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/test/test-glossary.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/test/test-glossary",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/test/test-impact-analysis.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/test/test-impact-analysis",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/test/ui-testing-considerations.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/test/ui-testing-considerations",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/troubleshooting/review-logs.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/troubleshooting/review-logs",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/troubleshooting/troubleshoot-start.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/troubleshooting/troubleshoot-start",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/troubleshooting/troubleshoot-triggers.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/troubleshooting/troubleshoot-triggers",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/troubleshooting/troubleshooting.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/troubleshooting/troubleshooting",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/feedback/index.md",
+ "redirect_url": "/previous-versions/azure/devops/project/feedback/index",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/navigation/add-artifact-team.md",
+ "redirect_url": "/previous-versions/azure/devops/project/navigation/add-artifact-team",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/navigation/filter-basics.md",
+ "redirect_url": "/previous-versions/azure/devops/project/navigation/filter-basics",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/navigation/glossary.md",
+ "redirect_url": "/previous-versions/azure/devops/project/navigation/glossary",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/navigation/go-to-project-repo.md",
+ "redirect_url": "/previous-versions/azure/devops/project/navigation/go-to-project-repo",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/navigation/go-to-service-page.md",
+ "redirect_url": "/previous-versions/azure/devops/project/navigation/go-to-service-page",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/navigation/index.md",
+ "redirect_url": "/previous-versions/azure/devops/project/navigation/index",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/navigation/keyboard-shortcuts.md",
+ "redirect_url": "/previous-versions/azure/devops/project/navigation/keyboard-shortcuts",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/navigation/mobile-work.md",
+ "redirect_url": "/previous-versions/azure/devops/project/navigation/mobile-work",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/navigation/preview-features.md",
+ "redirect_url": "/previous-versions/azure/devops/project/navigation/preview-features",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/navigation/set-favorites.md",
+ "redirect_url": "/previous-versions/azure/devops/project/navigation/set-favorites",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/navigation/work-across-projects.md",
+ "redirect_url": "/previous-versions/azure/devops/project/navigation/work-across-projects",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/search/functional-code-search.md",
+ "redirect_url": "/previous-versions/azure/devops/project/search/functional-code-search",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/search/functional-work-item-search.md",
+ "redirect_url": "/previous-versions/azure/devops/project/search/functional-work-item-search",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/search/get-started-search.md",
+ "redirect_url": "/previous-versions/azure/devops/project/search/get-started-search",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/search/install-configure-search.md",
+ "redirect_url": "/previous-versions/azure/devops/project/search/install-configure-search",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/search/manage-search.md",
+ "redirect_url": "/previous-versions/azure/devops/project/search/manage-search",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/about-readme-wiki.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/about-readme-wiki",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/add-edit-wiki.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/add-edit-wiki",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/filter-print-wiki.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/filter-print-wiki",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/manage-readme-wiki-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/manage-readme-wiki-permissions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/markdown-guidance.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/markdown-guidance",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/migrate-extension-wiki-pages.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/migrate-extension-wiki-pages",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/provisioned-vs-published-wiki.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/provisioned-vs-published-wiki",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/publish-repo-to-wiki.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/publish-repo-to-wiki",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/restore-deleted-wiki.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/restore-deleted-wiki",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/wiki-create-repo.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/wiki-create-repo",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/wiki-file-structure.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/wiki-file-structure",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/wiki-readme-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/wiki-readme-permissions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/wiki-update-offline.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/wiki-update-offline",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/project/wiki/wiki-view-history.md",
+ "redirect_url": "/previous-versions/azure/devops/project/wiki/wiki-view-history",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/reference/add-modify-field.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/add-modify-field",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/reference/add-modify-wit.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/add-modify-wit",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/reference/add-portfolio-backlogs.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/add-portfolio-backlogs",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/reference/add-wits-to-backlogs-and-boards.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/add-wits-to-backlogs-and-boards",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/reference/customize-wit-form.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/customize-wit-form",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/reference/customize-work.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/customize-work",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/reference/on-premises-xml-process-model.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/on-premises-xml-process-model",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/reference/quick-reference-index-boards-settings.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/quick-reference-index-boards-settings",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/reference/process-templates/customize-process.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/process-templates/customize-process",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/reference/process-templates/index.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/process-templates/index",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/reference/witadmin/manage-work-item-fields.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/witadmin/manage-work-item-fields",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/reference/witadmin/witadmin-customize-and-manage-objects-for-tracking-work.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/witadmin/witadmin-customize-and-manage-objects-for-tracking-work",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/reference/witadmin/witadmin-import-export-manage-wits.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/witadmin/witadmin-import-export-manage-wits",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/reference/witadmin/witadmin-import-export-process-configuration.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/witadmin/witadmin-import-export-process-configuration",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/reference/xml/change-workflow-wit.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/xml/change-workflow-wit",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/reference/xml/process-configuration-xml-element.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/xml/process-configuration-xml-element",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/reference/xml/provide-help-text-hyperlinks-web-content-form.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/xml/provide-help-text-hyperlinks-web-content-form",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/reference/xml/support-rollup-of-work-and-other-fields.md",
+ "redirect_url": "/previous-versions/azure/devops/reference/xml/support-rollup-of-work-and-other-fields",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/analytics/analytics-best-practices.md",
+ "redirect_url": "/previous-versions/azure/devops/report/analytics/analytics-best-practices",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/analytics/analytics-permissions-prerequisites.md",
+ "redirect_url": "/previous-versions/azure/devops/report/analytics/analytics-permissions-prerequisites",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/analytics/analytics-query-parts.md",
+ "redirect_url": "/previous-versions/azure/devops/report/analytics/analytics-query-parts",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/analytics/analytics-query-tools.md",
+ "redirect_url": "/previous-versions/azure/devops/report/analytics/analytics-query-tools",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/analytics/entity-reference-boards.md",
+ "redirect_url": "/previous-versions/azure/devops/report/analytics/entity-reference-boards",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/analytics/entity-reference-general.md",
+ "redirect_url": "/previous-versions/azure/devops/report/analytics/entity-reference-general",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/add-charts-to-dashboard.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/add-charts-to-dashboard",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/add-markdown-to-dashboard.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/add-markdown-to-dashboard",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/add-widget-to-dashboard.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/add-widget-to-dashboard",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/analytics-extension.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/analytics-extension",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/analytics-widgets.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/analytics-widgets",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/burndown-guidance.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/burndown-guidance",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/charts-dashboard-permissions-access.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/charts-dashboard-permissions-access",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/charts.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/charts",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/configure-burndown-burnup-widgets.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/configure-burndown-burnup-widgets",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/configure-chart-work-items-widget.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/configure-chart-work-items-widget",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/configure-sprint-burndown.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/configure-sprint-burndown",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/configure-test-results-trend.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/configure-test-results-trend",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/cumulative-flow-cycle-lead-time-guidance.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/cumulative-flow-cycle-lead-time-guidance",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/cumulative-flow.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/cumulative-flow",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/cycle-time-and-lead-time.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/cycle-time-and-lead-time",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/dashboard-focus.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/dashboard-focus",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/dashboard-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/dashboard-permissions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/dashboards.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/dashboards",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/overview.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/quick-ref.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/quick-ref",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/team-velocity.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/team-velocity",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/dashboards/widget-catalog.md",
+ "redirect_url": "/previous-versions/azure/devops/report/dashboards/widget-catalog",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/extend-analytics/account-scoped-queries.md",
+ "redirect_url": "/previous-versions/azure/devops/report/extend-analytics/account-scoped-queries",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/extend-analytics/aggregated-data-analytics.md",
+ "redirect_url": "/previous-versions/azure/devops/report/extend-analytics/aggregated-data-analytics",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/extend-analytics/analytics-metadata.md",
+ "redirect_url": "/previous-versions/azure/devops/report/extend-analytics/analytics-metadata",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/extend-analytics/analytics-recipes.md",
+ "redirect_url": "/previous-versions/azure/devops/report/extend-analytics/analytics-recipes",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/extend-analytics/data-model-analytics-service.md",
+ "redirect_url": "/previous-versions/azure/devops/report/extend-analytics/data-model-analytics-service",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/extend-analytics/example-analytics-widget.md",
+ "redirect_url": "/previous-versions/azure/devops/report/extend-analytics/example-analytics-widget",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/extend-analytics/odata-api-version.md",
+ "redirect_url": "/previous-versions/azure/devops/report/extend-analytics/odata-api-version",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/extend-analytics/odata-batch.md",
+ "redirect_url": "/previous-versions/azure/devops/report/extend-analytics/odata-batch",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/extend-analytics/odata-query-guidelines.md",
+ "redirect_url": "/previous-versions/azure/devops/report/extend-analytics/odata-query-guidelines",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/extend-analytics/odata-supported-features.md",
+ "redirect_url": "/previous-versions/azure/devops/report/extend-analytics/odata-supported-features",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/extend-analytics/querying-for-trend-data.md",
+ "redirect_url": "/previous-versions/azure/devops/report/extend-analytics/querying-for-trend-data",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/extend-analytics/quick-ref.md",
+ "redirect_url": "/previous-versions/azure/devops/report/extend-analytics/quick-ref",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/extend-analytics/view-odata-query-analytics-report.md",
+ "redirect_url": "/previous-versions/azure/devops/report/extend-analytics/view-odata-query-analytics-report",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/extend-analytics/wit-analytics.md",
+ "redirect_url": "/previous-versions/azure/devops/report/extend-analytics/wit-analytics",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/extend-analytics/work-item-links.md",
+ "redirect_url": "/previous-versions/azure/devops/report/extend-analytics/work-item-links",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/access-analytics-excel.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/access-analytics-excel",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/access-analytics-power-bi.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/access-analytics-power-bi",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/active-bugs-sample-report.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/active-bugs-sample-report",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/add-last-refresh-time.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/add-last-refresh-time",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/analytics-historical-filtering.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/analytics-historical-filtering",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/analytics-security.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/analytics-security",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/analytics-views-create.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/analytics-views-create",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/analytics-views-manage.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/analytics-views-manage",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/client-authentication-options.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/client-authentication-options",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/create-quick-report-odataq.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/create-quick-report-odataq",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/create-quick-report.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/create-quick-report",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/create-team-filter.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/create-team-filter",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/create-timeinstate-report.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/create-timeinstate-report",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/data-available-in-analytics.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/data-available-in-analytics",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/data-connector-connect.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/data-connector-connect",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/data-connector-dataset.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/data-connector-dataset",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/data-connector-examples.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/data-connector-examples",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/data-connector-functions.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/data-connector-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/odataquery-connect.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/odataquery-connect",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/overview.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/performance-latency.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/performance-latency",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/publish-power-bi-desktop-to-power-bi.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/publish-power-bi-desktop-to-power-bi",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/reporting-roadmap.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/reporting-roadmap",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/sample-boards-bugtrend.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/sample-boards-bugtrend",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/sample-boards-cfd.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/sample-boards-cfd",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/sample-boards-directlinks.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/sample-boards-directlinks",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/sample-boards-featureprogress.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/sample-boards-featureprogress",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/sample-boards-leadcycletime.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/sample-boards-leadcycletime",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/sample-boards-openbugs.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/sample-boards-openbugs",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/sample-boards-releaseburndown.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/sample-boards-releaseburndown",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/sample-boards-rollup.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/sample-boards-rollup",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/sample-boards-sprintburndown.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/sample-boards-sprintburndown",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/sample-boards-teamslicer.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/sample-boards-teamslicer",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/sample-odata-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/sample-odata-overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/transform-analytics-data-report-generation.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/transform-analytics-data-report-generation",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/troubleshooting-views.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/troubleshooting-views",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/what-are-analytics-views.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/what-are-analytics-views",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/powerbi/what-is-analytics.md",
+ "redirect_url": "/previous-versions/azure/devops/report/powerbi/what-is-analytics",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/report/sql-reports/migration-guide.md",
+ "redirect_url": "/previous-versions/azure/devops/report/sql-reports/migration-guide",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/get-started/index.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/get-started/index",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/get-started/what-is-repos.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/get-started/what-is-repos",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/about-pull-requests.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/about-pull-requests",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/auth-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/auth-overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/branch-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/branch-permissions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/branch-policies-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/branch-policies-overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/branch-policies.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/branch-policies",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/case-sensitivity.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/case-sensitivity",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/change-default-branch.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/change-default-branch",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/cherry-pick.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/cherry-pick",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/clone.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/clone",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/command-prompt.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/command-prompt",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/commit-details.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/commit-details",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/commit-history.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/commit-history",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/commits.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/commits",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/complete-pull-requests.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/complete-pull-requests",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/create-a-readme.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/create-a-readme",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/create-branch.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/create-branch",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/create-new-repo.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/create-new-repo",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/create-pr-status-server-with-azure-functions.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/create-pr-status-server-with-azure-functions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/create-pr-status-server.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/create-pr-status-server",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/create-repo-intellij.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/create-repo-intellij",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/creatingrepo.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/creatingrepo",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/delete-branch.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/delete-branch",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/delete-existing-repo.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/delete-existing-repo",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/delete-git-branch.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/delete-git-branch",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/find-a-file.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/find-a-file",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/forks.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/forks",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/gcm-ssh-passphrase.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/gcm-ssh-passphrase",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/git-branching-guidance.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/git-branching-guidance",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/git-config.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/git-config",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/git-dates.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/git-dates",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/git-index-lock.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/git-index-lock",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/git-log-history-simplification.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/git-log-history-simplification",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/git-names.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/git-names",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/git-tags.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/git-tags",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/gitquickstart.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/gitquickstart",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/gitworkflow.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/gitworkflow",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/history.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/history",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/ignore-files.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/ignore-files",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/import-from-TFVC.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/import-from-TFVC",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/import-git-repository.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/import-git-repository",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/lfs-kerberos.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/lfs-kerberos",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/lock-branches.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/lock-branches",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/manage-large-files.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/manage-large-files",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/manage-your-branches.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/manage-your-branches",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/mapping-my-tfvc-actions-to-git.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/mapping-my-tfvc-actions-to-git",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/merging-with-squash.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/merging-with-squash",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/merging.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/merging",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/move-git-repos-between-team-projects.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/move-git-repos-between-team-projects",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/os-compatibility.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/os-compatibility",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/perform-migration-from-svn-to-git.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/perform-migration-from-svn-to-git",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/pr-status-policy.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/pr-status-policy",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/pull-request-notifications.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/pull-request-notifications",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/pull-request-status.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/pull-request-status",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/pull-request-targets.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/pull-request-targets",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/pull-request-templates.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/pull-request-templates",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/pull-requests.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/pull-requests",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/pulling.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/pulling",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/pushing.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/pushing",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/rebase.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/rebase",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/remove-binaries.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/remove-binaries",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/repo-rename.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/repo-rename",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/repository-settings.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/repository-settings",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/require-branch-folders.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/require-branch-folders",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/restore-deleted-branch.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/restore-deleted-branch",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/review-history.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/review-history",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/review-pull-requests.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/review-pull-requests",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/rpc-failures-http-postbuffer.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/rpc-failures-http-postbuffer",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/set-git-repository-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/set-git-repository-permissions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/set-up-credential-managers.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/set-up-credential-managers",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/share-your-code-in-git-eclipse.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/share-your-code-in-git-eclipse",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/share-your-code-in-git-vs.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/share-your-code-in-git-vs",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/share-your-code-in-git-xcode.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/share-your-code-in-git-xcode",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/team-projects.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/team-projects",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/undo.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/undo",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/use-ssh-keys-to-authenticate.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/use-ssh-keys-to-authenticate",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/git/view-pull-requests.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/git/view-pull-requests",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/add-check-policies.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/add-check-policies",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/add-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/add-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/add-files-server.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/add-files-server",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/associate-file-type-file-comparison-tool.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/associate-file-type-file-comparison-tool",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/associate-file-type-merge-tool.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/associate-file-type-merge-tool",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/branch-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/branch-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/branch-folders-files.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/branch-folders-files",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/branch-strategically.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/branch-strategically",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/branches-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/branches-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/branching-strategies-with-tfvc.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/branching-strategies-with-tfvc",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/changeset-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/changeset-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/check-folder-controlled-by-gated-check-build-process.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/check-folder-controlled-by-gated-check-build-process",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/check-out-edit-files.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/check-out-edit-files",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/check-your-work-team-codebase.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/check-your-work-team-codebase",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/checkin-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/checkin-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/checkout-or-edit-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/checkout-or-edit-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/clean-up-files-when-users-leave.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/clean-up-files-when-users-leave",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/compare-files.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/compare-files",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/compare-folders.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/compare-folders",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/comparison-git-tfvc.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/comparison-git-tfvc",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/configure-check-notes.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/configure-check-notes",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/configure-check-out-settings.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/configure-check-out-settings",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/configure-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/configure-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/control-access-team-foundation-version-control.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/control-access-team-foundation-version-control",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/create-work-workspaces.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/create-work-workspaces",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/day-life-alm-developer-write-new-code-user-story.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/day-life-alm-developer-write-new-code-user-story",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/decide-between-using-local-server-workspace.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/decide-between-using-local-server-workspace",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/delete-command-team-foundation-version-control.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/delete-command-team-foundation-version-control",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/delete-restore-files-folders.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/delete-restore-files-folders",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/destroy-command-team-foundation-version-control.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/destroy-command-team-foundation-version-control",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/destroy-version-controlled-files.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/destroy-version-controlled-files",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/develop-code-manage-pending-changes.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/develop-code-manage-pending-changes",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/develop-your-app-team-foundation-version-control.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/develop-your-app-team-foundation-version-control",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/difference-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/difference-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/dir-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/dir-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/download-get-files-from-server.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/download-get-files-from-server",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/edit-check-policies.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/edit-check-policies",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/effective-feature-isolation-on-tfvc.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/effective-feature-isolation-on-tfvc",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/effective-tfvc-branching-strategies-for-devops.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/effective-tfvc-branching-strategies-for-devops",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/enable-disable-check-policies.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/enable-disable-check-policies",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/find-view-changesets.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/find-view-changesets",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/folder-comparison-filters.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/folder-comparison-filters",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/folderdiff-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/folderdiff-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/get-code-reviewed-vs.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/get-code-reviewed-vs",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/get-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/get-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/get-history-item.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/get-history-item",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/git-permission-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/git-permission-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/git-view-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/git-view-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/help-command-team-foundation-version-control.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/help-command-team-foundation-version-control",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/history-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/history-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/label-command-team-foundation-version-control.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/label-command-team-foundation-version-control",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/labels-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/labels-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/localversions-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/localversions-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/lock-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/lock-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/lock-unlock-folders-files.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/lock-unlock-folders-files",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/merge-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/merge-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/merge-folders-files.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/merge-folders-files",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/merges-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/merges-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/msdn-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/msdn-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/optimize-your-workspace.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/optimize-your-workspace",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/permission-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/permission-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/properties-or-info-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/properties-or-info-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/proxy-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/proxy-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/reconcile-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/reconcile-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/reconcile-differences-between-two-folders.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/reconcile-differences-between-two-folders",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/remove-access-version-control-files.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/remove-access-version-control-files",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/remove-check-policies.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/remove-check-policies",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/rename-command-team-foundation-version-control.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/rename-command-team-foundation-version-control",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/rename-move-files-folders.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/rename-move-files-folders",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/resolve-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/resolve-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/resolve-team-foundation-version-control-conflicts.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/resolve-team-foundation-version-control-conflicts",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/roll-back-changesets.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/roll-back-changesets",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/rollback-command-team-foundation-version-control.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/rollback-command-team-foundation-version-control",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/set-enforce-quality-gates.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/set-enforce-quality-gates",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/set-tfvc-repository-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/set-tfvc-repository-permissions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/set-up-team-foundation-version-control-your-dev-machine.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/set-up-team-foundation-version-control-your-dev-machine",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/share-your-code-in-tfvc-eclipse.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/share-your-code-in-tfvc-eclipse",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/share-your-code-in-tfvc-vs.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/share-your-code-in-tfvc-vs",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/share-your-code-in-tfvc-xcode.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/share-your-code-in-tfvc-xcode",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/shelve-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/shelve-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/shelvesets-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/shelvesets-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/status-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/status-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/suspend-your-work-manage-your-shelvesets.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/suspend-your-work-manage-your-shelvesets",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/test-impact-for-partially-mapped-tfvc-repositories.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/test-impact-for-partially-mapped-tfvc-repositories",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/undelete-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/undelete-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/understand-lock-types.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/understand-lock-types",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/undo-changes-another-user-workspace.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/undo-changes-another-user-workspace",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/undo-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/undo-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/unlabel-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/unlabel-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/unshelve-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/unshelve-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/use-labels-take-snapshot-your-files.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/use-labels-take-snapshot-your-files",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/use-source-control-explorer-manage-files-under-version-control.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/use-source-control-explorer-manage-files-under-version-control",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/use-team-foundation-version-control-commands.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/use-team-foundation-version-control-commands",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/use-visual-studio-git.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/use-visual-studio-git",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/view-branch-hierarchy-team-project.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/view-branch-hierarchy-team-project",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/view-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/view-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/view-file-changes-using-annotate.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/view-file-changes-using-annotate",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/view-manage-past-versions.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/view-manage-past-versions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/view-where-when-changesets-have-been-merged.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/view-where-when-changesets-have-been-merged",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/what-is-tfvc.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/what-is-tfvc",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/work-version-control-locks.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/work-version-control-locks",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/workfold-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/workfold-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/workspace-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/workspace-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/repos/tfvc/workspaces-command.md",
+ "redirect_url": "/previous-versions/azure/devops/repos/tfvc/workspaces-command",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/authorize.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/authorize",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/consumers.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/consumers",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/create-subscription.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/create-subscription",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/events.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/events",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/overview.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/troubleshoot.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/troubleshoot",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/services/datadog.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/services/datadog",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/services/grafana.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/services/grafana",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/services/jenkins.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/services/jenkins",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/services/slack.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/services/slack",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/services/teams.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/services/teams",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/services/trello.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/services/trello",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/services/webhooks.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/services/webhooks",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/service-hooks/services/workplace-messaging-apps.md",
+ "redirect_url": "/previous-versions/azure/devops/service-hooks/services/workplace-messaging-apps",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/add-to-bugs-exploratory-testing.md",
+ "redirect_url": "/previous-versions/azure/devops/test/add-to-bugs-exploratory-testing",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/associate-automated-test-with-test-case.md",
+ "redirect_url": "/previous-versions/azure/devops/test/associate-automated-test-with-test-case",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/collect-diagnostic-data.md",
+ "redirect_url": "/previous-versions/azure/devops/test/collect-diagnostic-data",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/connected-mode-exploratory-testing.md",
+ "redirect_url": "/previous-versions/azure/devops/test/connected-mode-exploratory-testing",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/copy-clone-test-items.md",
+ "redirect_url": "/previous-versions/azure/devops/test/copy-clone-test-items",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/create-a-test-plan.md",
+ "redirect_url": "/previous-versions/azure/devops/test/create-a-test-plan",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/create-test-cases.md",
+ "redirect_url": "/previous-versions/azure/devops/test/create-test-cases",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/explore-workitems-exploratory-testing.md",
+ "redirect_url": "/previous-versions/azure/devops/test/explore-workitems-exploratory-testing",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/how-long-to-keep-test-results.md",
+ "redirect_url": "/previous-versions/azure/devops/test/how-long-to-keep-test-results",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/insights-exploratory-testing.md",
+ "redirect_url": "/previous-versions/azure/devops/test/insights-exploratory-testing",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/manual-test-permissions.md",
+ "redirect_url": "/previous-versions/azure/devops/test/manual-test-permissions",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/overview.md",
+ "redirect_url": "/previous-versions/azure/devops/test/overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/perform-exploratory-tests.md",
+ "redirect_url": "/previous-versions/azure/devops/test/perform-exploratory-tests",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/provide-stakeholder-feedback.md",
+ "redirect_url": "/previous-versions/azure/devops/test/provide-stakeholder-feedback",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/repeat-test-with-different-data.md",
+ "redirect_url": "/previous-versions/azure/devops/test/repeat-test-with-different-data",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/request-stakeholder-feedback.md",
+ "redirect_url": "/previous-versions/azure/devops/test/request-stakeholder-feedback",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/run-automated-tests-from-test-hub.md",
+ "redirect_url": "/previous-versions/azure/devops/test/run-automated-tests-from-test-hub",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/run-manual-tests.md",
+ "redirect_url": "/previous-versions/azure/devops/test/run-manual-tests",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/share-steps-between-test-cases.md",
+ "redirect_url": "/previous-versions/azure/devops/test/share-steps-between-test-cases",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/standalone-mode-exploratory-testing.md",
+ "redirect_url": "/previous-versions/azure/devops/test/standalone-mode-exploratory-testing",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/test-case-managment-reference.md",
+ "redirect_url": "/previous-versions/azure/devops/test/test-case-managment-reference",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/test-different-configurations.md",
+ "redirect_url": "/previous-versions/azure/devops/test/test-different-configurations",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/test-objects-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/test/test-objects-overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/track-stakeholder-feedback.md",
+ "redirect_url": "/previous-versions/azure/devops/test/track-stakeholder-feedback",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/track-test-status.md",
+ "redirect_url": "/previous-versions/azure/devops/test/track-test-status",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/user-acceptance-testing.md",
+ "redirect_url": "/previous-versions/azure/devops/test/user-acceptance-testing",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/test/voluntary-stakeholder-feedback.md",
+ "redirect_url": "/previous-versions/azure/devops/test/voluntary-stakeholder-feedback",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/about-azure-devops-services-tfs.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/about-azure-devops-services-tfs",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/add-run-manual-tests.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/add-run-manual-tests",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/capture-browser-trace.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/capture-browser-trace",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/code-with-git.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/code-with-git",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/devops-alm-overview.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/devops-alm-overview",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/lookup-platform-version.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/lookup-platform-version",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/manage-organization-collection.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/manage-organization-collection",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/plan-your-azure-devops-org-structure.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/plan-your-azure-devops-org-structure",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/project-admin-tutorial.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/project-admin-tutorial",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/provide-feedback.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/provide-feedback",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/roles.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/roles",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/services.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/services",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/source-control.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/source-control",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/tools.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/tools",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/troubleshoot-connection.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/troubleshoot-connection",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/what-is-azure-devops.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/what-is-azure-devops",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/user-guide/work-team-explorer.md",
+ "redirect_url": "/previous-versions/azure/devops/user-guide/work-team-explorer",
+ "redirect_document_id": false,
+ "monikers": [
+ "azure-devops-2019"
+ ]
+ },
+ {
+ "source_path": "docs/pipelines/apps/cd/deploy-linuxvm-deploygroups.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/apps/cd/deploy-linuxvm-deploygroups"
+ },
+ {
+ "source_path": "docs/pipelines/apps/cd/howto-webdeploy-iis-deploygroups.md",
+ "redirect_url": "/previous-versions/azure/devops/pipelines/apps/cd/howto-webdeploy-iis-deploygroups"
+ },
{
"source_path": "docs/migrate/migration.md",
- "redirect_url": "/azure/devops/migrate/migration-overview",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/migrate/migration-overview"
},
{
"source_path": "docs/devsecops/index.md",
- "redirect_url": "/devops/devsecops/enable-devsecops-azure-github",
- "redirect_document_id": false
+ "redirect_url": "/devops/devsecops/enable-devsecops-azure-github"
},
{
"source_path": "docs/user-guide/faqs.md",
- "redirect_url": "/azure/devops/user-guide/user-guide-faqs",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/user-guide/user-guide-faqs"
},
{
"source_path": "docs/marketplace/how-to/uninstall-disable-extensions-tfs.md",
- "redirect_url": "/azure/devops/marketplace/uninstall-disable-extensions",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/marketplace/uninstall-disable-extensions"
},
{
"source_path": "docs/organizations/security/set-project-collection-level-permissions.md",
- "redirect_url": "/azure/devops/organizations/security/change-project-level-permissions",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/organizations/security/change-project-level-permissions"
},
{
"source_path": "docs/organizations/security/lookup-organization-owner-admin.md",
- "redirect_url": "/azure/devops/organizations/security/request-changes-permissions",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/organizations/security/request-changes-permissions"
},
{
"source_path": "docs/organizations/security/change-individual-permissions.md",
- "redirect_url": "/azure/devops/organizations/security/request-changes-permissions",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/organizations/security/request-changes-permissions"
},
{
"source_path": "docs/report/powerbi/analytics-fields-reference.md",
@@ -42,43 +6611,35 @@
},
{
"source_path": "docs/organizations/projects/faq-create-project.yml",
- "redirect_url": "/azure/devops/organizations/projects/create-project",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/organizations/projects/create-project"
},
{
"source_path": "docs/organizations/projects/faq-rename-project.yml",
- "redirect_url": "/azure/devops/organizations/projects/rename-project",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/organizations/projects/rename-project"
},
{
"source_path": "docs/marketplace/get-tfs-extensions.md",
- "redirect_url": "/azure/devops/marketplace/install-extension",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/marketplace/install-extension"
},
{
"source_path": "docs/marketplace/trust.md",
- "redirect_url": "/azure/devops/marketplace/overview",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/marketplace/overview"
},
{
"source_path": "docs/marketplace/how-to/grant-permissions.md",
- "redirect_url": "/azure/devops/marketplace/grant-permissions",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/marketplace/grant-permissions"
},
{
"source_path": "docs/extend/develop/install.md",
- "redirect_url": "/azure/devops/extend/get-started/node?view=azure-devops#install-your-extension",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/extend/get-started/node?view=azure-devops#install-your-extension"
},
{
"source_path": "docs/marketplace/overview.md",
- "redirect_url": "/azure/devops/extend/overview",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/extend/overview"
},
{
"source_path": "docs/marketplace/faq-extensions.yml",
- "redirect_url": "/azure/devops/marketplace/install-extension#frequently-asked-questions-faqs",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/marketplace/install-extension#frequently-asked-questions-faqs"
},
{
"source_path": "docs/organizations/public/about-public-projects.md",
@@ -87,133 +6648,107 @@
},
{
"source_path": "docs/organizations/public/browse-code-public.md",
- "redirect_url": "/azure/devops/repos/git/find-a-file",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/repos/git/find-a-file"
},
{
"source_path": "docs/organizations/public/clone-git-repo-public.md",
- "redirect_url": "/azure/devops/repos/git/clone",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/repos/git/clone"
},
{
"source_path": "docs/organizations/public/code-search-public.md",
- "redirect_url": "/azure/devops/project/search/functional-code-search",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/project/search/functional-code-search"
},
{
"source_path": "docs/organizations/public/create-public-project.md",
- "redirect_url": "/azure/devops/organizations/projects/create-project",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/organizations/projects/create-project"
},
{
"source_path": "docs/organizations/public/default-roles-access-public.md",
- "redirect_url": "/azure/devops/organizations/security/permissions-access",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/organizations/security/permissions-access"
},
{
"source_path": "docs/organizations/public/feature-differences.md",
- "redirect_url": "/azure/devops/organizations/projects/make-project-public#access-levels-and-unavailable-features-for-public-projects",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/organizations/projects/make-project-public#access-levels-and-unavailable-features-for-public-projects"
},
{
"source_path": "docs/organizations/public/glossary-public.md",
- "redirect_url": "/azure/devops/organizations/projects/about-projects",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/organizations/projects/about-projects"
},
{
"source_path": "docs/organizations/public/invite-users-public.md",
- "redirect_url": "/azure/devops/organizations/projects/make-project-public#access-levels-and-unavailable-features-for-public-projects",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/organizations/projects/make-project-public#access-levels-and-unavailable-features-for-public-projects"
},
{
"source_path": "docs/organizations/public/migration-checklist.md",
- "redirect_url": "/azure/devops/organizations/projects/make-project-public#migration-checklist",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/organizations/projects/make-project-public#migration-checklist"
},
{
"source_path": "docs/organizations/public/service-limits-public.md",
- "redirect_url": "/azure/devops/user-guide/service-limits",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/user-guide/service-limits"
},
{
"source_path": "docs/organizations/public/view-build-release-public.md",
- "redirect_url": "/azure/devops/pipelines/release/releases",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/pipelines/release/releases"
},
{
"source_path": "docs/organizations/public/view-filter-work-items-public.md",
- "redirect_url": "/azure/devops/boards/work-items/quick-ref",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/boards/work-items/quick-ref"
},
{
"source_path": "docs/organizations/public/view-project-dashboard-public.md",
- "redirect_url": "/azure/devops/report/dashboards/dashboards",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/report/dashboards/dashboards"
},
{
"source_path": "docs/organizations/public/view-wiki-public.md",
- "redirect_url": "/azure/devops/project/wiki/wiki-create-repo",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/project/wiki/wiki-create-repo"
},
{
"source_path": "docs/organizations/public/work-item-search-public.md",
- "redirect_url": "/azure/devops/project/search/functional-work-item-search",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/project/search/functional-work-item-search"
},
{
"source_path": "docs/marketplace/uninstall-disable-extensions.md",
- "redirect_url": "/azure/devops/marketplace/install-extension#uninstall-disable-extension",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/marketplace/install-extension#uninstall-disable-extension"
},
{
"source_path": "docs/organizations/public/make-project-public.md",
- "redirect_url": "/azure/devops/organizations/projects/make-project-public",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/organizations/projects/make-project-public"
},
{
"source_path": "docs/user-guide/alm-devops-features.md",
- "redirect_url": "https://azure.microsoft.com/products/devops/#overview",
- "redirect_document_id": false
+ "redirect_url": "https://azure.microsoft.com/products/devops/#overview"
},
{
"source_path": "docs/organizations/billing/csp/buy-vs-app-center.md",
- "redirect_url": "https://visualstudio.microsoft.com/app-center/",
- "redirect_document_id": false
+ "redirect_url": "https://visualstudio.microsoft.com/app-center/"
},
{
"source_path": "docs/pipelines/apps/aspnet/build-aspnet-dacpac.md",
- "redirect_url": "/previous-versions/azure/devops/pipelines/apps/aspnet/build-aspnet-dacpac",
- "redirect_document_id": false
+ "redirect_url": "/previous-versions/azure/devops/pipelines/apps/aspnet/build-aspnet-dacpac"
},
{
"source_path": "docs/pipelines/apps/aspnet/build-aspnet-cloudservice.md",
- "redirect_url": "/previous-versions/azure/devops/pipelines/apps/aspnet/build-aspnet-cloudservice",
- "redirect_document_id": false
+ "redirect_url": "/previous-versions/azure/devops/pipelines/apps/aspnet/build-aspnet-cloudservice"
},
{
"source_path": "docs/pipelines/apps/cd/azure/aspnet-core-to-acr.md",
- "redirect_url": "/previous-versions/azure/devops/pipelines/apps/aspnet/build-aspnet-cloudservice",
- "redirect_document_id": false
+ "redirect_url": "/previous-versions/azure/devops/pipelines/apps/aspnet/build-aspnet-cloudservice"
},
{
"source_path": "docs/pipelines/apps/cd/deploy-cloudservice-cloudservice.md",
- "redirect_url": "/previous-versions/azure/devops/pipelines/apps/cd/deploy-cloudservice-cloudservice",
- "redirect_document_id": false
+ "redirect_url": "/previous-versions/azure/devops/pipelines/apps/cd/deploy-cloudservice-cloudservice"
},
{
"source_path": "docs/boards/extensions/feature-timeline.md",
- "redirect_url": "/previous-versions/azure/devops/all/extensions/feature-timeline",
- "redirect_document_id": false
+ "redirect_url": "/previous-versions/azure/devops/all/extensions/feature-timeline"
},
{
"source_path": "docs/boards/extensions/epic-roadmap.md",
- "redirect_url": "/previous-versions/azure/devops/all/extensions/epic-roadmap",
- "redirect_document_id": false
+ "redirect_url": "/previous-versions/azure/devops/all/extensions/epic-roadmap"
},
{
"source_path": "docs/organizations/notifications/concepts-events-and-notifications.md",
- "redirect_url": "/azure/devops/organizations/notifications/about-notifications",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/organizations/notifications/about-notifications"
},
{
"source_path": "docs/boards/get-started/why-use-azure-boards.md",
@@ -232,24 +6767,20 @@
},
{
"source_path": "docs/boards/get-started/customize-boards.md",
- "redirect_url": "/azure/devops/boards/configure-customize",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/boards/configure-customize"
},
{
"source_path": "docs/boards/work-items/guidance/basic-field-reference.md",
- "redirect_url": "/azure/devops/boards/work-items/guidance/work-item-field",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/boards/work-items/guidance/work-item-field"
},
{
"source_path": "docs/boards/work-items/get-started/keyboard-shortcuts.md",
- "redirect_url": "/azure/devops/project/navigation/keyboard-shortcuts",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/project/navigation/keyboard-shortcuts"
},
{
"source_path": "docs/boards/work-items/changes-to-process-templates.md",
- "redirect_url": "/azure/devops/server/release-notes/azuredevops2020u1?view=azure-devops#removing-assigned-to-rule-on-bug-work-item-type",
- "redirect_document_id": false
- },
+ "redirect_url": "/azure/devops/server/release-notes/azuredevops2020u1?view=azure-devops#removing-assigned-to-rule-on-bug-work-item-type"
+ },
{
"source_path": "docs/boards/report/dashboards/velocity-guidance.md",
"redirect_url": "/azure/devops/report/dashboards/team-velocity",
@@ -257,74 +6788,383 @@
},
{
"source_path": "docs/boards/backlogs/office/resolve-excel-invalid-links-tree-list.md",
- "redirect_url": "/azure/devops/boards/backlogs/office/faqs",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/boards/backlogs/office/faqs"
},
{
"source_path": "docs/boards/plans/edit-delivery-plans-permissions.md",
- "redirect_url": "/azure/devops/organizations/security/set-permissions-access-work-tracking",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/organizations/security/set-permissions-access-work-tracking"
},
{
"source_path": "docs/boards/boards/split-columns.md",
- "redirect_url": "/azure/devops/boards/boards/add-columns",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/boards/boards/add-columns"
},
- {
+ {
"source_path": "docs/boards/boards/reorder-cards.md",
- "redirect_url": "/azure/devops/boards/boards/customize-cards#reorder-cards",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/boards/boards/customize-cards#reorder-cards"
},
{
"source_path": "docs/boards/boards/kanban-board-controls.md",
- "redirect_url": "/azure/devops/boards/boards/kanban-overview#use-kanban-board-controls",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/boards/boards/kanban-overview#use-kanban-board-controls"
},
{
"source_path": "docs/boards/boards/kanban-key-concepts.md",
- "redirect_url": "/azure/devops/boards/boards/kanban-overview#kanban-concepts-and-terms",
- "redirect_document_id": false
- },
- {
- "source_path": "docs/boards/boards/kanban-enable-live-updates.md",
- "redirect_url": "/azure/devops/boards/boards/kanban-overview#enable-live-updates",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/boards/boards/kanban-overview#kanban-concepts-and-terms"
},
{
"source_path": "docs/boards/boards/kanban-basics.md",
- "redirect_url": "/azure/devops/boards/boards/kanban-quickstart",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/boards/boards/kanban-quickstart"
},
{
"source_path": "docs/boards/backlogs/backlogs-boards-plans.md",
- "redirect_url": "/azure/devops/boards/get-started/what-is-azure-boards",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/boards/get-started/what-is-azure-boards"
},
{
"source_path": "docs/boards/github/add-remove-repositories.md",
- "redirect_url": "/azure/devops/boards/github/install-github-app#add-remove-repos",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/boards/github/install-github-app#add-remove-repos"
},
{
"source_path": "docs/boards/github/change-azure-boards-app-github-repository-access.md",
- "redirect_url": "/azure/devops/boards/github/install-github-app#change-repository-access",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/boards/github/install-github-app#change-repository-access"
},
{
"source_path": "docs/boards/github/troubleshoot-github-connection.md",
- "redirect_url": "/azure/devops/boards/github/connect-to-github#resolve-connection-issues",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/boards/github/connect-to-github#resolve-connection-issues"
},
{
"source_path": "docs/boards/boards/definition-of-done.md",
- "redirect_url": "/azure/devops/boards/boards/add-columns",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/boards/boards/add-columns"
},
{
"source_path": "docs/boards/boards/best-practices-kanban.md",
- "redirect_url": "/azure/devops/boards/boards/kanban-overview",
- "redirect_document_id": false
+ "redirect_url": "/azure/devops/boards/boards/kanban-overview"
+ },
+ {
+ "source_path": "docs/organizations/notifications/add-links-to-work-items.md",
+ "redirect_url": "/azure/devops/boards/backlogs/add-link"
+ },
+ {
+ "source_path": "docs/boards/extensions/delivery-plans.md",
+ "redirect_url": "/azure/devops/boards/plans/review-team-plans"
+ },
+ {
+ "source_path": "docs/boards/work-items/best-tool-add-update-link-work-items.md",
+ "redirect_url": "/azure/devops/boards/work-items/about-work-items"
+ },
+ {
+ "source_path": "docs/organizations/settings/work/troubleshoot-work-item-form-caching-issues.md",
+ "redirect_url": "/azure/devops/boards/faqs"
+ },
+ {
+ "source_path": "docs/boards/extensions/index.md",
+ "redirect_url": "/azure/devops/boards/extensions/migrate-integrate"
+ },
+ {
+ "source_path": "docs/boards/backlogs/best-practices-product-backlog.md",
+ "redirect_url": "/azure/devops/boards/backlogs/set-up-your-backlog"
+ },
+ {
+ "source_path": "docs/boards/queries/query-support-integration-cross-service-extensions.md",
+ "redirect_url": "/azure/devops/boards/extensions/migrate-integrate"
+ },
+ {
+ "source_path": "docs/boards/backlogs/product-backlog-controls.md",
+ "redirect_url": "/azure/devops/boards/backlogs/backlogs-overview#product-backlog-controls"
+ },
+ {
+ "source_path": "docs/boards/queries/triage-work-items.md",
+ "redirect_url": "/azure/devops/boards/work-items/about-work-items"
+ },
+ {
+ "source_path": "docs/boards/backlogs/copy-list.md",
+ "redirect_url": "/azure/devops/boards/backlogs/copy-clone-work-items"
+ },
+ {
+ "source_path": "docs/boards/queries/high-performing-queries.md",
+ "redirect_url": "/azure/devops/boards/queries/using-queries#best-practices"
+ },
+ {
+ "source_path": "docs/boards/queries/define-query-hyperlink.md",
+ "redirect_url": "/azure/devops/boards/queries/using-queries#define-a-query-as-a-hyperlink"
+ },
+ {
+ "source_path": "docs/boards/queries/share-plans.md",
+ "redirect_url": "/azure/devops/boards/work-items/email-work-items"
+ },
+ {
+ "source_path": "docs/organizations/security/permissions-access-work-tracking.md",
+ "redirect_url": "/azure/devops/organizations/security/set-permissions-access-work-tracking"
+ },
+ {
+ "source_path": "docs/boards/work-items/work-items-form-controls.md",
+ "redirect_url": "/azure/devops/boards/work-items/about-work-items#work-items-form-controls"
+ },
+ {
+ "source_path": "docs/organizations/settings/set-working-days.md",
+ "redirect_url": "/azure/devops/boards/sprints/set-capacity#set-capacity-for-the-team-and-team-members"
+ },
+ {
+ "source_path": "docs/repos/git/configure-repos-work-tracking.md",
+ "redirect_url": "/azure/devops/cross-service/cross-service-overview#azure-boards--azure-repos"
+ },
+ {
+ "source_path": "docs/boards/work-items/work-item-url-hyperlink.md",
+ "redirect_url": "/azure/devops/boards/work-items/email-work-items"
+ },
+ {
+ "source_path": "docs/project/search/faq-search.yml",
+ "redirect_url": "/azure/devops/project/search/manage-search"
+ },
+ {
+ "source_path": "docs/organizations/settings/search-settings.md",
+ "redirect_url": "/azure/devops/project/search/get-started-search"
+ },
+ {
+ "source_path": "docs/user-guide/service-limits.md",
+ "redirect_url": "/azure/devops/integrate/concepts/rate-limits"
+ },
+ {
+ "source_path": "docs/integrate/concepts/cross-origin-resource-sharing.md",
+ "redirect_url": "/azure/devops/integrate/how-to/call-rest-api?view=azure-devops#cross-origin-resource-sharing-cors"
+ },
+ {
+ "source_path": "docs/integrate/rest-api-overview.md",
+ "redirect_url": "/rest/api/azure/devops/?view=azure-devops-rest-7.2\u0026viewFallbackFrom=azure-devops"
+ },
+ {
+ "source_path": "docs/boards/boards/kanban-enable-live-updates.md",
+ "redirect_url": "/azure/devops/boards/boards/kanban-overview"
+ },
+ {
+ "source_path": "docs/boards/queries/link-work-items-support-traceability.md",
+ "redirect_url": "/azure/devops/boards/backlogs/add-link"
+ },
+ {
+ "source_path": "docs/boards/work-items/work-item-deployments-control.md",
+ "redirect_url": "/azure/devops/boards/backlogs/add-link"
+ },
+ {
+ "source_path": "docs/project/wiki/wiki-select-unpublish-versions.md",
+ "redirect_url": "/azure/devops/project/wiki/publish-repo-to-wiki#unpublish-a-code-wiki"
+ },
+ {
+ "source_path": "docs/project/wiki/wiki-markdown-guidance.md",
+ "redirect_url": "/azure/devops/project/wiki/markdown-guidance#wiki-markdown-guidance"
+ },
+ {
+ "source_path": "docs/project/wiki/wiki-keyboard-shortcuts.md",
+ "redirect_url": "/azure/devops/project/navigation/keyboard-shortcuts#wiki-shortcuts"
+ },
+ {
+ "source_path": "docs/extend/publish/publicize.md",
+ "redirect_url": "/azure/devops/extend/publish/overview#publicize-your-extension"
+ },
+ {
+ "source_path": "docs/extend/publish/manage-ratings-reviews.md",
+ "redirect_url": "/azure/devops/extend/publish/overview#respond-to-marketplace-extension-reviews"
+ },
+ {
+ "source_path": "docs/organizations/projects/restore-project.md",
+ "redirect_url": "/azure/devops/organizations/projects/delete-project#restore-a-deleted-project"
+ },
+ {
+ "source_path": "docs/organizations/projects/save-project-data.md",
+ "redirect_url": "/azure/devops/organizations/accounts/delete-project#save-project-data"
+ },
+ {
+ "source_path": "docs/organizations/security/provide-stakeholder-pipeline-access.md",
+ "redirect_url": "/azure/devops/organizations/security/stakeholder-access"
+ },
+ {
+ "source_path": "docs/repos/get-started/key-concepts-repos.md",
+ "redirect_url": "/azure/devops/repos/get-started/index"
+ },
+ {
+ "source_path": "docs/organizations/projects/project-team-quick-reference.md",
+ "redirect_url": "/azure/devops/organizations/projects/about-projects"
+ },
+ {
+ "source_path": "docs/project/configure-or-add-a-project-portal.md",
+ "redirect_url": "/azure/devops/project/wiki/about-readme-wiki"
+ },
+ {
+ "source_path": "docs/organizations/projects/tf31002-unable-connect-tfs.md",
+ "redirect_url": "/azure/devops/user-guide/troubleshoot-connection"
+ },
+ {
+ "source_path": "docs/project/navigation/use-breadcrumbs-selectors.md",
+ "redirect_url": "/azure/devops/project/navigation/go-to-project-repo"
+ },
+ {
+ "source_path": "docs/organizations/projects/resources-granted-to-project-members.md",
+ "redirect_url": "/azure/devops/user-guide/project-admin-tutorial"
+ },
+ {
+ "source_path": "docs/user-guide/user-guide-faqs.yml",
+ "redirect_url": "/azure/devops/user-guide/provide-feedback"
+ },
+ {
+ "source_path": "docs/boards/work-items/automate-work-item-state-transitions.md",
+ "redirect_url": "/azure/devops/boards/backlogs/automate-work-item-state-transitions"
+ },
+ {
+ "source_path": "docs/organizations/security/quick-reference-index-security.md",
+ "redirect_url": "/azure/devops/organizations/security/index"
+ },
+ {
+ "source_path": "docs/organizations/security/security-glossary.md",
+ "redirect_url": "/azure/devops/project/navigation/glossary"
+ },
+ {
+ "source_path": "docs/organizations/security/faq-permissions.yml",
+ "redirect_url": "/azure/devops/organizations/accounts/faq-user-and-permissions-management"
+ },
+ {
+ "source_path": "docs/organizations/organizations/security/remove-users-prohibit-access.md",
+ "redirect_url": "/azure/active-directory/add-users-azure-active-directory#delete-a-user"
+ },
+ {
+ "source_path": "docs/organizations/security/faq-github-authentication.yml",
+ "redirect_url": "/azure/devops/boards/github/connect-to-github#faqs"
+ },
+ {
+ "source_path": "docs/migrate/migrate-from-tfs.md",
+ "redirect_url": "/azure/devops/migrate/migration-overview"
+ },
+ {
+ "source_path": "docs/migrate/migration-import-large-collections.md",
+ "redirect_url": "/azure/devops/migrate/migration-prepare-test-run#migrate-large-collections"
+ },
+ {
+ "source_path": "docs/migrate/migration-restricting-access-to-azure-devops-services.md",
+ "redirect_url": "/azure/devops/migrate/migration-prepare-test-run#restrict-access-to-azure-devops-services"
+ },
+ {
+ "source_path": "docs/migrate/migration-import.md",
+ "redirect_url": "/azure/devops/migrate/migration-test-run"
+ },
+ {
+ "source_path": "docs/migrate/migration-processtemplates.md",
+ "redirect_url": "/azure/devops/migrate/migration-validate"
+ },
+ {
+ "source_path": "docs/migrate/faqs.yml",
+ "redirect_url": "/azure/devops/migrate/migration-troubleshooting"
+ },
+ {
+ "source_path": "docs/migrate/migration-post-import.md",
+ "redirect_url": "/azure/devops/migrate/migration-post-migration"
+ },
+ {
+ "source_path": "docs/report/sql-reports/analytics-insights-comparable-sql-reports.md",
+ "redirect_url": "/azure/devops/report/dashboards/overview#sql-server-reports"
+ },
+ {
+ "source_path": "docs/extend/develop/use-control.md",
+ "redirect_url": "https://azdevinternal.azureedge.net/"
+ },
+ {
+ "source_path": "docs/organizations/notifications/troubleshoot-contact-support.md",
+ "redirect_url": "/azure/devops/user-guide/provide-feedback"
+ },
+ {
+ "source_path": "docs/pipelines/security/infrastructure.md",
+ "redirect_url": "/azure/devops/pipelines/security/misc#protect-shared-infrastructure"
+ },
+ {
+ "source_path": "docs/pipelines/security/projects.md",
+ "redirect_url": "/azure/devops/pipelines/security/misc#protect-projects"
+ },
+ {
+ "source_path": "docs/pipelines/security/repos.md",
+ "redirect_url": "/azure/devops/pipelines/security/misc#protect-repositories"
+ },
+ {
+ "source_path": "docs/pipelines/policies/deployment-group-permissions.md",
+ "redirect_url": "/azure/devops/pipelines/policies/permissions#deployment-group-permissions"
+ },
+ {
+ "source_path": "docs/pipelines/policies/environment-permissions.md",
+ "redirect_url": "/azure/devops/pipelines/policies/permissions#environment-permissions"
+ },
+ {
+ "source_path": "docs/pipelines/policies/library-permissions.md",
+ "redirect_url": "/azure/devops/pipelines/policies/permissions#library-permissions"
+ },
+ {
+ "source_path": "docs/pipelines/policies/pipeline-permissions.md",
+ "redirect_url": "/azure/devops/pipelines/policies/permissions#pipeline-permissions"
+ },
+ {
+ "source_path": "docs/pipelines/policies/release-pipeline-permissions.md",
+ "redirect_url": "/azure/devops/pipelines/policies/permissions#release-pipeline-permissions"
+ },
+ {
+ "source_path": "docs/pipelines/policies/service-connection-permissions.md",
+ "redirect_url": "/azure/devops/pipelines/policies/permissions#service-connection-permissions"
+ },
+ {
+ "source_path": "docs/pipelines/policies/agent-pool-permissions.md",
+ "redirect_url": "/azure/devops/pipelines/policies/permissions#agent-pool-permissions"
+ },
+ {
+ "source_path": "docs/pipelines/policies/task-group-permissions.md",
+ "redirect_url": "/azure/devops/pipelines/policies/permissions#task-group-permissions"
+ },
+ {
+ "source_path": "docs/organizations/security/credential-storage.md",
+ "redirect_url": "/azure/devops/organizations/security/data-protection#credential-security"
+ },
+ {
+ "source_path": "docs/migrate/phase-rollout-with-rings.md",
+ "redirect_url": "/training/modules/manage-release-cadence"
+ },
+ {
+ "source_path": "docs/organizations/security/security-tools-reference.md",
+ "redirect_url": "/azure/devops/organizations/security/manage-tokens-namespaces"
+ },
+ {
+ "source_path": "docs/organizations/billing/add-backup-billing-managers.md",
+ "redirect_url": "/azure/devops/organizations/billing/set-up-billing-for-your-organization-vs#add-backup-billing-managers"
+ },
+ {
+ "source_path": "docs/organizations/billing/change-azure-subscription.md",
+ "redirect_url": "/azure/devops/organizations/billing/set-up-billing-for-your-organization-vs#change-azure-subscription"
+ },
+ {
+ "source_path": "docs/boards/backlogs/add-work-items.md",
+ "redirect_url": "/azure/devops/boards/backlogs/manage-work-items"
+ },
+ {
+ "source_path": "docs/repos/security/github-advanced-security-dependency-scanning-ecosystems-troubleshoot.md",
+ "redirect_url": "/azure/devops/repos/security/github-advanced-security-dependency-scanning-troubleshoot"
+ },
+ {
+ "source_path_from_root": "/docs/repos/git/go-get.md",
+ "redirect_url": "/azure/devops/repos/git/go-install"
+ },
+ {
+ "source_path": "docs/organizations/security/security-best-practices.md",
+ "redirect_url": "/azure/devops/organizations/security/security-overview"
+ },
+ {
+ "source_path": "docs/integrate/get-started/authentication/iis-basic-auth.md",
+ "redirect_url": "/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate#why-did-my-pat-stop-working"
+ },
+ {
+ "source_path": "docs/boards/backlogs/office/resolve-excel-data-validation-errors.md",
+ "redirect_url": "/azure/devops/boards/backlogs/office/tfs-office-integration-issues.md#resolve-data-validation-errors-that-occur-when-you-publish-from-Excel"
+ },
+ {
+ "source_path": "docs/boards/backlogs/office/resolve-excel-data-conflicts-publish-refresh.md",
+ "redirect_url": "/azure/devops/boards/backlogs/office/tfs-office-integration-issues#Resolve-data-conflicts-when-you-publish-or-refresh-Excel-data"
+ },
+ {
+ "source_path": "docs/extend/extension-report.md",
+ "redirect_url": "/azure/devops/extend/overview#extension-report"
+ },
+ {
+ "source_path": "docs/extend/high-risk-extensions.md",
+ "redirect_url": "/azure/devops/extend/overview"
}
]
}
-
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 00000000000..53e5de6711a
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,5 @@
+{
+ "recommendations": [
+ "learningengineeringoperations.learn-training-ai-assistant"
+ ]
+}
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 00000000000..84c1ea7fcbf
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,5 @@
+{
+ "cSpell.words": [
+ "Entra"
+ ]
+}
\ No newline at end of file
diff --git a/.whatsnew.json b/.whatsnew.json
index d63b6950bc6..619cb00bed7 100644
--- a/.whatsnew.json
+++ b/.whatsnew.json
@@ -7,11 +7,6 @@
"relativeLinkPrefix": "/azure/devops/"
},
"inclusionCriteria": {
- "additionalMicrosoftOrgs": [
- "GitHub",
- "Microsoft",
- "MicrosoftDocs"
- ],
"minAdditionsToFile": 10,
"omitPullRequestTitles": true
},
@@ -84,6 +79,10 @@
"names": ["pipelines"],
"heading": "Azure Pipelines"
},
+ {
+ "names": ["managed-devops-pools"],
+ "heading": "Managed DevOps Pools"
+ },
{
"names": ["project"],
"heading": "Project"
diff --git a/autopublish.yaml b/autopublish.yaml
new file mode 100644
index 00000000000..79bced1c98c
--- /dev/null
+++ b/autopublish.yaml
@@ -0,0 +1,26 @@
+
+
+trigger:
+- main
+
+jobs:
+- job: MergeMainToLive
+ pool:
+ vmImage: 'ubuntu-latest'
+ steps:
+ - checkout: self
+ persistCredentials: true
+ - script: |
+ git config --global user.name "Mike Jacobs"
+ git config --global user.email "mijacobs@users.noreply.github.com"
+ git checkout main
+ git checkout live
+ git merge main --no-ff --no-commit
+ if [ $? -eq 0 ]; then
+ git commit -m "Merged main into live"
+ git push origin live
+ else
+ echo "Error merging main to live"
+ exit 1
+ fi
+ displayName: 'Merge main to live if main has changed'
diff --git a/docs/.DS_Store b/docs/.DS_Store
deleted file mode 100644
index b13eecfe046..00000000000
Binary files a/docs/.DS_Store and /dev/null differ
diff --git a/docs/artifacts/.openpublishing.redirection.artifacts.json b/docs/artifacts/.openpublishing.redirection.artifacts.json
index 2ec2ed2fe5c..a32e3badc12 100644
--- a/docs/artifacts/.openpublishing.redirection.artifacts.json
+++ b/docs/artifacts/.openpublishing.redirection.artifacts.json
@@ -9,6 +9,16 @@
"source_path_from_root": "/docs/artifacts/how-to/project-scoped-feeds-pipeline-project-permissions.md",
"redirect_url": "/azure/devops/artifacts/feeds/project-scoped-feeds",
"redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/docs/artifacts/collaborate-with-packages.md",
+ "redirect_url": "/azure/devops/artifacts/concepts/best-practices",
+ "redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/docs/artifacts/nuget/consume.md",
+ "redirect_url": "/azure/devops/artifacts/nuget/install-nuget-packages-with-visual-studio",
+ "redirect_document_id": false
}
]
}
\ No newline at end of file
diff --git a/docs/artifacts/artifact-storage.md b/docs/artifacts/artifact-storage.md
index 5a550a63ae5..1d8509aac43 100644
--- a/docs/artifacts/artifact-storage.md
+++ b/docs/artifacts/artifact-storage.md
@@ -1,19 +1,19 @@
---
-title: View Artifacts storage consumption
-description: View Azure Artifacts storage consumption at organization and project levels.
+title: Monitor Artifacts storage consumption
+description: How to monitor Azure Artifacts storage usage at Organization and Project levels.
ms.service: azure-devops-artifacts
ms.topic: conceptual
-ms.date: 04/10/2023
+ms.date: 05/13/2024
ms.author: rabououn
ms.custom: engagement-fy23
author: ramiMSFT
-monikerRange: '<= azure-devops'
+monikerRange: 'azure-devops'
"recommendations": "true"
---
-# Artifacts storage consumption
+# Monitor Artifacts storage consumption
-[!INCLUDE [version-lt-eq-azure-devops](../includes/version-lt-eq-azure-devops.md)]
+[!INCLUDE [version-eq-azure-devops](../includes/version-eq-azure-devops.md)]
Azure Artifacts adopts a consumption-based billing model for all the package types it supports, such as NuGet, npm, Python, Maven, and Universal packages. The free-tier plan provides a storage capacity of two Gibibytes (GiB) to store various package types. If you exceed the storage limit, you can either upgrade to a paid subscription or remove some of your existing artifacts.
@@ -25,9 +25,7 @@ The organization-level view provides an overview of your total storage usage as
1. Sign in to your Azure DevOps organization.
-1. From within your organization, select  **Organization settings**.
-
-1. Select **Storage** from the left pane.
+1. Select  **Organization settings**, and then select **Storage** from the left navigation pane.
:::image type="content" source="media/artifact-storage-navigation.png" alt-text="A screenshot showing how to navigate to org-level storage.":::
@@ -35,7 +33,7 @@ The organization-level view provides an overview of your total storage usage as
:::image type="content" source="media/org-level-storage.png" alt-text="A screenshot showing the storage consumption levels.":::
-1. Select **View storage breakdown** from **Storage by type** to view the total storage for packages in your organization-scoped feeds.
+1. Select **View storage breakdown** from the **Storage by type** section to view the total storage for packages in your organization-scoped feeds.
:::image type="content" source="media/packages-org-scoped-feeds.png" alt-text="A screenshot showing total storage for packages in organization-scoped feeds.":::
@@ -48,9 +46,7 @@ The project-level view provides an overview of your total storage usage as well
1. Sign in to your Azure DevOps organization, and then navigate to your project.
-1. From within your project, select  **Project settings**.
-
-1. Select **Storage** from the left pane.
+1. Select  **Project settings**, and then select **Storage** from the left navigation pane.
:::image type="content" source="media/artifacts-storage-navigation-project-level.png" alt-text="A screenshot showing how to navigate to project-level storage.":::
@@ -58,12 +54,12 @@ The project-level view provides an overview of your total storage usage as well
:::image type="content" source="media/proj-level-storage.png" alt-text="A screenshot showing project level storage consumption.":::
-1. Select **View storage breakdown** from **Storage by type** to view the total storage for packages in project-scoped feeds.
+1. Select **View storage breakdown** from the **Storage by type** section to view the total storage for packages in your project-scoped feeds.
:::image type="content" source="media/packages-proj-scoped-feeds.png" alt-text="A screenshot showing the total storage for packages in project-scoped feeds.":::
> [!NOTE]
-> Azure Artifacts provides 2GiB of free storage for each organization. After reaching the maximum storage limit, you need to [set up billing](../organizations/billing/set-up-billing-for-your-organization-vs.md) for your organization.
+> Azure Artifacts provides 2 GiB of free storage for each organization. This free tier is designed to help you evaluate if Azure Artifacts fits your workflow. As your organization starts handling more critical tasks, we recommend [set up billing](../organizations/billing/set-up-billing-for-your-organization-vs.md#set-up-billing) to ensure you have the appropriate resources.
## Related articles
diff --git a/docs/artifacts/artifacts-key-concepts.md b/docs/artifacts/artifacts-key-concepts.md
index ba8375bff82..b07608930ca 100644
--- a/docs/artifacts/artifacts-key-concepts.md
+++ b/docs/artifacts/artifacts-key-concepts.md
@@ -1,46 +1,71 @@
---
-title: Key concepts for Azure Artifacts
-description: Important concepts for Azure Artifacts
+title: Azure Artifacts key concepts
+description: Understand the key concepts in Azure Artifacts.
ms.service: azure-devops-artifacts
ms.topic: conceptual
-ms.date: 01/12/2022
+ms.date: 02/12/2025
monikerRange: '<= azure-devops'
"recommendations": "true"
---
-# Key concepts for Azure Artifacts
+# Azure Artifacts key concepts
[!INCLUDE [version-lt-eq-azure-devops](../includes/version-lt-eq-azure-devops.md)]
-## Immutability
+Azure Artifacts enable developers to host and share various types of packages to streamline collaboration and package distribution. This article covers the key concepts when working with Azure Artifacts.
+
+## Feeds
+
+Azure Artifacts feeds are organizational constructs that provide a structured way to store, manage, and share packages while controlling access. Feeds are not limited to specific package types and can host various types, such as npm, NuGet, Maven, Python, Cargo, and Universal Packages.
+Feeds can be scoped to a project or an organization. However, only project-scoped feeds can be set as public, and organization-scoped feeds cannot be converted to project-scoped feeds.
+
+## Feed views
+
+Feed views allow developers to share a selected subset of package versions with their consumers. A common use case is sharing only tested and validated package versions while holding back those still in development or not meeting a specific quality standard.
+
+By default, feeds include three views: `@local`, `@prerelease`, and `@release`. The latter two can be renamed or deleted as needed. `@local` is the default view, commonly used in upstream sources, and it contains all packages published directly to the feed as well as those saved from upstream sources.
+
+## Upstream sources
+
+Upstream sources allow you to store packages from multiple sources within a single feed. This includes both packages you publish and those saved from external feeds and public registries such as NuGet.org or npmjs.com. When an upstream source is enabled on your feed, Azure Artifacts automatically saves a copy of any package installed by a collaborator or higher from the upstream source.
-Once you publish a particular version of a package to a feed, that version number is permanently reserved. You cannot upload a newer revision package with that same version number, or delete it and upload a new package with the same version number.
+For public package managers that support multiple feeds, such as NuGet and Maven, the order in which feeds are queried can vary. For example, NuGet sends parallel queries to all configured feeds and selects the first valid response it receives, which can sometimes lead to nondeterministic behavior.
-Many package clients, including NuGet and npm, keep a local cache of packages on your machine. Once a client has cached a particular package version, it will return that copy on future install/restore requests.
+Upstream sources help mitigate this nondeterministic behavior by searching the feed and its upstream sources in the following order:
-If, on the server side, you replace a package version v1 with a new version v2, the client is unable to tell the difference. This can lead to indeterminate build results from different machines. For example, a developer's machine and the build agent might have cached different revisions of the package, leading to unexpected build results.
+1. Packages published directly to the feed.
-If a package is broken, buggy, or shares unintended content (like secrets), the best approach is to prepare a fix and publish it as a new version. Then, depending on the severity of the issue and how widely depended-on the package is, you can delete the package to make it unavailable for consumption.
+1. Packages saved from an upstream source.
-The only way to work around the immutability constraint is to create a new feed and publish the desired package version to the new feed.
+1. Packages available from upstream sources. Each upstream source is searched in the order they appear in the feed's configuration.
> [!NOTE]
-> Deleted feeds remain in the recycle bin for 30 days then are deleted permanently. The feed name becomes available once the feed is permanently deleted.
+> To take full advantage of the fast lookup feature, we recommend that you include only one feed in your configuration file.
+
+## Immutability
+
+Once you publish a specific version of a package to a feed, that version number is permanently reserved. You cannot upload a newer revision of the package with that same version number, nor can you delete it and upload a new package with the same version number.
## Indexing
-Azure Artifacts maintain an index of all the packages in each feed, which enables fast list operations. List operations on your file shares require the client to open every package and examine its metadata unless your file share has been configured to provide an index that the client understands.
+Azure Artifacts maintain an index of all the packages in each feed, which enables fast list operations. This is different from file shares, where the client must open each package and examine its metadata unless the file share has been configured to provide an index that the client recognizes.
## Well-formedness
-Azure Artifacts validate all the published packages to ensure they're well formed. This prevents invalid packages from entering your development and build environments. However, any workflow that publishes malformed packages will break when migrating to Azure Artifacts.
+Azure Artifacts validates all the published packages to ensure integrity and correctness. This helps prevent invalid packages from entering your development environment. If you have a workflow that publishes malformed packages and plan to migrate to Azure Artifacts, it’s important to revise your workflow during the transition to ensure your packages pass the validation checks in Azure Artifacts.
## Recycle Bin
-Packages can be deleted manually or by setting up retention policies for your feed. Deleted packages remain in the recycle bin for 30 days then get deleted permanently. Feed owners can recover the deleted packages from the Recycle Bin.
+Packages can be deleted manually or by setting up retention policies for your feed. Deleted packages remain in the recycle bin for 30 days before they are automatically deleted permanently. Only feed owners can recover the deleted packages from the recycle bin.
+
+You must be a feed owner also to delete feeds. Deleted feeds remain in the recycle bin for 30 days before they are automatically deleted permanently. Once the feed is permanently deleted, the feed name becomes available.
+
+## Related content
+
+- [What are feeds?](./concepts/feeds.md)
+
+- [Feed views](./concepts/views.md)
-## Related articles
+- [Azure Artifacts Upstream Sources](./concepts/upstream-sources.md)
-- [Package graphs](./concepts/package-graph.md)
-- [Use artifactignore](./reference/artifactignore.md)
-- [Packages componentization](./collaborate-with-packages.md)
+- [Delete and recover packages](./how-to/delete-and-recover-packages.md)
diff --git a/docs/artifacts/cargo/cargo-publish.md b/docs/artifacts/cargo/cargo-publish.md
new file mode 100644
index 00000000000..59572be9781
--- /dev/null
+++ b/docs/artifacts/cargo/cargo-publish.md
@@ -0,0 +1,52 @@
+---
+title: Publish Cargo packages from the command line
+description: Learn how to connect to your feed and publish your Cargo packages from the command line.
+ms.service: azure-devops-artifacts
+ms.topic: how-to
+ms.date: 03/25/2025
+monikerRange: '>= azure-devops-2022'
+---
+
+# Publish Cargo packages from the command line
+
+[!INCLUDE [version-gt-eq-azure-devops-2019](../../includes/version-gt-eq-2019.md)]
+
+This article walks you through setting up your project, authenticating with your Azure Artifacts feed, and publishing Cargo packages from the command line.
+
+## Prerequisites
+
+| **Product** | **Requirements** |
+|--------------------|--------------------|
+| **Azure DevOps** | - An Azure DevOps [organization](../../organizations/accounts/create-organization.md).
- An Azure DevOps [project](../../organizations/projects/create-project.md).
- Download and install [rustup](https://rustup.rs/). You'll need Cargo version 1.74.0 or later. |
+
+## Create a feed
+
+Azure Artifacts recommends using a dedicated feed for consuming crates from *crates.io* and a separate feed for publishing your internal crates. If you already have an Azure Artifacts feed, skip to the next section. Otherwise, create a new feed as follows:
+
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
+
+1. Select **Artifacts**, and then select **Create Feed**.
+
+1. Enter a **Name** for your feed and specify its **Visibility**. If you want to include packages from public registries, check **Upstream sources**, then select a **Scope** for your feed.
+
+1. Select **Create** when you're done.
+
+ :::image type="content" source="media/cargo-create-a-feed.png" alt-text="A screenshot displaying how to create a new feed in Azure Artifacts.":::
+
+## Publish packages
+
+1. If you haven't authenticated with your feed yet, follow the steps in the [Project setup](project-setup-cargo.md) to configure your config files, set up a credential provider, and log in to the registry.
+
+1. Run the following command in your project directory to publish your Cargo package:
+
+ ```
+ cargo publish
+ ```
+
+## Related content
+
+- [Manage permissions](../feeds/feed-permissions.md)
+
+- [What are upstream sources?](../concepts/upstream-sources.md)
+
+- [Publish Cargo packages with Azure Pipelines](../../pipelines/artifacts/cargo-pipelines.md)
\ No newline at end of file
diff --git a/docs/artifacts/cargo/cargo-upstream-source.md b/docs/artifacts/cargo/cargo-upstream-source.md
new file mode 100644
index 00000000000..5442f84a896
--- /dev/null
+++ b/docs/artifacts/cargo/cargo-upstream-source.md
@@ -0,0 +1,240 @@
+---
+title: Consume Cargo packages from Crates.io
+description: How to consume Crates from Crates.io with Azure Artifacts
+ms.service: azure-devops-artifacts
+ms.author: rabououn
+author: ramiMSFT
+ms.topic: quickstart
+ms.date: 12/13/2023
+monikerRange: '>= azure-devops-2022'
+"recommendations": "true"
+---
+
+# Use packages from Crates.io
+
+[!INCLUDE [version-gt-eq-2022](../../includes/version-gt-eq-2022.md)]
+
+Azure Artifacts upstream sources enable developers to consume packages from public registries like Crates.io and nuget.org. This article will guide you through setting up your project and using the command line to consume Crates from Crates.io.
+
+This article will guide you through how to:
+
+> [!div class="checklist"]
+> * Create an Azure Artifacts feed
+> * Connect to your feed
+> * Consume crates from upstream
+
+## Prerequisites
+
+- An Azure DevOps organization. [Create an organization](../../organizations/accounts/create-organization.md) if you haven't already.
+
+- An Azure DevOps project. [Create a project](../../organizations/projects/create-project.md#create-a-project) if you don't have one.
+
+- Download and install [rustup](https://rustup.rs/).
+
+## Create a feed
+
+Azure Artifacts recommends having a dedicated feed for consuming crates from crates.io and a separate feed exclusively for publishing internal crates.
+
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
+
+1. Select **Artifacts**, and then select **Create Feed**.
+
+1. Enter a **Name** for your feed, define its **Visibility**, and then select your **Scope**. Make sure to check the **Upstream sources** checkbox to include packages from public registries.
+
+1. Select **Create** when you're done.
+
+ :::image type="content" source="media/create-cargo-upstream-feed.png" alt-text="A screenshot showing how to create a feed for cargo upstream.":::
+
+## Connect to your feed
+
+::: moniker range="azure-devops"
+
+#### [Private feed](#tab/privatefeed/)
+
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
+
+1. Select **Artifacts**, and then select your feed from the dropdown menu.
+
+1. Select **Connect to feed**, and then select **Cargo** from the left navigation pane.
+
+1. If this is the first time using Cargo with Azure Artifacts, make sure you have installed [rustup](https://rustup.rs/).
+
+1. Add the provided snippet from the **Project setup** section to your *.cargo/config.toml* file in your source repository:
+
+ - **Project-scoped feed**:
+
+ ```
+ [registries]
+ = { index = "sparse+https://pkgs.dev.azure.com///_packaging//Cargo/index/" }
+
+ [source.crates-io]
+ replace-with = ""
+ ```
+
+ - **Organization-scoped feed**:
+
+ ```
+ [registries]
+ = { index = "sparse+https://pkgs.dev.azure.com//_packaging//Cargo/index/" }
+
+ [source.crates-io]
+ replace-with = ""
+ ```
+
+#### [Public feed](#tab/publicfeed/)
+
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
+
+1. Select **Artifacts**, and then select your feed from the dropdown menu.
+
+1. Select **Connect to feed**, and then select **Cargo** from the left navigation pane.
+
+1. If this is the first time using Cargo with Azure Artifacts, make sure you have installed [rustup](https://rustup.rs/).
+
+1. Add the provided snippet from the **Project setup** section to your *.cargo/config.toml* file in your source repository depending on your scenario. See [Permissions table](../feeds/feed-permissions.md#permissions-table) to learn more about the different roles and their permissions:
+
+ - **Feed Readers and anonymous users**:
+
+ ```
+ [registries]
+ = { index = "sparse+https://pkgs.dev.azure.com///_packaging//Cargo/index/" }
+
+ [source.crates-io]
+ replace-with = ""
+ ```
+
+ - **Feed and Upstream Readers, Feed Publishers, and Feed Owners**: Be sure to include the additional flag (*~force-auth*) for proper authentication with your feed, as shown below:
+
+ ```
+ [registries]
+ = { index = "sparse+https://pkgs.dev.azure.com///_packaging/~force-auth/Cargo/index/" }
+
+ [source.crates-io]
+ replace-with = ""
+ ```
+
+::: moniker-end
+
+::: moniker range="azure-devops-2022"
+
+1. Sign in to your Azure DevOps collection, and then navigate to your project.
+
+1. Select **Artifacts**, and then select your feed from the dropdown menu.
+
+1. Select **Connect to feed**, and then select **Cargo** from the left navigation pane.
+
+1. If this is the first time using Cargo with Azure Artifacts, make sure you have installed [rustup](https://rustup.rs/).
+
+1. Add the provided snippet from the **Project setup** section to your *.cargo/config.toml* file in your source repository:
+
+ - **Project-scoped feed**:
+
+ ```
+ [registries]
+ = { index = "sparse+https://pkgs.dev.azure.com///_packaging//Cargo/index/" }
+
+ [source.crates-io]
+ replace-with = ""
+ ```
+
+ - **Collection-scoped feed**:
+
+ ```
+ [registries]
+ = { index = "sparse+https://pkgs.dev.azure.com//_packaging//Cargo/index/" }
+
+ [source.crates-io]
+ replace-with = ""
+ ```
+
+::: moniker-end
+
+## Configure a credential provider
+
+To use Cargo with Azure Artifacts, you need to set up a credential provider. The provided settings will configure a default credential helper for the current user:
+
+#### [Windows](#tab/Windows/)
+
+Paste the following snippet in your %USERPROFILE%\.cargo\config.toml:
+
+```
+[registry]
+global-credential-providers = ["cargo:token", "cargo:wincred"]
+```
+
+#### [Linux](#tab/Linux/)
+
+Paste the following snippet in your ~/.cargo/config.toml:
+
+```
+[registry]
+global-credential-providers = ["cargo:token", "cargo:libsecret"]
+```
+
+#### [macOS](#tab/macOS/)
+
+Paste the following snippet in your ~/.cargo/config.toml:
+
+```
+[registry]
+global-credential-providers = ["cargo:token", "cargo:macos-keychain"]
+```
+
+* * *
+
+## Log in to your registry
+
+1. Create a [Personal access token](../../organizations/accounts/use-personal-access-tokens-to-authenticate.md#create-a-pat) with **Packaging** > **Read & write** scopes to authenticate with your feed.
+
+1. Run the following command to log in to your registry. Replace the placeholder with your feed's name, and paste the personal access token you created in the previous step when prompted:
+
+ #### [PowerShell ](#tab/PowerShell/)
+
+ ```
+ "Basic " + [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("PAT:" + (Read-Host -MaskInput "Enter PAT"))) | cargo login --registry
+ ```
+
+ #### [Bash ](#tab/Bash/)
+
+ ```
+ read -p "Enter PAT: " PAT; echo Basic $(echo -n PAT:$PAT | base64) | cargo login --registry
+ ```
+
+ #### [Azure CLI](#tab/AzureCLI/)
+
+ ```
+ az login
+ az account get-access-token --query "join(' ', ['Bearer', accessToken])" --output tsv | cargo login --registry
+ ```
+
+ * * *
+
+## Save packages from Crates.io
+
+[!INCLUDE [save-requires-collaborator](../includes/save-requires-collaborator.md)]
+
+Now that we have set up our project, configured a credential provider, and logged into our feed, we can begin consuming packages from upstream. Azure Artifacts saves a copy of any package you install from upstream to your feed.
+
+In this example, we consume the `serde` crate, a serialization/deserialization framework:
+
+1. Run the following command in your project directory to add the crate to your *cargo.toml*:
+
+ ```
+ cargo add serde
+ ```
+
+1. Run the following command to build your project and consume your crate:
+
+ ```
+ cargo build
+ ```
+
+Once your package is installed, a copy will be saved to your feed. Navigate to your feed to verify its presence. Your package should be available in your feed, as shown below:
+
+:::image type="content" source="media/crate-from-upstream.png" alt-text="A screenshot showing the *serde* crate consumed from upstream.":::
+
+## Related articles
+
+- [Publish Cargo packages with Azure Pipelines](../../pipelines/artifacts/cargo-pipelines.md)
+- [Delete and recover packages](../how-to/delete-and-recover-packages.md)
+- [Configure permissions](../feeds/feed-permissions.md)
diff --git a/docs/artifacts/cargo/media/cargo-create-a-feed.png b/docs/artifacts/cargo/media/cargo-create-a-feed.png
new file mode 100644
index 00000000000..40470a56e6a
Binary files /dev/null and b/docs/artifacts/cargo/media/cargo-create-a-feed.png differ
diff --git a/docs/artifacts/cargo/media/crate-from-upstream.png b/docs/artifacts/cargo/media/crate-from-upstream.png
new file mode 100644
index 00000000000..7620587b2b0
Binary files /dev/null and b/docs/artifacts/cargo/media/crate-from-upstream.png differ
diff --git a/docs/artifacts/cargo/media/create-cargo-upstream-feed.png b/docs/artifacts/cargo/media/create-cargo-upstream-feed.png
new file mode 100644
index 00000000000..fc8a6db14a0
Binary files /dev/null and b/docs/artifacts/cargo/media/create-cargo-upstream-feed.png differ
diff --git a/docs/artifacts/cargo/project-setup-cargo.md b/docs/artifacts/cargo/project-setup-cargo.md
new file mode 100644
index 00000000000..9aa52c4cf7c
--- /dev/null
+++ b/docs/artifacts/cargo/project-setup-cargo.md
@@ -0,0 +1,121 @@
+---
+title: Connect your Cargo project to an Azure Artifacts feed
+description: Learn how to set up your Cargo project and connect to an Azure Artifacts feed.
+ms.service: azure-devops-artifacts
+ms.topic: how-to
+ms.date: 01/21/2025
+monikerRange: '>= azure-devops-2022'
+---
+
+# Connect your Cargo project to an Azure Artifacts feed
+
+[!INCLUDE [version-gt-eq-2022](../../includes/version-gt-eq-2022.md)]
+
+This article guides you through setting up your Cargo project, configuring the credential provider, and connecting to an Azure Artifacts feed.
+
+## Prerequisites
+
+| **Product** | **Requirements** |
+|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **Azure DevOps** | - An Azure DevOps [organization](../../organizations/accounts/create-organization.md).
- An Azure DevOps [project](../../organizations/projects/create-project.md).
- Download and install [rustup](https://rustup.rs/). You'll need Cargo version 1.74.0 or later. |
+
+
+## Project setup
+
+1. Sign in to your Azure DevOps organization, and navigate to your project.
+
+1. Select **Artifacts**, and then select your feed from the dropdown menu.
+
+1. Select **Connect to feed**, and then select **Cargo** from the left navigation pane.
+
+1. Add the provided snippet to your *cargo/config.toml* in your source repository. Your *config.toml* file should resemble the following:
+
+ - **Project-scoped feed**:
+
+ ```
+ [registries]
+ FEED_NAME = { index = "sparse+https://pkgs.dev.azure.com/ORGANIZATION_NAME/PROJECT_NAME/_packaging/FEED_NAME/Cargo/index/" }
+ ```
+
+ - **Organization-scoped feed**:
+
+ ```
+ [registries]
+ FEED_NAME = { index = "sparse+https://pkgs.dev.azure.com/ORGANIZATION_NAME/_packaging/FEED_NAME/Cargo/index/" }
+ ```
+
+1. Add the following snippet to your *cargo/config.toml* to replace the *crates.io* source with your feed. Replace the placeholder with your feed name:
+
+ ```
+ [source.crates-io]
+ replace-with = "FEED_NAME"
+ ```
+
+## Configure a credential provider
+
+To use Cargo with Azure Artifacts, you must first set up a default credential helper. See [The Cargo Book](https://doc.rust-lang.org/nightly/cargo/reference/registry-authentication.html) for more details.
+
+### [Windows](#tab/windows)
+
+Add the following snippet to your *%USERPROFILE%\.cargo\config.toml*. This sets a default credential helper for the user:
+
+```
+[registry]
+global-credential-providers = ["cargo:token", "cargo:wincred"]
+```
+
+### [Linux](#tab/linux)
+
+Add the following snippet to your */.cargo/config.toml*. This sets a default credential helper for the user:
+
+```
+[registry]
+global-credential-providers = ["cargo:token", "cargo:libsecret"]
+```
+
+### [macOS](#tab/macOS)
+
+Add the following snippet to your */.cargo/config.toml*. This sets a default credential helper for the user:
+
+```dotnetcli
+[registry]
+global-credential-providers = ["cargo:token", "cargo:macos-keychain"]
+```
+
+- - -
+
+
+## Log in to the registry
+
+1. Sign in to your Azure DevOps organization, and navigate to your project.
+
+1. Generate a [Personal access token](../../organizations/accounts/use-personal-access-tokens-to-authenticate.md#create-a-pat) with **Packaging** > **Read & write** scopes to authenticate with your feed.
+
+1. Run the following command to log in to your registry. Replace the placeholder with your feed's name, and provide the personal access token you created earlier when prompted:
+
+### [PowerShell ](#tab/powershell/)
+
+```powershell
+"Basic " + [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("PAT:" + (Read-Host -MaskInput "Enter PAT"))) | cargo login --registry
+```
+
+#### [Bash ](#tab/bash/)
+
+```bash
+read -p "Enter PAT: " PAT; echo Basic $(echo -n PAT:$PAT | base64) | cargo login --registry
+```
+
+#### [Azure CLI](#tab/azurecli/)
+
+```azurecli
+az login
+az account get-access-token --query "join(' ', ['Bearer', accessToken])" --output tsv | cargo login --registry
+```
+
+- - -
+
+
+## Next steps
+
+> [!div class="nextstepaction"]
+> [Publish Cargo packages](../get-started-cargo.md)
diff --git a/docs/artifacts/collaborate-with-packages.md b/docs/artifacts/collaborate-with-packages.md
deleted file mode 100644
index 78129418e38..00000000000
--- a/docs/artifacts/collaborate-with-packages.md
+++ /dev/null
@@ -1,78 +0,0 @@
----
-title: Source and package composition
-description: Use Azure Artifacts to facilitate collaboration
-ms.assetid: EA33E340-EC9A-4F75-A201-82CE9685662B
-ms.service: azure-devops-artifacts
-ms.date: 05/25/2023
-ms.topic: reference
-monikerRange: '<= azure-devops'
-"recommendations": "true"
----
-
-# Accelerate collaboration and Agile development with componentization
-
-[!INCLUDE [version-lt-eq-azure-devops](../includes/version-lt-eq-azure-devops.md)]
-
-Your product is successful, your organization is growing, and it's time to scale up your codebase to match this success. As you scale out past 2-3 teams working in a single codebase on a single product, you may find yourself asking questions like:
-
-- How can my teams efficiently share reusable components?
-
-- How do I enable my feature teams to iterate rapidly without stepping on other teams' work?
-
-- How do I give my teams autonomy to iterate at the pace that's right for them?
-
-These questions aren't just applicable to newly growing teams. If you're an established team with a legacy codebase, you may be asking these same questions as you're being asked to deliver more value, faster than ever. Regardless of your situation, componentization can help you build a codebase that scales to the size of your team and the speed of today's development.
-
-In this article, we'll explore how binary composition through Azure Artifacts can help you manage and share your external dependencies, your open-source software, and your isolated shared components.
-
-## Components and composition
-
-Componentization is the process of dividing and organizing your product into distinct components. Most .NET projects already have some notion of components in the form of the projects within the solution. For instance, a basic website may consist of a front-end component, a data access component, and a model/data storage component.
-
-## Source composition
-
-As your product grows, the solution and the project model can become inefficient. Changes take longer to integrate and are harder to merge, the build gets slower, and components start to grow from a single project to multiple projects. Generally, this is the point at which teams start breaking out these sets of related projects into separate solutions.
-
-Once you've outgrown a single solution, how you componentize becomes an interesting question. We started with **source composition**, where each component is referenced via a project reference in Visual Studio. Source composition is possible as long as your source lives in a single composition boundary: a single solution within a single source repository.
-
-Unfortunately, these project references start to break down when multiple solutions are involved. At this point, when solution A depends on solution B it must refer to the built binaries (i.e. DLLs) produced by solution B - this is **binary composition**.
-
-Accordingly, these binaries now need to be built and made available to solution A before it can build successfully. There are a few ways to do that:
-
-- You can check them into source control. Depending on your source control system, binaries can quickly balloon the size of your repo, slowing check-out times and general repo performance. If you start to work in branches, multiple teams can end up introducing the same binary at different versions, leading to challenging merge conflicts.
-
-- Alternatively, you can host them on a file share, although this approach comes with certain limitations. File shares lack an index for quick lookups, and they do not provide protection against overwriting a version in the future.
-
-## Package composition
-
-Packages address many of the challenges of referencing binaries. Instead of checking them into source, you can have a solution B produce its binaries as NuGet packages that another solution A can then consume. If solution A and solution B are maintained as separate components, where simultaneous changes across A and B are rare, package composition is a great way to manage the dependency of A on B. Package composition allows B to iterate on its own cadence, while A is free to get updates from B when A's schedule permits, and it allows multiple teams to iterate and update solution B without affecting solution A (or other solutions C or D).
-
-However, package composition does come with its own set of challenges. So far, we have examined a straightforward example. Scaling package composition up to the size of a large codebase (something like Windows or Bing) can cause a series of challenges:
-
-- Understanding the impact of breaking changes in a component low in the dependency graph becomes very challenging.
-
-- [Diamond dependencies](/dotnet/standard/library-guidance/dependencies#diamond-dependencies) can become a significant roadblock to agility. In a diamond dependency, components B and C both depend on a shared component A, while component D depends on both B and C. When component A introduces a new version with breaking changes, if B updates to the new version but C does not, D cannot take B's updates without introducing a dependency conflict. In this simple example, a conversation with C may be all that's needed to resolve the conflict. However, in a complex graph, diamonds can quickly become unresolvable.
-
-- When modifications need to be applied to two components that are composed using packages, the developer's iteration cycle becomes considerably slower. If Component A is updated, it necessitates rebuilding, repackaging, and republishing it. Subsequently, component B must update to the recently published version to validate the change made in component A. Employing source composition, which allows for simultaneous building of Component A and B, will consistently deliver a quicker iteration cycle for developers.
-
-## What should you use
-
-In general, we've seen large teams be most successful when they use a mixture of composition strategies. To help determine what's right for your codebase, begin by mapping out the dependency graph of your product, and start to group your components into sets of related components.
-
-For instance you might have a collection of components constituting your framework, and another set of component forming your user-facing service.
-Then, for each group of related components, ask these questions:
-
-- Can I anticipate frequent check-ins across the sets I've established for my teams?
-
-- Is a single team responsible for the entire set?
-
-- For a single set, is there a shared release cadence?
-
-In our experience, we have found that using **source composition** is most effective for related projects handled by a single team or a group of related teams. Conversely, **binary composition** proves advantageous for open-source software, external dependencies (components from distant or isolated teams), and independent shared components.
-
-## Next steps
-
-> [!div class="nextstepaction"]
-> [Publish and restore NuGet packages](/nuget/publish.md)
-> [Configure feed permissions](/feeds/feed-permissions.md)
-> [Set up upstream sources](/how-to/set-up-upstream-sources.md)
diff --git a/docs/artifacts/concepts/best-practices.md b/docs/artifacts/concepts/best-practices.md
index a01d3e98c38..44cfcbf8a88 100644
--- a/docs/artifacts/concepts/best-practices.md
+++ b/docs/artifacts/concepts/best-practices.md
@@ -1,66 +1,78 @@
---
-title: Best practices when working with Azure Artifacts
-description: Best practices when publishing and consuming packages with Azure Artifacts
+title: Azure Artifacts best practices
+description: Learn best practices for publishing, consuming, and managing packages with Azure Artifacts.
ms.service: azure-devops-artifacts
ms.topic: conceptual
-ms.date: 04/07/2023
-ms.custom: contperf-fy23, engagement-fy23
+ms.date: 03/11/2025
+ms.custom: engagement-fy23
monikerRange: '<= azure-devops'
"recommendations": "true"
---
-# Azure Artifacts: best practices
+# Azure Artifacts best practices
[!INCLUDE [version-lt-eq-azure-devops](../../includes/version-lt-eq-azure-devops.md)]
-Managing software packages can be a complex and time-consuming process, particularly when working with large-scale projects. Fortunately, Azure Artifacts provides a robust platform for package management that can help streamline the process and improve collaboration among development teams. However, to get the most out of Azure Artifacts, it's essential to follow best practices that ensure the integrity and quality of your packages. In this article, we'll cover some of the most important best practices for producing, consuming, and managing packages in Azure Artifacts. Whether you're a seasoned developer or just starting with Azure Artifacts, these tips will help you optimize your workflow and ensure the success of your projects.
+Managing software packages can be a complex and time-consuming process, particularly when working with large-scale projects. Azure Artifacts provides a reliable package management solution that streamlines workflows and enhances team collaboration.
-## Create and publish packages
+To make the most of it, following best practices is essential to maintaining package integrity and quality. This article highlights key guidelines for creating, publishing, and consuming packages in Azure Artifacts. Whether you're new to Azure Artifacts or an experienced user, these best practices help you optimize your workflow and ensure project success.
-Creating and publishing packages is a critical step in any package management workflow. In this section, we'll cover best practices for creating and publishing packages in Azure Artifacts.
+## Prerequisites
-- **Each repository should only reference one feed**:
+| **Product** | **Requirements** |
+|--------------------|----------------------|
+| **Azure DevOps** | - An Azure DevOps [organization](../../organizations/accounts/create-organization.md).
- An Azure DevOps [project](../../organizations/projects/create-project.md).
- An [Azure Artifacts feed](../start-using-azure-artifacts.md#create-a-new-feed). |
- A feed is a fundamental organizational structure for hosting packages. While you can have multiple feeds for a project, it's best to limit a project to referencing just one feed. If you want to use packages from multiple feeds, it's recommended to use [upstream sources](upstream-sources.md). This enables you to access packages from multiple feeds and public registries.
+## Best practices for package publishers
-- **Automatically publish newly created packages to your feed**:
+Following best practices helps ensure consistency, security, and a smooth user experience. Below are key recommendations when publishing packages with Azure Artifacts:
- This will update the `@local` view of your feed with the new packages. See [Feed views](views.md) to learn more about feed views and upstream sources.
+> [!NOTE]
+> You must be a **Feed Publisher (Contributor)** or higher to publish packages to a feed. See [Manage Permissions](../feeds/feed-permissions.md#permissions-table) for more details.
+
+- **Use a single feed per repository**:
+
+ A feed is an organizational construct for hosting various types of packages. While you can have multiple feeds for a project, it's best to limit a project to referencing just one feed to minimize potential conflicts. If you want to access packages from multiple feeds or public registries, it's recommended to use upstream sources. See [What are upstream sources?](upstream-sources.md) for more details.
+
+- **Automatically publish newly created packages**:
+
+ Automating the publication of new packages ensures that your latest versions are always available to your team or target consumers without manual intervention. When you publish a package, it's added to the `@local` view of your feed. See [What are feed views?](views.md) for more details.
- **Enable retention policies to automatically clean up old package versions**:
- By deleting older package versions, you can optimize client performance and free up storage space. When setting up your [retention policies](../how-to/delete-and-recover-packages.md#delete-packages-automatically-with-retention-policies) you have the flexibility to select the number of versions of a package to keep. This allows you to easily manage package versions and improve your package management workflow.
+ Over time, old package versions can accumulate, consuming unnecessary storage and slowing down queries. Enabling retention policies allows you to automatically remove older package versions while keeping a specified number of recent versions. This not only optimizes client performance but also helps manage storage costs efficiently. See [retention policies](../how-to/delete-and-recover-packages.md#delete-packages-automatically-with-retention-policies) for more details.
+
+- **Use feed views to release packages**:
-- **Promote your package to the correct view**:
+ Feed views can be used to share a subset of package versions with your consumers. For instance, to make a package available to early adopters, you can select it from your feed and promote it to the `@Prerelease` view. Once you've deemed the package to be of sufficient quality for a full release, you can promote it to the `@Release` view. Packages promoted to a view are exempt from retention policies and won't be subject to deletion. See [What are feed views?](views.md) for more details.
- To make a package available to early adopters, you can select it from your feed and promote it to the @prerelease view. Once you've deemed the package to be of sufficient quality for a full release, you can promote it to the @release view. By promoting package versions to a view, you can prevent them from being deleted by retention policies. To learn more about feed views, check out the [Feed views](views.md) article.
+- **Ensure proper access permissions for your views**:
-- **If external teams are consuming your packages, ensure that `@release` and `@prerelease` views are visible across the organizations**:
+ If your packages are consumed by external teams or across organizations, make sure that the `@Release` and `@Prerelease` views have the appropriate visibility settings. See [Feed views settings](../feeds/feed-permissions.md#feed-views-settings) for more details.
- If these views aren't visible, teams won't have access to your packages.
+## Best practices for package consumers
-## Consume packages
+This section outlines best practices for consuming packages with Azure Artifacts to ensure efficient usage:
-In this section, we'll cover best practices for consuming packages with Azure Artifacts, including configuring package sources, managing package versions, and ensuring secure and efficient package consumption.
+- **Use upstream sources for external packages**:
-- **Configure upstream sources for your feed**:
+ If you want to use packages from external feeds or public registries such as *NuGet.org* or *npmjs.com*, it's recommended to use upstream sources. See [What are upstream sources?](upstream-sources.md) and [Set up upstream sources](../how-to/set-up-upstream-sources.md) for more details.
- Adding upstream sources to your feed is the recommended approach for consuming packages from public registries like NuGet.org or npmjs.com. See [Understand upstream sources](upstream-sources.md) and [how to configure upstream sources](../how-to/set-up-upstream-sources.md) for more details.
+ > [!NOTE]
+ > You must be a **Feed and Upstream Reader (Collaborator)** or higher to save packages from upstream sources. See [Manage Permissions](../feeds/feed-permissions.md#permissions-table) for more details.
-- **Sources not in your organization but in the same AAD tenant should be added using the feed locator**:
+- **Ensure the order of sources reflects your desired package resolution strategy**:
- The syntax for the feed locator is as follows: `azure-feed:////@`
+ The feed checks upstream sources sequentially and will return the package from the first source that contains it. Be mindful of the order to ensure your feed resolves packages from the correct source. See [Order your upstream sources intentionally](upstream-sources.md#2-order-your-upstream-sources-intentionally) and [Search order](upstream-sources.md#search-order) for more details.
-- **Ensure that the order of the sources matches your desired package resolution order**:
+- **Add external sources using the feed locator**:
- The feed will sequentially check each upstream source, and return the package from the first source that has it.
+ If sources are in the same Microsoft Entra tenant but not part of your organization, you should use the feed locator. The syntax for the feed locator is as follows: `azure-feed:////@`.
-- **Place public upstreams FIRST in your resolution order**:
+## Related content
- This prevents other sources from overriding well-known packages with altered or incompatible versions.
+- [Limits on package versions and sizes](../reference/limits.md)
-## Related articles
+- [Monitor Artifacts storage consumption](../artifact-storage.md)
-- [Package sizes and count limits](../reference/limits.md)
-- [Artifacts storage consumption](../artifact-storage.md)
-- [Upstream sources overview](upstream-sources.md)
+- [What are upstream sources?](upstream-sources.md)
diff --git a/docs/artifacts/concepts/feeds.md b/docs/artifacts/concepts/feeds.md
index b427dfa85ee..972b30314e6 100644
--- a/docs/artifacts/concepts/feeds.md
+++ b/docs/artifacts/concepts/feeds.md
@@ -1,115 +1,140 @@
---
-title: What are feeds?
-description: Learn about Artifacts feeds and the difference between project-scoped and organization-scoped feeds. Learn how to create, delete, and restore feeds.
+title: What are Azure Artifacts feeds?
+description: Understand the differences between project-scoped and organization-scoped Azure Artifacts feeds. Learn the steps to create, delete, and restore feeds.
ms.assetid: 21673f53-68a3-4d44-866e-ad29435a3fde
ms.service: azure-devops-artifacts
ms.topic: conceptual
-ms.date: 04/07/2022
+ms.date: 06/03/2024
monikerRange: '<= azure-devops'
---
-# What are feeds?
+# What are Azure Artifacts feeds?
[!INCLUDE [version-lt-eq-azure-devops](../../includes/version-lt-eq-azure-devops.md)]
-Artifacts Feeds are organizational constructs that allow you to store, manage, and group your packages and control who to share it with. Feeds are not package-type dependent. You can store all the following package types in a single feed: npm, NuGet, Maven, Python, and Universal packages.
+Azure Artifacts feeds are organizational constructs that allow you to store, manage, and share your packages while controlling access. Feeds are not limited to specific package types; you can store various types, such as npm, NuGet, Maven, and Python packages, in a single feed.
## Project-scoped vs Organization-scoped feeds
-Previously, all feeds were scoped to an organization, they could be viewed and accessed in the Azure Artifacts hub from any project within an organization. With the introduction of public feeds, we also introduced **project-scoped feeds**. This type of feed can only be accessed from within the hosting project.
+Organization-scoped feeds are accessible and viewable from any project within the organization. Project-scoped feeds on the other hand, are restricted to being viewed solely within the hosting project.
-Only project-scoped feeds can be made public. You can learn more about [public feeds](#public-feeds) later in this article. See [Feeds visibility](../feeds/project-scoped-feeds.md) to understand the differences between project-scoped and organization-scoped feeds.
+It's important to note that organization-scoped feeds cannot be converted into project-scoped feeds. Furthermore, only project-scoped feeds have the capability to be designated as [public feeds](#public-feeds). For a detailed comparison between project-scoped and organization-scoped feeds, refer to [Feeds scope](../feeds/project-scoped-feeds.md).
> [!NOTE]
-> To access a feed in a different organization, a user must be given access to the project hosting that feed.
+> To access a feed in a different organization, a user must be granted access to the project hosting that feed.
-## Public feeds
+## Create a new feed
+
+::: moniker range="azure-devops"
+
+Follow the instructions below and choose the appropriate scope to create a new project-scoped or organization-scoped feed:
+
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
-Public feeds are used to share your packages publicly with anyone on the Internet. Users won't have to be a member of your organization or your enterprise. They can access the packages even if they don't have an Azure DevOps account.
+1. Select **Artifacts**, and then select **Create Feed**.
-Public feeds are **project-scoped feeds** and it will inherit the visibility settings of the hosting project.
+1. Enter a descriptive **Name** for your feed and define its **Visibility** (who can use your feed). Specify the **Scope** of your feed, and if you wish to include packages from public sources, mark the **Upstream sources** checkbox.
+
+1. Select **Create** when you're done.
+
+ :::image type="content" source="../media/create-new-feed-azure-devops.png" alt-text="A screenshot that shows how to create a new feed in Azure DevOps Services.":::
+
+::: moniker-end
-There some important things to note regarding public feeds:
+::: moniker range="azure-devops-2022 || azure-devops-2020"
-* Public feeds can only be created inside of public projects.
-* Public feeds aren't intended as a replacement for existing package management platforms (NuGet.org, npmjs.com, etc.).
-* Public users cannot currently download universal packages. All other package types are supported for public access.
+Follow the instructions below and choose the appropriate scope to create a new project-scoped or organization-scoped feed:
+
+1. Sign in to your Azure DevOps server, and then navigate to your project.
+
+1. Select **Artifacts**, and then select **Create Feed**.
+
+1. Enter a descriptive **Name** for your feed and define its **Visibility** (who can use your feed). Specify the **Scope** of your feed, and if you wish to include packages from public sources, mark the **Upstream sources** checkbox.
+
+1. Select **Create** when you're done.
+
+ :::image type="content" source="../media/create-new-feed-server-2022.png" alt-text="A screenshot that shows how to create a new feed in Azure DevOps Server 2022 and Server 2020.":::
+
+::: moniker-end
> [!NOTE]
-> All feed views in a public project are accessible to everyone on the internet.
+> Public feeds are only available in Azure DevOps Services.
-## Create public feeds
+::: moniker range="azure-devops"
-Public feeds are project-scoped feeds in a public project.
+## Public feeds
-1. Select **Artifacts**.
+Public feeds allow you to share your packages publicly with anyone on the internet. Users do not need to be members of your organization, nor do they need to log in to the Azure DevOps portal to access the packages.
- :::image type="content" source="../media/goto-feed-hub-azure-devops-newnav.png" alt-text="Screenshot showing Artifacts in the Azure DevOps dashboard.":::
+Public feeds are **project-scoped** and inherit the visibility settings of the hosting project. Here are some important points to note about public feeds:
-1. Select **Create Feed**.
+- Public feeds can only be created within public projects.
+- Public feeds are not intended to replace existing package management platforms (such as NuGet.org, npmjs.com, etc.).
+- Public users currently cannot download universal packages, but all other package types are supported for public access.
- :::image type="content" source="../media/new-feed-button-azure-devops-newnav.png" alt-text="Screenshot showing the create feed button.":::
+> [!NOTE]
+> All feed views in a public feed are accessible to everyone on the internet.
-1. Give your feed a **Name**, and then select **Project** for your feed's scope.
+## Create a public feed
- :::image type="content" source="../media/new-public-feed.png" alt-text="Screenshot showing how to create a new public feed.":::
+Public feeds are project-scoped feeds in a public project. Follow the instructions below to create a new public feed:
-1. Select **Create** when you are done.
+1. Navigate to your Azure DevOps project. Make sure that your project is **Public** in order to create a public feed. Once there, select **Artifacts** > **Create Feed**.
-::: moniker range=">= azure-devops-2019"
+ :::image type="content" source="../media/new-feed-button-azure-devops-newnav.png" alt-text="A screenshot showing the create feed button.":::
-## Delete a feed
+1. Enter a **Name** for your feed, and then select **Project** for the feed's scope. Select **Create** when you're done.
-1. Select **Artifacts**, and then select your feed from the dropdown menu.
+ :::image type="content" source="../media/new-public-feed.png" alt-text="A screenshot that shows how to create a new public feed.":::
-1. Select the gear icon  to navigate to your feed's settings.
+::: moniker-end
- :::image type="content" source="../media/feed-settings.png" alt-text="A screenshot showing how to access the feed's settings":::
+## Delete a feed
-1. Select **Delete feed**.
+> [!NOTE]
+> You must be a **Feed Owner** to delete a feed.
-1. Select **Delete** when you are ready.
+1. Navigate to your Azure DevOps project, select **Artifacts**, and then select your feed from the dropdown menu.
- :::image type="content" source="media/delete-warning.png" alt-text="A screenshot showing a warning message prior to deleting a feed":::
+1. Select the gear icon  to navigate to your feed's settings.
-## Restore deleted feeds
+1. Select **Delete feed**, and then select **Delete** once more to confirm.
-If you accidentally delete a feed, Azure Artifacts provides a 30 days window to recover your feed to its original state. After the 30 days, the feed will be deleted permanently. During the recovery window, the name of the feed remains reserved, packages are unavailable for download, and write access is suspended for that feed.
+ :::image type="content" source="media/delete-warning.png" alt-text="A screenshot displaying the warning message that appears before deleting a feed.":::
-You can view the feeds that are pending permanent deletion in the feed picker dropdown list under the **Deleted Feeds** tab.
+## Restore deleted feeds
-1. Select **Artifacts**.
+If you accidentally delete a feed, Azure Artifacts offers a 30-days window to restore it to its original state. After this period, the feed will be permanently deleted. During the recovery window, the feed's name remains reserved, packages are unavailable for download, and write access is suspended.
-1. Select the feed picker dropdown menu, and then select **Deleted Feeds**
+To access feeds pending permanent deletion, navigate to the feed picker dropdown menu and select the **Deleted Feeds** tab.
- > [!div class="mx-imgBorder"]
- > 
+1. Navigate to your Azure DevOps project, and then select **Artifacts**.
-1. Select the feed you want to restore, and then select **Feed Settings**.
+1. Select the feed picker dropdown menu, and then select the **Deleted Feeds** tab.
- > [!div class="mx-imgBorder"]
- > 
+ :::image type="content" source="media/deleted-feeds.png" alt-text="A screenshot that shows how to access feeds pending permanent deletion.":::
-1. Select **Restore Feed**.
+1. Select the feed you want to restore, and then select **Feed Settings**. Select **Restore Feed** when you're ready.
-## Permanently deleting a feed
+ :::image type="content" source="media/feed-settings-button.png" alt-text="A screenshot displaying the feed settings button for a feed pending permanent deletion.":::
-A feed pending deletion will still use storage space. If you want to permanently delete your feed before the 30 days period is up, you can do this as follows:
+## Permanently delete a feed
-1. Select **Artifacts**.
+A feed pending deletion will continue to use storage space. You must be a feed owner to permentantly delete a feed. To delete your feed before the 30-day period ends, follow these steps:
-1. Select the feed picker dropdown menu, and then select **Deleted Feeds**
+1. Navigate to your Azure DevOps project, and then select **Artifacts**.
- > [!div class="mx-imgBorder"]
- > 
+1. Select the feed picker dropdown menu, and then select the **Deleted Feeds** tab.
1. Select the feed you want to restore, and then select **Feed Settings**.
- > [!div class="mx-imgBorder"]
- > 
-
1. Select **Permanently Delete Feed**, and then select **Delete**.
-Once the feed is permanently deleted, users won't be able to view or restore its packages. The feed name will be available for reuse 15 minutes after the deletion.
+> [!NOTE]
+> Once a feed is permanently deleted, users will no longer have access to view or restore its packages. The feed's name will become available for reuse 15 minutes after deletion.
-::: moniker-end
+## Related articles
+
+- [Monitor Artifacts storage consumption](../artifact-storage.md)
+- [Set up upstream sources](../how-to/set-up-upstream-sources.md)
+- [Use upstream sources in a public feed](../how-to/public-feeds-upstream-sources.md)
\ No newline at end of file
diff --git a/docs/artifacts/concepts/media/allow-external-sourced-versions.png b/docs/artifacts/concepts/media/allow-external-sourced-versions.png
deleted file mode 100644
index f8c218188dd..00000000000
Binary files a/docs/artifacts/concepts/media/allow-external-sourced-versions.png and /dev/null differ
diff --git a/docs/artifacts/concepts/media/allow-external-versions.png b/docs/artifacts/concepts/media/allow-external-versions.png
index aaa8b32c0d8..5df06bbfbd1 100644
Binary files a/docs/artifacts/concepts/media/allow-external-versions.png and b/docs/artifacts/concepts/media/allow-external-versions.png differ
diff --git a/docs/artifacts/concepts/media/enable-external-versions.png b/docs/artifacts/concepts/media/enable-external-versions.png
new file mode 100644
index 00000000000..98ee34413e0
Binary files /dev/null and b/docs/artifacts/concepts/media/enable-external-versions.png differ
diff --git a/docs/artifacts/concepts/media/external-versions.png b/docs/artifacts/concepts/media/external-versions.png
deleted file mode 100644
index fc9124ac223..00000000000
Binary files a/docs/artifacts/concepts/media/external-versions.png and /dev/null differ
diff --git a/docs/artifacts/concepts/media/include-upstream-sources.png b/docs/artifacts/concepts/media/include-upstream-sources.png
deleted file mode 100644
index 8e78afab925..00000000000
Binary files a/docs/artifacts/concepts/media/include-upstream-sources.png and /dev/null differ
diff --git a/docs/artifacts/concepts/media/last-sync-upstreams-details.png b/docs/artifacts/concepts/media/last-sync-upstreams-details.png
new file mode 100644
index 00000000000..880b0003e25
Binary files /dev/null and b/docs/artifacts/concepts/media/last-sync-upstreams-details.png differ
diff --git a/docs/artifacts/concepts/media/last-sync-upstreams.png b/docs/artifacts/concepts/media/last-sync-upstreams.png
new file mode 100644
index 00000000000..a0bd8aaff90
Binary files /dev/null and b/docs/artifacts/concepts/media/last-sync-upstreams.png differ
diff --git a/docs/artifacts/concepts/media/upstreams-last-sync.png b/docs/artifacts/concepts/media/upstreams-last-sync.png
deleted file mode 100644
index 5178b79c8e6..00000000000
Binary files a/docs/artifacts/concepts/media/upstreams-last-sync.png and /dev/null differ
diff --git a/docs/artifacts/concepts/package-graph.md b/docs/artifacts/concepts/package-graph.md
index d8a15662e17..286a6f461a7 100644
--- a/docs/artifacts/concepts/package-graph.md
+++ b/docs/artifacts/concepts/package-graph.md
@@ -1,53 +1,53 @@
---
-title: Constructing a complete package graph
+title: Construct a complete package graph
description: Package graphs in Azure Artifacts
ms.assetid: 3f273ac7-3c2e-47d0-b333-3ca44c19bbf4
ms.service: azure-devops-artifacts
ms.topic: quickstart
ms.reviewer: amullans
monikerRange: '<= azure-devops'
-ms.date: 2/6/2018
+ms.date: 07/21/2023
---
-# Constructing a complete package graph
+# Package graphs in Azure Artifacts
[!INCLUDE [version-lt-eq-azure-devops](../../includes/version-lt-eq-azure-devops.md)]
-> [!NOTE]
-> Check your [package type](../start-using-azure-artifacts.md#feature-availability) to ensure compatibility with Azure DevOps Services or on-premises.
+When releasing a package, it's crucial to ensure that all dependencies of that package are available in your feed by consuming them from an upstream source. Once you consume a package from an upstream source, a copy is saved to your feed. This ensures that even if the upstream source becomes inaccessible, your copy will continue to be available to both you and your feed consumers.
-When you release a package, it's important to ensure that all the package dependencies are also available. Azure Artifacts recommend using [upstream sources](upstream-sources.md) to publish and consume package dependencies. When a package is consumed from an upstream source for the first time, a copy of that package is saved in the feed, so even if the upstream source goes down, your copy will remain available to you and your customers.
+## How upstreams construct the set of available packages
-## How upstream sources construct the set of available packages
+As Azure Artifacts feeds can have other feeds as upstreams, there's a potential for creating cycles of upstream sources, where feed *A* upstreams to feed *B*, which upstreams to feed *C*, and eventually, feed *C* upstreams back to feed *A*. Such a cycle, if not managed properly, could lead to issues with package requests, creating an infinite loop where a user requests a package from feed *A*, then *A* requests from *B*, then *B* requests from *C*, and finally, *C* requests back to *A*, forming a loop.
-Because Azure Artifacts feeds can have other feeds as upstream sources, it seems possible on the surface to have a cycle of upstream sources, where feed A upstreams to feed B, which upstreams to feed C, which upstreams back to feed A. Left unchecked, such a cycle could break package requests by creating an infinite loop where a user asks A for a package, then A asks B, then B asks C, then C asks A again, etc. Upstream sources are designed to prevent this failure.
+Upstream sources are designed to prevent such situations. When a feed looks up a package from its upstream sources, it receives the packages in the view configured for that upstream source. This means that querying feed A doesn't trigger a transitive query to feed *C* (A -> B -> C) because views are read-only.
+As a result, feed *A* will have access to any packages from *C* that have been previously saved into *B* by a user, but not the full set of packages available in *C*.
-When a feed consults its upstream sources for a package, Azure Artifacts will return the packages in the view configured for that upstream source. Thus, a query to feed A does not actually result in a transitive query to feed C (A -> B -> C), because views are read-only. A has access to any packages from C that a user of B has previously saved into B, but not the full set of packages available in C.
+This places the responsibility on feed *B* to ensure that its local packages represent a complete dependency graph. By doing so, users who consume B's package via an upstream source from another feed can successfully resolve the graph and install their desired *B* package without encountering issues.
-Thus, the onus falls to B to ensure that its local packages represent a complete dependency graph, so that users who consume B's package via an upstream source from another feed are able to successfully resolve the graph and install their desired B package.
+## Example: construct the set of available packages
-## Example: constructing the set of available packages
+Let's consider three feeds: Fabrikam, Contoso, and AdventureWorks. In this illustration, we'll examine the available packages to the Fabrikam feed as we introduce upstream sources.
-Assume three feeds, Fabrikam, Contoso, and AdventureWorks. In this example, we'll look at the packages available to the Fabrikam feed as we add upstream sources.
+Initially, Fabrikam has no upstream sources, allowing users connected to Fabrikam to only install versions 1.0.0 and 2.0.0 of the Widgets package. Similarly, Contoso has no upstream sources, restricting users connected to Contoso to only install versions 1.0.0 and 3.0.0 of the Gizmos package. The same applies to the AdventureWorks feed, where connected users can only install versions 1.0.0 and 2.0.0 of the Gadgets package or version 1.0.0 of the Things package.
-At first, Fabrikam has no upstream sources, and users connected to Fabrikam can only install versions 1.0.0 and 2.0.0 of the Widgets package. Likewise, Contoso has no upstream sources, and users connected to Contoso can only install versions 1.0.0 and 3.0.0 of the Gizmos package. Ditto for the AdventureWorks feed, where connected users can only install versions 1.0.0 and 2.0.0 of the Gadgets package or version 1.0.0 of the Things package.
+:::image type="content" source="media/upstream-source-graph-1.svg" alt-text="An illustration showing three different feeds with no upstream sources.":::
-:::image type="content" source="media/upstream-source-graph-1.svg" alt-text="three different feeds with no upstream sources":::
+Now, let's explore the scenario where Contoso adds AdventureWorks as an upstream source. When a user is connected to Contoso, they gain access to a broader range of packages. They can install any version of Gizmos, Gadgets, or Things. For example, if the user installs Gadgets@2.0.0, this specific package-version is saved to Contoso with a link back to AdventureWorks.
-Next, consider what happens if Contoso adds AdventureWorks as an upstream source. A user connected to Contoso can install any version of Gizmos, any version of Gadgets, or any version of Things. If Gadgets@2.0.0 is installed, that package-version is saved to Contoso (with a link back to AdventureWorks).
+:::image type="content" source="media/upstream-source-graph-2.svg" alt-text="An illustration of Contoso adding AdventureWorks as an upstream source.":::
-:::image type="content" source="media/upstream-source-graph-2.svg" alt-text="Contoso adds AdventureWorks as an upstream source":::
+Now, let's consider a situation where the Fabrikam feed adds Contoso as an upstream source. A user connected to Fabrikam can install any version of Widgets, any version of Gizmos, but **ONLY SAVED** versions of Gadgets (2.0.0).
-Now, let's have the Fabrikam feed add Contoso as an upstream source. A user connected to Fabrikam can install any version of Widgets, any version of Gizmos, but **only saved** versions (2.0.0) of Gadgets.
+:::image type="content" source="media/upstream-source-graph-3.svg" alt-text="An illustration of Fabrikam adding Contoso as an upstream source.":::
-:::image type="content" source="media/upstream-source-graph-3.svg" alt-text="Fabrikam adds Contoso as an upstream source":::
+The user won't be able to install version 1.0.0 of Gadgets or any version of Things, because those package versions haven't been saved to Contoso by a Contoso user.
-The user will not be able to install version 1.0.0 of Gadgets or any version of Things, because those package versions haven't been saved to Contoso by a Contoso user.
-
-:::image type="content" source="media/upstream-source-graph-4.svg" alt-text="Fabrikam users unable to install Gadgets 1.0.0 and all versions of Things":::
+:::image type="content" source="media/upstream-source-graph-4.svg" alt-text="An illustration of packages available to Fabrikam users.":::
## Related articles
-- [Key concepts](../artifacts-key-concepts.md)
-- [Use the .artifactignore file](../reference/artifactignore.md)
-- [componentization and composition](../collaborate-with-packages.md)
+- [Upstream sources](upstream-sources.md)
+
+- [Manage permissions](../feeds/feed-permissions.md)
+
+- [Manage dependencies with upstream sources](../tutorials/protect-oss-packages-with-upstream-sources.md)
diff --git a/docs/artifacts/concepts/symbols.md b/docs/artifacts/concepts/symbols.md
index 87eb2eaefac..b5694c7f81b 100644
--- a/docs/artifacts/concepts/symbols.md
+++ b/docs/artifacts/concepts/symbols.md
@@ -2,7 +2,6 @@
title: Symbol files
description: Working with symbols
ms.service: azure-devops-artifacts
-ms.custom: contperf-fy22q1
ms.topic: conceptual
ms.assetid: 6D0F0D86-2ADC-4902-AFA7-98F7EF78EE07
ms.date: 07/15/2021
diff --git a/docs/artifacts/concepts/upstream-behavior.md b/docs/artifacts/concepts/upstream-behavior.md
index f08a0c1dae1..2cdbf059b47 100644
--- a/docs/artifacts/concepts/upstream-behavior.md
+++ b/docs/artifacts/concepts/upstream-behavior.md
@@ -1,95 +1,104 @@
---
-title: Configure upstream behavior
-description: How to allow external package versions.
+title: Safeguard against malicious public packages
+description: Learn how to control access to public registries and protect your environment from malicious public packages.
ms.service: azure-devops-artifacts
ms.topic: conceptual
-ms.date: 05/26/2022
+ms.date: 08/22/2023
ms.author: rabououn
author: ramiMSFT
-monikerRange: '<= azure-devops'
+monikerRange: 'azure-devops'
---
-# Configure upstream behavior
+# Safeguard against malicious public packages
[!INCLUDE [version-lt-eq-azure-devops](../../includes/version-lt-eq-azure-devops.md)]
-With upstream sources, developers can use a single feed to publish and consume packages from Artifact feeds and public registries such as NuGet.org or npmjs.com. To set up upstream sources for your feed, check the box to **include packages from common public sources**. This will allow your feed to use packages from the common public registries.
+With Azure Artifacts upstream sources, developers gain the convenience of using a unified feed to both publish and consume packages from Artifact feeds and popular public registries like NuGet.org or npmjs.com.
-:::image type="content" source="media/include-upstream-sources.png" alt-text="Include packages from common public sources checkbox":::
+## Allow externally sourced versions
-Previously, Artifact feeds combined a list of available package versions from the feed and all the upstream sources.
+This feature enables developers to control whether they want to consume package versions from public registries such as NuGet.org or npmjs.com.
-:::image type="content" source="media/previous-behavior.svg" alt-text="Previous upstream sources behavior":::
+Once the **Allow External Versions** toggle is enabled for a specific package, versions from the public registry become available for download. By default, this option is disabled, adding an extra layer of security by preventing exposure to potentially malicious packages from public registries. You must be a **Feed Owner** to enable the *allow externally sourced versions* feature.
-Upstream behavior is a feature that enables developers to choose if they want to consume externally sourced package versions. Upstream behavior dictates which packages will be made available from the public registries for individual packages.
+> [!NOTE]
+> Changing this setting does not affect package versions already saved to the feed. Those versions will remain accessible regardless of this setting.
-When the upstream behavior is enabled, when a package is published to your Azure Artifacts feed, any version from the public registry will be blocked and not made available for download.
+## Applicable scenarios
-This approach provides another layer of security by blocking the exposure to malicious packages that may infiltrate the public registries.
+The following section outlines common scenarios where external versions (packages from public registries) are either blocked or allowed from being saved to the feed. In the rest of this article, we refer to packages from public registries as public packages and packages in an Azure Artifacts feed as private packages.
-Users will still be able to toggle off the upstream behavior setting and consume packages from the public registries if they choose to do so.
+### Scenario 1: public versions are blocked
-> [!NOTE]
-> The new behavior won't affect any package versions that are already in use. Those are stored in the feed's `@local` view.
+* [Private package version made public](#private-package-version-made-public)
+* [Having both private and public packages](#having-both-private-and-public-packages)
-## Applicable scenarios
+#### Private package version made public
+
+In this scenario, a team has a private package that was made public. The external versions setting in this case will cause the feed to block consumption of any new versions with that package name from a public source.
+
+:::image type="content" source="media\internal-to-public.svg" alt-text="An illustration showing an internal package version made public.":::
+
+#### Having both private and public packages
-The next section shows a few common scenarios where the upstream behavior is triggered to block externally sourced package versions along with few other cases where no blockage to the public packages is needed.
+In this scenario, if a team uses a combination of private and public packages, disallowing externally sourced packages blocks any new package versions from the public registry.
-## Public versions will be blocked
+:::image type="content" source="media\private-and-public-packages.svg" alt-text="An illustration showing available private and public packages.":::
-- **Private package version made public**: in this scenario, a team has a private package that was made public. The upstream behavior in this case will be triggered to block any new public versions (untrusted packages).
+### Scenario 2: public versions won't be blocked
- :::image type="content" source="media\internal-to-public.svg" alt-text="Internal package version made public":::
+* [All packages are private](#all-packages-are-private)
+* [All packages are public](#all-packages-are-public)
+* [Public package made private](#public-package-made-private)
-- **Having both private and public packages**: in this scenario, if a team already has both private and public packages, enabling the upstream behavior will result in blocking any new package versions from the public registry.
+#### All packages are private*
- :::image type="content" source="media\private-and-public-packages.svg" alt-text="both private and public packages":::
+If all existing packages are private, and the team has no plans to use any public packages, the external versions setting has no effect on the team's workflow in this scenario.
-## Public versions will not be blocked
+:::image type="content" source="media\only-private-packages.svg" alt-text="An illustration showing feed with only private packages.":::
-- **All packages are private**: if all existing packages are private and the team won't be consuming any public packages, the new upstream behavior will have no effect on the team's workflow in this scenario.
+#### All packages are public
- :::image type="content" source="media\only-private-packages.svg" alt-text="private packages only":::
+In this scenario, if the team exclusively consumes public packages, whether from the public registry or other open-source repositories, the setting doesn't affect their workflow in any way.
-- **All packages are public**: if all the packages consumed are public, whether it's from the public registry or any other open-source repositories, the new upstream behavior will have no effect on the team's workflow in this scenario.
+:::image type="content" source="media\public-packages-only.svg" alt-text="An illustration showing feed with only public packages.":::
- :::image type="content" source="media\public-packages-only.svg" alt-text="public packages only":::
+#### Public package made private
-- **Public package made private**: if a public package is switched to a private package, the new upstream behavior will have no effect on the team's workflow in this scenario.
+In this situation, when a public package is converted to a private package, the external versions setting doesn't affect the team's workflow in any way.
- :::image type="content" source="media\public-to-internal.svg" alt-text="switched from public to private":::
+:::image type="content" source="media\public-to-internal.svg" alt-text="An illustration showing a package converted from public to private.":::
## Allow external versions
> [!NOTE]
-> You must be a feed **Owner** or a feed **Administrator** to allow externally sourced versions. See [Feed permissions](../feeds/feed-permissions.md) for more details.
+> You must be a **Feed Owner** to allow externally sourced versions. For more information, see [Feed permissions](../feeds/feed-permissions.md).
-1. Select **Artifacts**, and then select your feed.
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
+
+1. Select **Artifacts**, and then select your feed from the dropdown menu.
1. Select your package, and then select the ellipsis button for more options. Select **Allow externally-sourced versions**.
- :::image type="content" source="media\external-versions.png" alt-text="A screenshot showing how to set up external versions.":::
+ :::image type="content" source="media\allow-external-versions.png" alt-text="A screenshot showing how to allow externally sourced versions.":::
1. Select the toggle button to allow external versions. Select **Close** when you're done.
- :::image type="content" source="media\allow-external-versions.png" alt-text="A screenshot showing how to allow external versions.":::
+ :::image type="content" source="media\enable-external-versions.png" alt-text="A screenshot showing how to enable external versions.":::
## Allow external versions using the REST API
-Aside from using the feed's user interface, you can also configure the upstream behavior using the Azure DevOps Services REST API. Select the appropriate tab and find the links to the REST API docs.
-
#### [NuGet](#tab/nuget/)
-- [Get upstreaming behavior](/rest/api/azure/devops/artifactspackagetypes/nuget/get-upstreaming-behavior)
- [Set upstreaming behavior](/rest/api/azure/devops/artifactspackagetypes/nuget/set-upstreaming-behavior)
+- [Get upstreaming behavior](/rest/api/azure/devops/artifactspackagetypes/nuget/get-upstreaming-behavior)
#### [npm](#tab/npm/)
-- [Get upstreaming behavior](/rest/api/azure/devops/artifactspackagetypes/npm/get-package-upstreaming-behavior)
-- [Get scoped package upstreaming behavior](/rest/api/azure/devops/artifactspackagetypes/npm/get-scoped-package-upstreaming-behavior)
- [Set upstreaming behavior](/rest/api/azure/devops/artifactspackagetypes/npm/set-upstreaming-behavior)
-- [Set scoped package upstreaming behavior](/rest/api/azure/devops/artifactspackagetypes/npm/set-scoped-upstreaming-behavior)
+- [Set scoped upstreaming behavior](/rest/api/azure/devops/artifactspackagetypes/npm/set-scoped-upstreaming-behavior)
+- [Get package upstreaming behavior](/rest/api/azure/devops/artifactspackagetypes/npm/get-package-upstreaming-behavior)
+- [Get scoped package upstreaming behavior](/rest/api/azure/devops/artifactspackagetypes/npm/get-scoped-package-upstreaming-behavior)
#### [Python](#tab/python/)
@@ -148,7 +157,7 @@ Run the following command to retrieve the upstream behavior state of your packag
#### [Set upstreaming behavior](#tab/set/)
-Run the following commands to allow externally sourced versions for your package. This will set `versionsFromExternalUpstreams` to `AllowExternalVersions`, and will use the `$url` and `$headers` variables to query the REST API.
+Run the following commands to allow externally sourced versions for your package. This sets `versionsFromExternalUpstreams` to `AllowExternalVersions`, and uses the `$url` and `$headers` variables to query the REST API.
```PowerShell
$body = '{"versionsFromExternalUpstreams": "AllowExternalVersions"}'
@@ -157,7 +166,7 @@ Invoke-RestMethod -Uri $url -Headers $headers -Body $body -Method Patch -Content
```
> [!NOTE]
-> In some cases, setting up the upstream behavior can take time to propagate across the service. If your package is not available after updating the settings, please allow up to 3 hours for the new settings to take effect.
+> Changes to upstream behavior may take time to propagate across the service. If your package is not available after updating the settings, allow up to 3 hours for the changes to take effect.
#### [Clear upstreaming behavior](#tab/clear/)
@@ -174,7 +183,5 @@ Invoke-RestMethod -Uri $url -Headers $headers -Body $body -Method Patch -Content
## Related articles
- [Understand upstream sources](upstream-sources.md)
-- [Set up upstream sources](../how-to/set-up-upstream-sources.md)
- [Manage dependencies with upstream sources](../tutorials/protect-oss-packages-with-upstream-sources.md)
-- [Feeds permissions](../feeds/feed-permissions.md)
- [Best practices](best-practices.md)
diff --git a/docs/artifacts/concepts/upstream-sources.md b/docs/artifacts/concepts/upstream-sources.md
index c45d65ed316..9f4c41d8385 100644
--- a/docs/artifacts/concepts/upstream-sources.md
+++ b/docs/artifacts/concepts/upstream-sources.md
@@ -1,45 +1,50 @@
---
-title: Upstream sources overview
-description: Understand upstream sources
+title: What are upstream sources?
+description: Understand Azure Artifacts upstream sources
ms.assetid: 7cb70122-7c5b-46c1-b07e-1382cfc7d62b
ms.service: azure-devops-artifacts
-ms.topic: conceptual
-ms.date: 02/16/2022
+ms.topic: overview
+ms.date: 03/05/2025
monikerRange: '<= azure-devops'
"recommendations": "true"
---
-# Upstream sources
+# What are upstream sources?
[!INCLUDE [version-lt-eq-azure-devops](../../includes/version-lt-eq-azure-devops.md)]
-Using upstream sources, you can conveniently store packages from various sources in a single feed - including those that you publish, as well as those you consume from other feeds and public registries such as NuGet.org, npmjs.com, Maven Central, and PyPI. Once upstream sources enabled, a copy of any package installed from upstream will be automatically saved to your feed
+Azure Artifacts upstream sources enable developers to conveniently store packages from various sources in a single feed, including those you publish and those installed from external feeds or public registries like NuGet.org, npmjs.com. Once upstream sources are enabled, any package installed from an upstream source is automatically saved to your feed.
-> [!NOTE]
-> You must be a **Collaborator** or higher to install packages from upstream sources.
+[!INCLUDE [save-requires-collaborator](../includes/save-requires-collaborator.md)]
-## Advantages
+## Why use upstream sources?
-Upstream sources enable you to manage all of your product's dependencies in a single feed. Publishing all your packages to a single feed has a few benefits:
+Enabling upstream sources provides several benefits for managing your product’s dependencies within a single feed:
-- **Simplicity:** your config file such as NuGet.config, npmrc, or settings.xml will contain only one feed so it less prone to mistakes and bugs.
-- **Determinism:** your feed resolves package requests in order, so rebuilding your code will be more consistent.
-- **Provenance:** your feed knows the provenance of the packages it saved from upstream sources, so you can verify that you're using the original package and not a copy or malicious package.
-- **Peace of mind:** a copy is saved to your feed for any package installed from upstream sources. So if the upstream source is disabled, removed, or undergoing maintenance, you can still continue to develop and build because you have a copy of that package in your feed.
+- **Simplicity**: Storing all your packages in a single feed simplifies your configuration files like NuGet.config, npmrc, or settings.xml. With just one feed in your config file, you reduce the chances of errors and streamline your setup.
-## Best practices - package consumers
+- **Consistent Builds**: Your feed resolves package requests in a defined order, ensuring more predictable and reliable builds.
-To take full advantage of the benefits of upstream sources as a package consumer, follow these best practices:
+- **Package Integrity**: Your feed retains metadata about packages saved from upstream sources, allowing you to verify their authenticity and ensure you're using the original versions, not copies or potentially malicious versions.
+
+- **Reliability**: Packages installed from upstream sources are automatically saved to your feed. This ensures continued access even if the upstream source becomes unavailable due to maintenance or other issues so you can continue developing and building with confidence.
+
+## Best practices for package consumers
-#### Use a single feed in your config file
+To take full advantage of the benefits of upstream sources as a package consumer, follow these best practices:
-In order for your feed to provide [deterministic restore](#search-order), it's important to ensure that your configuration file such as nuget.config or .npmrc references only one feed with the upstream sources enabled.
+#### 1. Use a single feed in your config file
-Example:
+In order for your feed to provide a [deterministic restore](#search-order), make sure that your configuration file (such as nuget.config or npmrc) references only one feed with upstream sources enabled.
-- **nuget.config**
+- **Examples**:
+ ```.npmrc
+ registry=https://pkgs.dev.azure.com/fabrikam/_packaging/FabrikamFiber/npm/registry/
+ always-auth=true
```
+
+ ```nuget.config
@@ -47,64 +52,53 @@ Example:
```
> [!NOTE]
- > NuGet composes several [config files](/nuget/consume-packages/configuring-nuget-behavior) to determine the full set of options to use. Using `` allow us to ignore all other package sources defined in higher-level configuration files.
-
-- **.npmrc**:
-
- ```
- registry=https://pkgs.dev.azure.com/fabrikam/_packaging/FabrikamFiber/npm/registry/
- always-auth=true
- ```
-
-#### Order your upstream sources intentionally
-
-If you're only using public registries such as nuget.org or npmjs.com, the order of your upstream sources is irrelevant. Requests to the feed follow the [search order](#search-order).
+ > NuGet compiles several [configuration files](/nuget/consume-packages/configuring-nuget-behavior) to determine the complete set of options to apply. Using `` ensures that all other package sources specified in higher-level configuration files are ignored.
-If you're using multiple sources such as a mixture of feeds and public registries, then each upstream is searched in the order it's listed in the feed's configuration settings. In this case, we recommend placing the public registries first in the list of upstream sources.
+#### 2. Order your upstream sources intentionally
-In rare cases, some organizations choose to modify OSS packages to fix security issues, to add functionality, or to satisfy requirements that the package is built from scratch internally, rather than consumed directly from the public repository.
-If your organization follows this pattern, place the upstream source that contains these modified OSS packages before the public package managers to ensure you use your organization's modified versions.
+If you’re only using public registries like NuGet.org or npmjs.com, the order of your upstream sources doesn’t matter. Requests to the feed follow the sequence outlined in the [search order](#search-order) section.
-#### Use the suggested default view
+However, when you're managing multiple sources, such as a combination of feeds and public registries, each upstream source is searched in the order defined in the feed’s configuration settings. In this case, we recommend placing the public registries first in the list of upstream sources.
-When you add a remote feed as an upstream source, you must select its feed's view. This enables the upstream sources to construct a set of available packages. See [complete package graphs](package-graph.md) for more details.
+In some unique scenarios, some organizations modify open-source software (OSS) packages to address security concerns, enhance functionality, or meet specific internal requirements that require rebuilding the package internally rather than obtaining it directly from a public repository.
+If your organization follows this practice, place the upstream source containing these customized OSS packages before other public registries. This ensures your customized versions are used instead of public ones.
-## Best practices: feed owners/package publishers
+## Best practices for feed owners and package publishers
-To make sure your feed is easily configured as an upstream source, consider applying the following best practices:
+To ensure your feed can be easily configured as an upstream source, follow these best practices:
-#### Use the default view
+#### 1. Use the default view
-The `@local` view is the default view for all newly created feeds. It contains all the packages published to your feed or saved from upstream sources.
+The default view for all newly created feeds is `@Local`, which contains all the packages published to your feed as well as packages saved from upstream sources.
-If you want to use views to release new package versions, you can promote your package to a view such as `@release` and make it available to your consumers.
+If you want to use other views such as a view for newly released package versions, you can promote your packages to the `@Release` view and then make that view available to your target consumers. See [Feed views](views.md) for more details.
-#### Construct a package graph
+#### 2. Construct a package graph
-To construct a package graph, simply connect to the feed's default view and install the package you wish to share. When the package is installed correctly in the default view, users who want to consume it will be able to resolve the package graph and install the desired package. Packages from upstream sources are displayed based on the configured view for the corresponding upstream source.
+To construct a package graph, simply connect to the feed's default view and install the package you want to share. Once a package is saved to the default view, users who want to consume it will be able to resolve the package graph and install the desired version. Packages from upstream sources are displayed based on the configured view for the corresponding upstream source. See [How upstreams construct the set of available packages](package-graph.md#how-upstreams-construct-the-set-of-available-packages) for more details.
## Search order
-For public package managers that support multiple feeds (NuGet and Maven), the order in which feeds are queried is sometimes unclear or nondeterministic. For example in NuGet, parallel queries are made to all the feeds in the config file, and the responses are processed first-In, first-out FIFO.
+For public package managers that support multiple feeds, such as NuGet and Maven, the order in which feeds are queried can sometimes be unclear or nondeterministic. For example, NuGet sends parallel queries to all the feeds in the configuration file and processes responses in a first-in, first-out (FIFO) manner, which can lead to inconsistent results.
-Upstream sources prevent this nondeterministic behavior by searching the feed and its upstream sources using the following order:
+Upstream sources eliminate this uncertainty by enforcing a structured search order, by searching the feed and its upstream sources in the following order:
-1. Packages pushed to the feed.
+1. Packages that have been published directly to the feed.
-1. Packages saved from an upstream source.
+1. Packages that have been saved from an upstream source.
-1. Packages available from upstream sources: each upstream is searched in the order it's listed in the feed's configuration
-
-To take full advantage of the fast lookup feature, we recommend that you only include one feed in your config file.
+1. Packages available from upstream sources. Each upstream source is searched in the order it's listed in the feed's configuration.
> [!NOTE]
-> Searching for packages in upstreams with NuGet Package Explorer is not supported.
+> Azure Artifacts does not support searching for packages in upstream sources using the NuGet Package Explorer in Visual Studio.
## Save packages from upstream sources
-When you enable upstream sources for your feed, packages installed from upstream sources will be automatically saved to your feed. These packages could be installed directly from the upstream as follows `npm install express` or they could be installed as part of a dependency resolution (installing `express` would also save dependencies like `accepts`).
+When an upstream source is enabled on your feed, Azure Artifacts will automatically save a copy of any package installed by a collaborator or higher from upstream.
+
+For instance, you can install packages directly from the upstream source using a command like *npm install express*. Alternatively, packages might be installed as part of a dependency resolution process. In this case, installing *express* would also save its dependencies, such as *accepts*.
-Saving packages can improve download performance and save network bandwidth especially for TFS servers in internal networks.
+Upstream sources provide an important safeguard for your consumers and infrastructure, protecting them from unexpected outages. If the upstream source experiences downtime, maintenance, or becomes temporarily unavailable, you can still retrieve the necessary packages from your feed and continue your development.
::: moniker range="azure-devops"
@@ -115,57 +109,70 @@ Saving packages can improve download performance and save network bandwidth espe
## Override packages from upstream sources
-When you enable upstream sources, you must be aware that publishing a package version that already exists in upstream will not be possible. For instance, when you enable the NuGet.org upstream, you won't be able to publish the `Newtonsoft.Json 10.0.3` package because that same package version is already present in NuGet.org.
+When you enable upstream sources, keep in mind that you cannot publish a package version that already exists in an upstream source. For example, if you enable the *NuGet.org* upstream, you won't be able to publish the *Newtonsoft.Json 10.0.3* package, as that version is already available on NuGet.org.
+
+If you need to publish a package version that already exists in one of your upstream sources, you must follow these steps:
+
+1. Disable the relevant upstream source.
-If you must publish a package version that already exists on one of your upstream sources, you must disable that upstream source, publish your package, and then re-enable the upstream source.
+1. Publish your package.
-> [!Note]
+1. Re-enable the upstream source.
+
+This process ensures that you can publish the desired version while maintaining the integrity of your upstream sources.
+
+> [!NOTE]
> Package versions are immutable. Saved packages remain in the feed even if the upstream source is disabled or removed.
-## Health status
+## Upstream sources health status
-If a feed has a failing upstream source, the metadata can no longer be refreshed for packages of the same protocol. To view your upstream source's health status, select the gear icon  to access your **Feed settings**, and then select **Upstream sources**.
+If a feed has a failing upstream source, the metadata for packages of the same protocol can no longer be refreshed. To check the health status of your upstream sources, follow these steps:
-:::image type="content" source="media/upstreams-last-sync.png" alt-text="A screenshot showing the upstream source failure status.":::
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
-If there are any failures, a warning message will be displayed. Selecting the failed status provides more details such as the reason of failure and instructions on how to solve it.
+1. Select **Artifacts**, and then select your feed from the dropdown menu.
-:::image type="content" source="media/upstream-last-sync-details.png" alt-text="A screenshot showing details about the sync up failure.":::
+1. Select the gear icon  to navigate to your **Feed settings**, and then select **Upstream sources**.
-> [!NOTE]
-> For public registries such as NuGet.org, there is a 3-6 hour delay between when a package is pushed to the public registry and when it is available for download. This delay depends on job timing and data propagation. When the upstream source is an Azure Artifacts feed, the latency is typically no more than a few minutes.
+ :::image type="content" source="media/last-sync-upstreams.png" alt-text="A screenshot showing the upstream sources last sync up status.":::
-## Offline upstream sources
+1. If any failures occur, a warning message will be displayed. Clicking on the *Failed* status provides additional details, including the cause of the failure and instructions on how to resolve it.
-Upstream sources are a great way to protect your consumers and infrastructure from unplanned outages. When you install a package from an upstream source, a copy of that package is saved to your feed. If the upstream source is down, undergoing maintenance, or not available, you can still access the packages you need from your feed.
+ :::image type="content" source="media/last-sync-upstreams-details.png" alt-text="A screenshot displaying details of the sync up failure.":::
+
+> [!NOTE]
+> For public registries like NuGet.org, there is a 3-6 hour delay between when a package is pushed to the public registry and when it becomes available for download. This delay depends on job timing and data propagation. However, when the upstream source is an Azure Artifacts feed, the latency is usually no more than a few minutes.
## FAQs
##### Q: I can't find my package even though I can see it in one of my feed's upstreams?
-A: Packages belonging to an upstream are available downstream soon after they are published. However the package will only show up in your feed's UI once it's ingested, which requires installing the package version for the first time in the downstream feed.
+A: Packages from upstream sources become available in the downstream feed soon after they're published. However, the package will only be visible to readers after it has been saved to the feed. A package is saved when a user with [Feed and Upstream Reader (Collaborator)](../feeds/feed-permissions.md#permissions-table) or higher permissions installs the version in the downstream feed. This triggers the downstream to save a copy of the package from upstream, after which it is permanently saved and available in the downstream to all readers. This is when the package version becomes visible in the package versions section of the web UI.
##### Q: What are feed views?
-A: Views enable developers to only share a subset of package versions that have been tested and validated and excluding any packages that are still under development and/or did not meet the quality bar. See [What are feed views](./views.md) for more details.
+A: Views allow developers to selectively share a subset of package versions that have been tested and validated, excluding any packages that are still under development or haven't met the quality criteria. See [What are feed views](./views.md) for more details.
##### Q: I can't find the feed that I want to configure as an upstream source?
-A: Make sure that the feed's owner is sharing a view as an upstream source.
+A: Make sure that the feed's owner has shared a view as an upstream source. See [Add a feed in a different organization as an upstream source](../how-to/set-up-upstream-sources.md#add-a-feed-in-a-different-organization-as-an-upstream-source) for more details.
-##### Q: Can a user with **Reader** role download packages from an upstream source?
-A: No. A user with **Reader** role in an Azure Artifacts feed can only download packages that have been saved to the feed. Packages are saved to the feed when a **Collaborator**, a **Contributor**, or an **Owner** install those packages from upstream.
+##### Q: Can a user with **Feed Reader** role download packages from an upstream source?
+
+A: No. A user with the **Feed Reader** role in an Azure Artifacts feed can only download packages that have been saved to the feed. Packages are saved to the feed when a **Feed and Upstream Reader (Collaborator)**, **Feed Publisher (Contributor)**, or **Feed Owner** installs those packages from upstream.
##### Q: What happens when a user deletes or unpublishes a package saved from an upstream source?
-A: The package will not be available for download from the feed and the version number gets reserved permanently. The package also will no longer be saved from the upstream source. Earlier and later versions of the package will not be affected.
+
+A: The package becomes unavailable for download from the feed, and the version number is permanently reserved. Additionally, the package will no longer be saved from the upstream source. Earlier and later versions of the package will remain unaffected.
##### Q: What happens when a user deprecates a package saved from an upstream source?
-A: A warning message gets added to the package's metadata and displayed whenever the package is viewed or installed from the feed.
-## Related articles
+A: When a user deprecates a package, a warning message is added to the package's metadata. This warning is displayed whenever the package is viewed or installed from the feed.
+
+## Related content
- [Set up upstream sources](../how-to/set-up-upstream-sources.md)
-- [Manage dependencies](../tutorials/protect-oss-packages-with-upstream-sources.md)
-- [Configure upstream behavior](./upstream-behavior.md)
+
+- [Use upstream sources in a public feed](../how-to/public-feeds-upstream-sources.md)
+
- [Feed permissions](../feeds/feed-permissions.md)
-- [Universal Packages upstream sources](../universal-packages/universal-packages-upstream.md)
diff --git a/docs/artifacts/concepts/views.md b/docs/artifacts/concepts/views.md
index fd1b37dd8ca..7e4b429e313 100644
--- a/docs/artifacts/concepts/views.md
+++ b/docs/artifacts/concepts/views.md
@@ -17,19 +17,22 @@ Feed views enable developers to share a subset of package-versions with their co
## Default view
-All Artifacts feeds come with three views: `@local`, `@prerelease`, and `@release`. The latter two are suggested views that you can rename or delete as desired. `@local` is the default view that's commonly used in upstream sources.
+All Artifacts feeds come with three views: `@local`, `@prerelease`, and `@release`. The latter two are suggested views that you can rename or delete as desired. `@local` is the default view that's commonly used in upstream sources. You can change the default view in your **Feed Settings** > **Views**, but doing so does not enable direct publishing to that view. Packages can only be published to the base feed, where they will be available in the *@Local* view.
The `@local` view contains all packages published directly to the feed and all packages [saved from upstream sources](upstream-sources.md#save-packages-from-upstream-sources).
Feed views are read-only, which means that users connected to a view can only use packages that are published to that view and/or packages previously saved from upstream sources. See [package graphs](package-graph.md) to learn how available packages are constructed.
-> [!NOTE]
-> All feed views in a public project are accessible to everyone on the internet.
+> [!Note]
+> Azure Artifacts only supports publishing and restoring packages from and to the default view - *@Local*.
## Feed views and upstream sources
Feed views and upstream sources are designed to work together to provide an enterprise-level solution to share and consume packages.
-In order for other Azure Artifacts feeds to use your feed as an upstream source, you must set your feed's visibility to **members of your organization**, or **members of your Azure Active Directory**, depending on your scenario. If you choose the latter, all people in your organization will be able to access your feed. In addition, all feeds in your organization and other organizations associated with the same Azure Active Directory tenant will be able to upstream to your feed.
+In order for other Azure Artifacts feeds to use your feed as an upstream source, you must set your feed's visibility to **members of your organization**, or **members of your Microsoft Entra ID**, depending on your scenario. If you choose the latter, all people in your organization will be able to access your feed. In addition, all feeds in your organization and other organizations associated with the same Microsoft Entra tenant will be able to upstream to your feed.
+
+> [!NOTE]
+> All feed views in a public project are accessible to everyone on the internet.
## Release packages with feed views
diff --git a/docs/artifacts/feeds/feed-permissions.md b/docs/artifacts/feeds/feed-permissions.md
index 3fbf544afce..a713287f43b 100644
--- a/docs/artifacts/feeds/feed-permissions.md
+++ b/docs/artifacts/feeds/feed-permissions.md
@@ -4,7 +4,7 @@ description: How to configure permissions for Artifacts feeds, views, and pipeli
ms.assetid: 70313C3C-2E52-4FFC-94C2-41F1E37C9D26
ms.service: azure-devops-artifacts
ms.topic: conceptual
-ms.date: 06/20/2023
+ms.date: 03/15/2024
monikerRange: '<= azure-devops'
"recommendations": "true"
---
@@ -23,8 +23,10 @@ Azure Artifacts enables you to publish, consume, and store various types of pack
:::image type="content" source="media/configure-artifacts-settings.png" alt-text="A screenshot showing how to access Azure Artifacts settings.":::
+ ::: moniker range="< azure-devops-2022"
> [!NOTE]
> By default, the Azure Artifacts settings icon is only visible to feed owners and [project collection administrators](../../organizations/security/look-up-project-collection-administrators.md).
+ ::: moniker-end
1. Choose the users or groups who should have the ability to create and/or administer feeds, and then select **Save** when you're done.
@@ -32,7 +34,7 @@ Azure Artifacts enables you to publish, consume, and store various types of pack
## Feed settings
-::: moniker range=">= azure-devops-2019"
+::: moniker range="<=azure-devops"
1. Sign in to your Azure DevOps organization, and then navigate to your project.
@@ -44,61 +46,58 @@ Azure Artifacts enables you to publish, consume, and store various types of pack
:::image type="content" source="media/feed-permissions.png" alt-text="A screenshot showing how to access feed permissions.":::
-1. Add new user(s)/group(s) and choose the appropriate **Role** for them.
-
- :::image type="content" source="media/add-users-groups-dialogue.png" alt-text="Screenshot showing how to add new users or groups.":::
-
-1. Select **Save** when you're done.
+1. Add new user(s) or group(s), choose the appropriate **Role**, and then select **Save** when you're done.
+
+ :::image type="content" source="media/add-users-or-groups-feed-settings.png" alt-text="A screenshot displaying how to add new users or groups and assign a role.":::
::: moniker-end
-::: moniker range="tfs-2018"
-
-1. Select **Build and Release**.
-
-1. Select **Packages**, and then select the gear icon to navigate to your feed's settings.
+::: moniker range="azure-devops"
-1. Select **Permissions**, and then select **Add user/group**.
+> [!NOTE]
+> By default, the *Project Collection Build Service* (org-scoped) and the project-level *Build Service* (project-scoped) are assigned the **Feed and Upstream Reader (Collaborator)** role.
- :::image type="content" source="media/editfeeddialog1.png" alt-text="A screenshot showing feed permissions in TFS.":::
+::: moniker-end
-1. Add new user(s)/group(s) and choose the appropriate **Role** for them.
+:::moniker range="<= azure-devops-2022"
-1. Select **Save** when you're done.
+> [!NOTE]
+> By default, the *Project Collection Build Service* is automatically assigned the **Feed and Upstream Reader (Collaborator)** role for newly created collection-scoped feeds.
::: moniker-end
-> [!NOTE]
-> By default, the *Project Collection Build Service* (org-scoped) and the project-level *Build Service* (project-scoped) are assigned the **Collaborator** role.
-
## Permissions table
-| Permission | Reader | Collaborator | Contributor | Owner | Administrator |
-| --------------------------------------------- | -------- | ------------ | ----------- | -------- | --------------- |
-| List/install/restore packages | ✓ | ✓ | ✓ | ✓ | ✓ |
-| Publish packages | | | ✓ | ✓ | ✓ |
-| Unlist packages (NuGet) | | | ✓ | ✓ | ✓ |
-| Delete packages | | | | ✓ | ✓ |
-| Deprecate packages (Npm) | | | ✓ | ✓ | ✓ |
-| Unpublish packages (Npm) | | | | ✓ | ✓ |
-| Promote packages to a view | | | ✓ | ✓ | ✓ |
-| Add/remove upstream sources | | | | ✓ | ✓ |
-| Allow external package versions | | | | ✓ | ✓ |
-| Save packages from upstream sources | | ✓ | ✓ | ✓ | ✓ |
-| Edit feeds settings | | | | ✓ | ✓ |
+| Permission | Feed Reader | Feed and Upstream Reader (Collaborator) | Feed Publisher (Contributor) | Feed Owner |
+| ------------------------------------ | -------- | -------- | ---------| -------- |
+| List packages in the feed | ✓ | ✓ | ✓ | ✓ |
+| Download/install/restore packages | ✓ | ✓ | ✓ | ✓ |
+| Save packages from upstream sources | | ✓ | ✓ | ✓ |
+| Publish packages | | | ✓ | ✓ |
+| Promote packages to a view | | | ✓ | ✓ |
+| Deprecate/unlist/yank packages | | | ✓ | ✓ |
+| Delete/unpublish packages | | | | ✓ |
+| Add/remove upstream sources | | | | ✓ |
+| Allow external package versions | | | | ✓ |
+| Edit feed settings | | | | ✓ |
+| Delete a feed | | | | ✓ |
+
+> [!NOTE]
+> [Azure Artifacts Administrators](#azure-artifacts-settings), including **Project Collection Administrators**, automatically have the **Feed Owner** role on all feeds.
> [!NOTE]
-> To access a project-scoped feed, a user must also have access to the project hosting that feed.
+> In Azure Artifacts, feeds may be scoped to a single project or to the entire organization.
+> To access a project-scoped feed, a user must also have access to the project containing that feed.
## Feed views settings
Feed views enable users to share certain packages while keeping others private. A common scenario for using a feed view is sharing a package version that has already been tested and validated but keeping packages under development private.
-By default, there are three views in a feed: **@local**, **@prerelease**, and **@release** view. The latter two are suggested views that you can rename or delete as desired. The **@local** view is the default view and it includes all the packages published to the feed as well as all the packages downloaded from upstream sources.
+By default, there are three views in a feed: **@Local**, **@Prerelease**, and **@Release**. The latter two are suggested views that you can rename or delete as desired. The **@Local** view is the default view and it includes all the packages published to the feed as well as all the packages downloaded from upstream sources.
> [!IMPORTANT]
> Users who have access to a specific view are able to access and download packages from the feed through that view even if they don't have direct access to that feed.
-If you want to completely hide your packages, you must restrict access to both feed and views.
+If you want to completely hide your packages, you must restrict access to both the feed and its views.
1. Sign in to your Azure DevOps organization, and then navigate to your project.
@@ -112,23 +111,115 @@ If you want to completely hide your packages, you must restrict access to both f
:::image type="content" source="media/edit-views.png" alt-text="A screenshot showing the prerelease view permissions.":::
+> [!NOTE]
+> To add a feed from a different organization as an upstream source, the target feed owner needs to share the target view with **All feeds and people in organizations associated with my Microsoft Entra tenant** by navigating to **Feed Settings** > **Views**, selecting the ellipsis next to the specified view, selecting **Edit**, and adjusting the permissions.
+
> [!IMPORTANT]
> Views inherit permissions from the parent feed. If you set a view's visibility to *Specific people* without specifying any users or groups, the view's permissions will default back to the permissions of its parent feed.
## Pipelines permissions
-To access your feed from your pipeline, the corresponding build identity must have the necessary permissions. By default, feeds have the *Project Collection Build Service* role set to *Collaborator*. However, if you have configured your pipeline to run at [project-scope](../../pipelines/process/access-tokens.md#job-authorization-scope), you will need to add the project-level build identity as a *Reader* or *Contributor*. The project-level build identity is named as follows: `[Project name] Build Service ([Organization name])`. Example: FabrikamFiber Build Service (codesharing-demo).
+To access your feed from your pipeline, the [corresponding build identity](../../pipelines/process/access-tokens.md#scoped-build-identities) must have the necessary permissions.
+If your pipeline is unable to access your feed, you might need to add the corresponding build identity to your feed's permissions.
+
+> [!TIP]
+> - The project-level build identity is named `[Project name] Build Service ([Organization name])`, for example `FabrikamFiber Build Service (codesharing-demo)`.
+> - The organization-level build identity is named `Project Collection Build Service ([Organization name])`, for example `Project Collection Build Service (codesharing-demo)`.
1. Sign in to your Azure DevOps organization, and then navigate to your project.
1. Select **Artifacts**, and then select your feed from the dropdown menu. Select the gear icon  to navigate to **Feed settings**.
-1. Select **Permissions**, and then select **Add users/groups**. Add your build identity and set its role to a **Contributor**.
+1. Select **Permissions**, then select **Add users/groups**. Add your build identity and assign it the **Feed and Upstream Reader (Collaborator)** role. If your pipeline needs to publish packages to the feed, make sure that both the *Project Collection Build Service* and your *project's Build Service* identities have the **Feed Publisher (Contributor)** role. See the examples below to learn how to authenticate and publish packages to your feed with Azure Pipelines.
+
+ :::moniker range=">= azure-devops-2022"
+
+ :::image type="content" source="media/feed-pipelines-permissions.png" alt-text="A screenshot showing how to set up the build identities.":::
+
+ ::: moniker-end
+
+#### Examples
+
+::: moniker range="azure-devops"
+
+### [NuGet](#tab/nuget)
+
+- [Publish NuGet packages with Azure Pipelines](../../pipelines/artifacts/nuget.md)
+
+### [Npm](#tab/npm)
+
+- [Publish npm packages with Azure Pipelines](../../pipelines/artifacts/npm.md)
+
+### [Maven](#tab/maven)
+
+- [Publish Maven artifacts with Azure Pipelines](../../pipelines/artifacts/publish-maven-artifacts.md)
+
+### [Python](#tab/python)
+
+- [Publish Python packages with Azure Pipelines](../../pipelines/artifacts/pypi.md)
+
+### [Cargo](#tab/cargo)
+
+- [Publish Cargo packages with Azure Pipelines](../../pipelines/artifacts/cargo-pipelines.md)
+
+### [Universal Packages](#tab/universalpackages)
+
+- [Publish Universal Packages with Azure Pipelines](../../pipelines/artifacts/universal-packages.md)
- :::image type="content" source="media/feed-pipelines-permissions.png" alt-text="A screenshot showing the build identity permission.":::
+---
+
+::: moniker-end
+
+::: moniker range="azure-devops-2022"
+
+### [NuGet](#tab/nugetserver22)
+
+- [Publish NuGet packages with Azure Pipelines](../../pipelines/artifacts/nuget.md)
+
+### [Npm](#tab/npmserver22)
+
+- [Publish npm packages with Azure Pipelines](../../pipelines/artifacts/npm.md)
+
+### [Maven](#tab/mavenserver22)
+
+- [Publish Maven artifacts with Azure Pipelines](../../pipelines/artifacts/publish-maven-artifacts.md)
+
+### [Python](#tab/pythonserver22)
+
+- [Publish Python packages with Azure Pipelines](../../pipelines/artifacts/pypi.md)
+
+### [Cargo](#tab/cargoserver22)
+
+- [Publish Cargo packages with Azure Pipelines](../../pipelines/artifacts/cargo-pipelines.md)
+
+---
+
+::: moniker-end
+
+::: moniker range="=azure-devops-2020"
+
+### [NuGet](#tab/nugetserver)
+
+- [Publish NuGet packages with Azure Pipelines](../../pipelines/artifacts/nuget.md)
+
+### [Npm](#tab/npmserver)
+
+- [Publish npm packages with Azure Pipelines](../../pipelines/artifacts/npm.md)
+
+### [Maven](#tab/mavenserver)
+
+- [Publish Maven artifacts with Azure Pipelines](../../pipelines/artifacts/publish-maven-artifacts.md)
+
+### [Python](#tab/pythonserver)
+
+- [Publish Python packages with Azure Pipelines](../../pipelines/artifacts/pypi.md)
+
+---
+
+::: moniker-end
> [!NOTE]
-> If you want to access a feed in a different project from your pipeline, you must configure the other project to provide read/write access to the build service.
+> If you want to access a feed in a different project from your pipeline, and your pipeline uses the project-level build identity, you must set up the other project to grant that identity at least the "Read project-level information" permission.
## Related articles
diff --git a/docs/artifacts/feeds/media/add-users-or-groups-feed-settings.png b/docs/artifacts/feeds/media/add-users-or-groups-feed-settings.png
new file mode 100644
index 00000000000..cd50ba7929c
Binary files /dev/null and b/docs/artifacts/feeds/media/add-users-or-groups-feed-settings.png differ
diff --git a/docs/artifacts/feeds/media/edit-view-permission.png b/docs/artifacts/feeds/media/edit-view-permission.png
index 1045fda5b6e..2c7589c5679 100644
Binary files a/docs/artifacts/feeds/media/edit-view-permission.png and b/docs/artifacts/feeds/media/edit-view-permission.png differ
diff --git a/docs/artifacts/feeds/media/manage-views.png b/docs/artifacts/feeds/media/manage-views.png
new file mode 100644
index 00000000000..e6d523e97a5
Binary files /dev/null and b/docs/artifacts/feeds/media/manage-views.png differ
diff --git a/docs/artifacts/feeds/media/promote-package.png b/docs/artifacts/feeds/media/promote-package.png
deleted file mode 100644
index 173f6c1a10d..00000000000
Binary files a/docs/artifacts/feeds/media/promote-package.png and /dev/null differ
diff --git a/docs/artifacts/feeds/media/promote-packages-select-view.png b/docs/artifacts/feeds/media/promote-packages-select-view.png
new file mode 100644
index 00000000000..8084ef03ff5
Binary files /dev/null and b/docs/artifacts/feeds/media/promote-packages-select-view.png differ
diff --git a/docs/artifacts/feeds/media/promote-packages-to-a-view.png b/docs/artifacts/feeds/media/promote-packages-to-a-view.png
new file mode 100644
index 00000000000..e46405540ba
Binary files /dev/null and b/docs/artifacts/feeds/media/promote-packages-to-a-view.png differ
diff --git a/docs/artifacts/feeds/media/release-views-promote-choice.png b/docs/artifacts/feeds/media/release-views-promote-choice.png
deleted file mode 100644
index ca13e71cdc0..00000000000
Binary files a/docs/artifacts/feeds/media/release-views-promote-choice.png and /dev/null differ
diff --git a/docs/artifacts/feeds/media/view-permissions.png b/docs/artifacts/feeds/media/view-permissions.png
deleted file mode 100644
index d187d8f855a..00000000000
Binary files a/docs/artifacts/feeds/media/view-permissions.png and /dev/null differ
diff --git a/docs/artifacts/feeds/media/views-settings.png b/docs/artifacts/feeds/media/views-settings.png
deleted file mode 100644
index 89334e8eb1d..00000000000
Binary files a/docs/artifacts/feeds/media/views-settings.png and /dev/null differ
diff --git a/docs/artifacts/feeds/project-scoped-feeds.md b/docs/artifacts/feeds/project-scoped-feeds.md
index f3c0e64b804..9194f34e9ad 100644
--- a/docs/artifacts/feeds/project-scoped-feeds.md
+++ b/docs/artifacts/feeds/project-scoped-feeds.md
@@ -1,109 +1,87 @@
---
-title: Project scoped feeds
-description: Understand the difference between project-scoped and organization-scoped feeds
+title: Project-scoped vs organization-scoped feeds
+description: Learn the differences between project-scoped and organization-scoped feeds in Azure Artifacts.
ms.service: azure-devops-artifacts
ms.topic: conceptual
-ms.date: 10/03/2022
+ms.date: 10/24/2024
monikerRange: '<= azure-devops'
"recommendations": "true"
---
-# Project-scoped feeds
+# Feed scopes: Project vs organization feeds
[!INCLUDE [version-lt-eq-azure-devops](../../includes/version-lt-eq-azure-devops.md)]
-When creating a new Azure Artifacts feed, you can choose to scope your feed to your project or your organization depending on your needs. Feeds that are created through the web interface are project-scoped by default.
+Azure Artifacts enables developers to manage their dependencies from a single feed. A feed acts as an organizational space to host various types of packages, giving you control over who can access it, whether it's team members within your organization or even public users.
-## Create a new feed
+When creating a new feed in Azure Artifacts, you can choose to scope it to either a project or your organization, depending on your scenario. However, Azure Artifacts recommends scoping new feeds to a project. In this article, you'll learn about the key differences between the two types of feeds.
-::: moniker range=">= azure-devops-2019"
+## Create a feed
-Follow the instructions below and select the appropriate scope for your need to create a project-scoped or an organization-scoped feed.
+1. Sign in to your Azure DevOps organization and navigate to your project.
1. Select **Artifacts**, and then select **Create Feed**.
- :::image type="content" source="../media/new-feed-button-azure-devops-newnav.png" alt-text="A screenshot showing the create feed button.":::
+1. Provide a **Name** for your feed, choose its **Visibility** to specify who can view your packages, and check the **Include packages from common public sources** checkbox if you want to include packages from public sources such as *nuget.org*.
-1. Give your feed a **Name** and choose its **visibility**. Select **upstream sources** if you want to include packages from public registries.
-
-1. Select **Project** if you want to create a project-scoped feed, otherwise select **Organization**.
+1. Under **Scope**, select **Project** to create a project-scoped feed, or **Organization** if you want an organization-scoped feed.
1. Select **Create** when you're done.
:::image type="content" source="../media/proj-org-scoped-feed.png" alt-text="A screenshot showing how to create project and organization scoped feeds.":::
-::: moniker-end
-
-::: moniker range="tfs-2018"
-
-1. Navigate to **Build & Release**, and then select **Packages**.
-
- :::image type="content" source="../media/goto-feed-hub.png" alt-text="A screenshot showing how to navigate to feeds in TFS.":::
-
-1. Select the dropdown menu, and then select **New feed**.
-
- :::image type="content" source="../media/new-feed-button.png" alt-text="A screenshot showing how to create a new feed in TFS.":::
-
-1. Give your feed a **Name**, a **Description**, and then select who can read and contribute to your feed. Select **Include external packages** if you want to use packages from public registries.
-
-1. Select **Create** when you're done.
-
- :::image type="content" source="../media/new-feed-dialog-azure-tfs.png" alt-text="A screenshot showing how to set up a new feed in TFS.":::
-
-::: moniker-end
-
> [!NOTE]
-> Organization-scoped feeds cannot be converted into project-scoped feeds.
+> Organization-scoped feeds cannot be converted to project-scoped feeds.
## Project-scoped vs organization-scoped feeds
A project-scoped feed is scoped to a project instead of an organization. Here are the main differences between the two types of feeds:
-1. **Visibility**:
-
- * Project-scoped feeds inherit the visibility of the project.
- * Organization-scoped feeds are always private by default.
+| **Category** | **Project-Scoped Feed** | **Organization-Scoped Feed** |
+|-------------------|--------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------|
+| **Visibility** | Inherits the visibility of the project. | Always private by default. |
+| **Links** | The URL includes the project name.
Example: `https://pkgs.dev.azure.com///_packaging//nuget/v3/index.json` | The URL does not include a project.
Example: `https://pkgs.dev.azure.com//_packaging//nuget/v3/index.json` |
+| **User Interface**| Visible only after navigating to the project that hosts the feed. | Always available from the feeds dropdown menu. |
+| **Connection** | To access a feed from a pipeline running in a different project within the same organization, the **Project Collection Build Service** and the project's **Build Service** identity of the project running the pipeline must be granted the **Feed Publisher (Contributor)** role in feed settings. | You only need to assign the **Project Collection Build Service** the **Feed Publisher (Contributor)** role in feed settings. |
-1. **Links**:
+> [!NOTE]
+> To add a feed from a different organization as an upstream source, the target feed owner must share the target view with **All feeds and people in organizations associated with my Microsoft Entra tenant** by navigating to **Feed Settings** > **Views** > selecting the ellipsis button on the right for the specified view > then selecting **Edit**.
- * The URL of a project-scoped feed includes the project.
- * Example: `https://pkgs.dev.azure.com///_packaging//nuget/v3/index.json`
+> [!TIP]
+> If you want to add an extra layer of security to your project-scoped feed and protect your feed's visibility, you can disable the **Allow public projects** policy from the [Organization Policy Settings](../../organizations/accounts/change-application-access-policies.md).
- * The URL of an organization-scoped feed doesn't include a project.
- * Example: `https://pkgs.dev.azure.com//_packaging//nuget/v3/index.json`
+## Q&A
-1. **User interface**:
- * All organization-scoped feeds are available from the feeds' dropdown menu. To see a project-scoped feed in the list of feeds, you have to navigate to the project hosting that feed.
+#### Q: How can I share packages with all users in my organization?
-1. **Connection**:
- * When connecting to a private project scoped feed from an Azure DevOps pipeline that is in the same organization but in a different project, the project that the feed is scoped to must allow access to the other project's build service. The build service must also be separately added to the feed permissions, regardless of the scope of the feed. See [Package permissions](./feed-permissions.md#pipelines-permissions) for more details.
+A: To make specific packages in your feed accessible to all users in your organization, create or select a [view](views.md) that contains the packages you want to share and set its visibility to **People in my organization**.
-## Security policies
+> [!IMPORTANT]
+> If a user has access to a specific view, they will still be able to view and download packages from that view even without feed-level permissions.
+> If you want to fully restrict access to your packages, ensure permissions are limited for both the feed and its views. See [Feeds and views permissions](feed-permissions.md) for more details.
-if you want to add an extra layer of security to your project-scoped feed and protect your feed's visibility, you can disable the **Allow public projects** policy from the [Organization Policy Settings](../../organizations/accounts/change-application-access-policies.md).
+#### Q: How can I access a project-scoped feed in another project from my pipeline?
-Alternatively, you can use the [Create Feed API](/rest/api/azure/devops/artifacts/feed%20%20management/create%20feed?view=azure-devops-rest-5.1&preserve-view=true) to manually create a new organization-scoped feed. You will have to set the default permissions for the new feed manually either by using the [Feed Permission API](/rest/api/azure/devops/artifacts/feed%20%20management/set%20feed%20permissions?view=azure-devops-rest-5.1&preserve-view=true) or the Artifacts feed settings.
+To allow a pipeline to access a project-scoped feed in a different project, you need to grant the pipeline access to both the project where the feed is scoped and to the feed itself.
-> [!IMPORTANT]
-> If a user has permissions to access a specific view, and they don't have permissions to the feed, they will still be able to access and download packages through that view.
-> If you want to completely hide your packages, you must restrict access to both the feed and the view. See [Feeds and views permissions](feed-permissions.md) for more details.
+- **Project permissions**: navigate to the project hosting the feed, select **Project settings** > **Permissions** and then add your pipeline's *project build service* to the Contributors group or any group that grants contributor access.
-## Q&A
+- **Feed permissions**: navigate to the feed you want to access, select **Settings** > **Feed permissions**, and then add your *project build service* as a **Feed and Upstream Reader (Collaborator)**. The *Project build service* identity is formatted as follows: `[Project name] Build Service ([Organization name])` (for example, FabrikamFiber Build Service (codesharing-demo)).
-#### Q: How can I share packages with all users in my organization?
+#### Q: How can I download a pipeline artifact from another project within the same organization?
-A: If you want to make certain packages in your feed available to all users in your organization, create or select a [view](views.md) that contains the packages you want to share and ensure its visibility is set to **People in my organization**.
+A: If your pipeline is failing to download an artifact from another project, ensure the following permissions are set for both the downstream project and the pipeline generating the artifact:
-#### Q: How to access a project-scoped feed in another project using Azure Pipelines?
+- **On the pipeline generating the artifact** (upstream project): select the ellipsis for more options > **Manage security** > search for your downstream project's build service, then allow the following permissions: **Update build information**, **View build pipeline**, and **View builds**.
-In order for a pipeline to access a project-scoped feed in a different project, it is necessary to grant the pipeline access to both the project where the feed is scoped and the feed itself.
+- **On the downstream project**: navigate to **Project Settings** > **Permissions** > **Users** > search for your upstream project's name, then select **Expand search** > select your upstream project's build service and enable **View project-level information**.
-- Project setup: navigate to the project hosting the feed, select **Project settings** > **Permissions** and then add your pipeline's *project build service* to the Contributors group or any other suitable group that provides contributor access to its users.
+#### Q: If I enable upstream sources in a new feed and set its visibility to 'Members of your Microsoft Entra tenant,' do I still need to add Microsoft Entra users to the Azure DevOps Organization that contains the feed?
-- Feed setup: Navigate to the feed you want to access, select **Settings** > **Feed permissions** and then add your *project build service* as a **Collaborator**. Your *Project build service* identity is displayed in the following format: `[Project name] Build Service ([Organization name])` (e.g. FabrikamFiber Build Service (codesharing-demo))
+A: Yes, adding users to the Azure DevOps organization is still required for them to access the packages in the feed. You can add them as **Project Collection Valid Users** from **Organization Settings** > **Security** > **Permissions**.
-## Related articles
+## Related content
-- [Configure permissions](./feed-permissions.md)
+- [Configure feed permissions](./feed-permissions.md)
+- [Use feed views to share packages](./views.md)
- [Delete and recover packages](../how-to/delete-and-recover-packages.md)
-- [Use feed views to share packages](./views.md)
\ No newline at end of file
diff --git a/docs/artifacts/feeds/views.md b/docs/artifacts/feeds/views.md
index bef5177e670..3e421c3b175 100644
--- a/docs/artifacts/feeds/views.md
+++ b/docs/artifacts/feeds/views.md
@@ -1,135 +1,314 @@
---
-title: Use feed views to share packages
-description: How to use feed views to share your packages
+title: Promote packages and manage feed views
+description: Learn how to promote packages to a specific view and manage feed views in Azure Artifacts.
ms.assetid: EB40D23E-1053-4EBF-9D1D-19CF1BBAF1C6
ms.service: azure-devops-artifacts
-ms.topic: conceptual
-ms.date: 08/25/2022
+ms.topic: how-to
+ms.date: 02/19/2025
monikerRange: '<= azure-devops'
---
-# Use feed views to share packages
+# Promote packages and manage feed views
[!INCLUDE [version-lt-eq-azure-devops](../../includes/version-lt-eq-azure-devops.md)]
-Feed views are a way to enable users to share some packages while keeping other packages private. Views filter the feed to a subset of packages that meet a set of criteria defined by that view.
+Feed views enable developers to control package visibility by sharing some packages while keeping others private. Each view filters the feed to display a subset of packages based on specific criteria defined for that view.
-By default, Azure Artifacts comes with three views: **@Local**, **@Prerelease**, and **@Release**. @local is the default view that contains all the published packages and all the packages saved from upstream sources. All views support NuGet, npm, Maven, Python, and Universal packages.
+By default, Azure Artifacts comes with three views: **@Local**, **@Prerelease**, and **@Release**. The `@Local` view is the default and contains all published packages and those saved from upstream sources. All views support NuGet, npm, Maven, Python, Cargo, and Universal Packages. You can change the default view in your **Feed Settings** > **Views**, but doing so doesn't enable direct publishing to that view. Packages can only be published to the base feed, where they're available in the *@Local* view.
-> [!Note]
-> Publishing and restoring packages directly to/from a view is not supported in Azure Artifacts.
+> [!NOTE]
+> You must be a **Feed Publisher (Contributor)** or a **Feed Owner** to promote packages to a view.
-## Promote packages
+## Promote a package to a specific view
-1. Select **Artifacts**.
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
-1. Select your feed from the dropdown menu.
+1. Select **Artifacts**, and then select your feed from the dropdown menu.
-1. Select the package you wish to promote.
+1. Select the package you want to promote, and then select **Promote**.
-1. Select **Promote**.
+1. Select a view from the dropdown menu, and then select **Promote** again.
- :::image type="content" source="media/promote-package.png" alt-text="A screenshot showing how to promote a package to a view.":::
+ :::image type="content" source="media/promote-packages-select-view.png" alt-text="A screenshot showing the list of available views.":::
-1. Select a view from the dropdown menu, and then select **Promote**.
+> [!IMPORTANT]
+> Azure Artifacts doesn't support package demotion. Once a package is promoted, it can't be reverted to a previous view.
- :::image type="content" source="media/release-views-promote-choice.png" alt-text="Screenshot showing the promote package dialog box.":::
+## Promote a package using the REST API
-> [!NOTE]
-> Package demotion is not supported. If you want this feature to be added to a future release, please feel free to **Suggest a feature** on [Azure DevOps Developer Community](https://developercommunity.visualstudio.com/spaces/21/index.html).
+To promote a package using the REST API, you need to send a PATCH request with the appropriate body formatted as a [JSON Patch](https://jsonpatch.com/) document. This appends the desired view (for example, Prerelease) to the package’s views array.
+
+1. Create a [Personal Access Token](../../organizations/accounts/use-personal-access-tokens-to-authenticate.md#create-a-pat) with **Packaging** > **Read, write, & manage** scope.
+
+1. Copy the endpoint URL, replace it in the following example (either *PowerShell* or *curl*), and run the command to promote your package to the desired view.
+
+::: moniker range="azure-devops"
-## Promote packages using the REST API
+### [NuGet](#tab/nuget)
-In addition to using the Azure Artifacts user interface, you can also promote packages using the REST API. The URI varies based on the package type:
+- **Organization scoped feed**:
-Use the actual user-facing name and version of the package for the `{packageName}` and `{packageVersion}` fields, respectively. If your feed is organization-scoped, omit the `{project}` field.
+ ```HTTP
+ https://pkgs.dev.azure.com/{organization}/_apis/packaging/feeds/{feedId}/nuget/packages/{packageName}/versions/{packageVersion}?api-version=7.1
+ ```
+
+- **Project scoped feed**:
+
+ ```HTTP
+ https://pkgs.dev.azure.com/{organization}/{project}/_apis/packaging/feeds/{feedId}/nuget/packages/{packageName}/versions/{packageVersion}?api-version=7.1
+ ```
-The body of the request is a [JSON Patch](https://jsonpatch.com/) document adding the view to the end of the `views` array. See [Get started with the REST API](../../integrate/how-to/call-rest-api.md) and the [REST API samples](../../integrate/get-started/rest/samples.md) for more information on how to interact with Azure DevOps REST API.
+See [JsonPatchOperation](/rest/api/azure/devops/artifactspackagetypes/nuget/update-package-version#request-body) and [NuGet - Update Package Version](/rest/api/azure/devops/artifactspackagetypes/nuget/update-package-version) for more details.
-- **NuGet**:
+### [Npm](#tab/npm)
+
+- **Organization scoped feed**:
- ```Command
- PATCH https://pkgs.dev.azure.com/{organization}/{project}/_apis/packaging/feeds/{feedId}/nuget/packages/{packageName}/versions/{packageVersion}?api-version=7.1-preview.1
+ ```HTTP
+ https://pkgs.dev.azure.com/{organization}/_apis/packaging/feeds/{feedId}/npm/{packageName}/versions/{packageVersion}?api-version=7.1
```
+
+- **Project scoped feed**:
- Use [JsonPatchOperation](/rest/api/azure/devops/artifactspackagetypes/nuget/update%20package%20version?view=azure-devops-rest-5.1&preserve-view=true#jsonpatchoperation) to construct the body of your request. See [NuGet - update package version](/rest/api/azure/devops/artifactspackagetypes/nuget/update%20package%20version?view=azure-devops-rest-7.1&preserve-view=true) for more details.
+ ```HTTP
+ https://pkgs.dev.azure.com/{organization}/{project}/_apis/packaging/feeds/{feedId}/npm/{packageName}/versions/{packageVersion}?api-version=7.1
+ ```
+
+See [JsonPatchOperation](/rest/api/azure/devops/artifactspackagetypes/npm/update-package#request-body) and [Npm - Update Package](/rest/api/azure/devops/artifactspackagetypes/npm/update-package) for more details.
-- **npm**:
+### [Python](#tab/python)
+
+- **Organization scoped feed**:
- ```Command
- PATCH https://pkgs.dev.azure.com/{organization}/{project}/_apis/packaging/feeds/{feedId}/npm/{packageName}/versions/{packageVersion}?api-version=7.1-preview.1
+ ```HTTP
+ https://pkgs.dev.azure.com/{organization}/_apis/packaging/feeds/{feedId}/pypi/packages/{packageName}/versions/{packageVersion}?api-version=7.1
```
+
+- **Project scoped feed**:
- Use [JsonPatchOperation](/javascript/api/azure-devops-extension-api/jsonpatchoperation) to construct the body of your request. See [npm - update package version](/rest/api/azure/devops/artifactspackagetypes/npm/update%20package?view=azure-devops-rest-7.1&preserve-view=true) for more details.
+ ```HTTP
+ https://pkgs.dev.azure.com/{organization}/{project}/_apis/packaging/feeds/{feedId}/pypi/packages/{packageName}/versions/{packageVersion}?api-version=7.1
+ ```
+
+See [JsonPatchOperation](/rest/api/azure/devops/artifactspackagetypes/python/update-package-version#request-body) and [Python - Update Package Version](/rest/api/azure/devops/artifactspackagetypes/python/update-package-version) for more details.
-- **Python**:
+### [Maven](#tab/maven)
+
+- **Organization scoped feed**:
+
+ ```HTTP
+ https://pkgs.dev.azure.com/{organization}/_apis/packaging/feeds/{feed}/maven/groups/{groupId}/artifacts/{artifactId}/versions/{version}?api-version=7.1-preview.1
+ ```
+- **Project scoped feed**:
- ```Command
- PATCH https://pkgs.dev.azure.com/{organization}/{project}/_apis/packaging/feeds/{feedId}/pypi/packages/{packageName}/versions/{packageVersion}?api-version=7.1-preview.1
+ ```HTTP
+ https://pkgs.dev.azure.com/{organization}/{project}/_apis/packaging/feeds/{feed}/maven/groups/{groupId}/artifacts/{artifactId}/versions/{version}?api-version=7.1-preview.1
```
-
- Use [JsonPatchOperation](/rest/api/azure/devops/artifactspackagetypes/python/update%20package%20version?view=azure-devops-rest-5.1&preserve-view=true#jsonpatchoperation) to construct the body of your request. See [Python - update package version](/rest/api/azure/devops/artifactspackagetypes/python/update%20package%20version?view=azure-devops-rest-7.1&preserve-view=true) for more details.
-- **Maven**:
+See [JsonPatchOperation](/rest/api/azure/devops/artifactspackagetypes/maven/update-package-version#request-body) and [Maven - Update Package Version](/rest/api/azure/devops/artifactspackagetypes/maven/update-package-version) for more details.
+
+### [Cargo](#tab/cargo)
+
+- **Organization scoped feed**:
- ```Command
- PATCH https://pkgs.dev.azure.com/{organization}/{project}/_apis/packaging/feeds/{feed}/maven/groups/{groupId}/artifacts/{artifactId}/versions/{version}?api-version=7.1-preview.1
+ ```HTTP
+ https://pkgs.dev.azure.com/{organization}/_apis/packaging/feeds/{feedId}/cargo/packages/{packageName}/versions/{packageVersion}?api-version=7.2-preview.1
```
+- **Project scoped feed**:
+
+ ```HTTP
+ https://pkgs.dev.azure.com/{organization}/{project}/_apis/packaging/feeds/{feedId}/cargo/packages/{packageName}/versions/{packageVersion}?api-version=7.2-preview.1
+ ```
+
+See [JsonPatchOperation](/rest/api/azure/devops/artifactspackagetypes/cargo/update-package-version#request-body) and [Cargo - Update Package Version](/rest/api/azure/devops/artifactspackagetypes/cargo/update-package-version) for more details.
+
+### [Universal Packages](#tab/universalpackages)
- Use [JsonPatchOperation](/rest/api/azure/devops/artifactspackagetypes/python/update%20package%20version?view=azure-devops-rest-5.1&preserve-view=true#jsonpatchoperation) to construct the body of your request. See [Maven - update package version](/rest/api/azure/devops/artifactspackagetypes/maven/update-package-version?view=azure-devops-rest-7.1&preserve-view=true) for more details.
+- **Organization scoped feed**:
+
+ ```HTTP
+ https://pkgs.dev.azure.com/{organization}/_apis/packaging/feeds/{feedId}/upack/packages/{packageName}/versions/{packageVersion}?api-version=7.1-preview.1
+ ```
+
+- **Project scoped feed**:
+
+ ```HTTP
+ https://pkgs.dev.azure.com/{organization}/{project}/_apis/packaging/feeds/{feedId}/upack/packages/{packageName}/versions/{packageVersion}?api-version=7.1-preview.1
+ ```
+
+See [JsonPatchOperation](/rest/api/azure/devops/artifactspackagetypes/universal/update-package-version#request-body) and [Universal - Update Package Version](/rest/api/azure/devops/artifactspackagetypes/universal/update-package-version) for more details.
+
+---
+
+::: moniker-end
+
+::: moniker range="azure-devops-2022"
+
+### [NuGet](#tab/nugetserver22)
+
+- **Collection scoped feed**:
+
+ ```HTTP
+ https://{instance}/{collection}/_apis/packaging/feeds/{feedId}/nuget/packages/{packageName}/versions/{packageVersion}?api-version=7.1
+ ```
+
+- **Project scoped feed**:
+
+ ```HTTP
+ https://{instance}/{collection}/{project}/_apis/packaging/feeds/{feedId}/nuget/packages/{packageName}/versions/{packageVersion}?api-version=7.1
+ ```
+
+See [JsonPatchOperation](/rest/api/azure/devops/artifactspackagetypes/nuget/update-package-version#request-body) and [NuGet - Update Package Version](/rest/api/azure/devops/artifactspackagetypes/nuget/update-package-version) for more details.
+
+### [Npm](#tab/npmserver22)
+
+- **Collection scoped feed**:
-- **Universal packages**:
+ ```HTTP
+ https://{instance}/{collection}/_apis/packaging/feeds/{feedId}/npm/packagesbatch?api-version=7.1
+ ```
+
+- **Project scoped feed**:
- ```Command
- PATCH https://pkgs.dev.azure.com/{organization}/{project}/_apis/packaging/feeds/{feedId}/upack/packages/{packageName}/versions/{packageVersion}?api-version=7.1-preview.1
+ ```HTTP
+ https://{instance}/{collection}/{project}/_apis/packaging/feeds/{feedId}/npm/packagesbatch?api-version=7.1
+ ```
+
+See [JsonPatchOperation](/rest/api/azure/devops/artifactspackagetypes/npm/update-package#request-body) and [Npm - Update Package](/rest/api/azure/devops/artifactspackagetypes/npm/update-package) for more details.
+
+### [Maven](#tab/mavenserver22)
+
+- **Collection scoped feed**:
+
+ ```HTTP
+ https://{instance}/{collection}/_apis/packaging/feeds/{feed}/maven/groups/{groupId}/artifacts/{artifactId}/versions/{version}?api-version=7.1-preview.1
+ ```
+- **Project scoped feed**:
+
+ ```HTTP
+ https://{instance}/{collection}/{project}/_apis/packaging/feeds/{feed}/maven/groups/{groupId}/artifacts/{artifactId}/versions/{version}?api-version=7.1-preview.1
+ ```
+
+See [JsonPatchOperation](/rest/api/azure/devops/artifactspackagetypes/maven/update-package-version#request-body) and [Maven - Update Package Version](/rest/api/azure/devops/artifactspackagetypes/maven/update-package-version) for more details.
+
+---
+
+::: moniker-end
+
+::: moniker range="=azure-devops-2020"
+
+### [NuGet](#tab/nugetserver)
+
+- **Collection scoped feed**:
+
+ ```HTTP
+ https://{instance}/{collection}/_apis/packaging/feeds/{feedId}/nuget/packages/{packageName}/versions/{packageVersion}?api-version=6.0-preview.1
```
+
+- **Project scoped feed**:
+
+ ```HTTP
+ https://{instance}/{collection}/{project}/_apis/packaging/feeds/{feedId}/nuget/packages/{packageName}/versions/{packageVersion}?api-version=6.0-preview.1
+ ```
+
+See [JsonPatchOperation](/rest/api/azure/devops/artifactspackagetypes/nuget/update-package-version#request-body) and [NuGet - Update Package Version](/rest/api/azure/devops/artifactspackagetypes/nuget/update-package-version) for more details.
+
+### [Npm](#tab/npmserver)
+
+- **Collection scoped feed**:
+
+ ```HTTP
+ https://{instance}/{collection}/_apis/packaging/feeds/{feedId}/npm/{packageName}/versions/{packageVersion}?api-version=6.0-preview.1
+ ```
+
+- **Project scoped feed**:
- Use [JsonPatchOperation](/rest/api/azure/devops/artifactspackagetypes/universal/update%20package%20version?view=azure-devops-rest-5.1&preserve-view=true#jsonpatchoperation) to construct the body of your request. See [Universal packages - update package version](/rest/api/azure/devops/artifactspackagetypes/universal/update%20package%20version?view=azure-devops-rest-7.1&preserve-view=true) for more details.
+ ```HTTP
+ https://{instance}/{collection}/{project}/_apis/packaging/feeds/{feedId}/npm/{packageName}/versions/{packageVersion}?api-version=6.0-preview.1
+ ```
+
+See [JsonPatchOperation](/rest/api/azure/devops/artifactspackagetypes/npm/update-package#request-body) and [Npm - Update Package](/rest/api/azure/devops/artifactspackagetypes/npm/update-package) for more details.
+
+---
+
+::: moniker-end
+
+#### Examples
-- **Example**:
+Replace the placeholders with your personal access token, endpoint URL, and view name, then run the command to promote your package to the desired view:
-```http
-PATCH https://pkgs.dev.azure.com/fabrikam-fiber-inc/litware/_apis/packaging/feeds/litware-tools/nuget/packages/LitWare.Common/versions/1.0.0?api-version=5.1-preview.1 HTTP/1.1
-Content-Type: application/json-patch+json
+### [PowerShell](#tab/powershell)
-{
- "views": {
- "op": "add",
- "path": "/views/-",
- "value": "Release"
- }
+```PowerShell
+$env:PAT = "YOUR_PERSONAL_ACCESS_TOKEN"
+$uri = "YOUR_URL"
+$headers = @{
+ "Content-Type" = "application/json"
+ Authorization = "Basic " + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$env:PAT"))
}
+$body = @{
+ views = @{
+ op = "add"
+ path = "/views/-"
+ value = "YOUR_VIEW_NAME"
+ }
+} | ConvertTo-Json
+
+Invoke-RestMethod -Uri $uri -Method Patch -Headers $headers -Body $body
```
-## Manage views
+### [curl](#tab/curl)
+
+```bash
+PAT="YOUR_PERSONAL_ACCESS_TOKEN"
+ENCODED_PAT=$(echo -n ":$PAT" | base64 | tr -d '\n')
+$ curl -X PATCH "YOUR_ENDPOINT_URL" \
+-H "Content-Type: application/json" \
+-H "Authorization: Basic $ENCODED_PAT" \
+-d '{
+ "views": {
+ "path": "/views/-",
+ "op": "add",
+ "value": "YOUR_VIEW_NAME"
+ }
+ }'
+```
-You can create your own views or rename and delete existing ones from your feed's settings.
+---
> [!NOTE]
> All feed views in a public project are accessible to everyone on the internet.
-1. Select **Artifacts**.
+## Manage views
-1. Select your feed from the dropdown menu.
+By default, Azure Artifacts offers three views: *@Local*, *@Prerelease*, and *@Release*. You can also create new views and manage existing ones by renaming or deleting them directly from your feed's settings.
-1. Select the gear icon :::image type="icon" source="../../media/icons/blue-gear.png" border="false"::: to access your feed's settings.
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
- :::image type="content" source="../media/feed-settings.png" alt-text="Screenshot showing how to access the feed's settings.":::
+1. Select **Artifacts**, and then select your feed from the dropdown menu.
+
+1. Select the gear icon on the far right :::image type="icon" source="../../media/icons/gear-icon.png" border="false"::: to access your feed's settings.
-1. Select **Views**.
+ :::image type="content" source="../media/feed-settings.png" alt-text="Screenshot showing how to access the feed's settings.":::
- :::image type="content" source="./media/views-settings.png" alt-text="A screenshot showing how to navigate to views.":::
+1. Select **Views**, select a view, and then select **Edit** to edit your view. If you want to add a new view, select **Add view**.
-1. Select a view, and then select **Edit** to edit your view or select **Add view** if you want to add a new view.
+ :::image type="content" source="./media/manage-views.png" alt-text="A screenshot showing how to add, edit, or delete feed views.":::
1. Select **Save** when you're done.
+::: moniker range="azure-devops"
+
> [!IMPORTANT]
-> For public feeds, if you change the access permissions of a certain view to **Specific people** your view will not be available as an upstream source.
+> For public feeds, if you change the access permissions of a view to **Specific people**, that view is no longer available as an upstream source.
-## Related articles
+::: moniker-end
+
+## Related content
-- [Upstream sources overview](../concepts/upstream-sources.md)
-- [Configure permissions](./feed-permissions.md)
-- [Set up upstream sources](../how-to/set-up-upstream-sources.md)
- [Delete and recover packages](../how-to/delete-and-recover-packages.md)
+
+- [Manage feed permissions](feed-permissions.md)
+
+- [Set up upstream sources](../how-to/set-up-upstream-sources.md)
+
diff --git a/docs/artifacts/get-started-artifacts-ai.md b/docs/artifacts/get-started-artifacts-ai.md
new file mode 100644
index 00000000000..f8a16770dec
--- /dev/null
+++ b/docs/artifacts/get-started-artifacts-ai.md
@@ -0,0 +1,209 @@
+---
+title: Publish a package to an Azure Artifacts feed - Copilot
+description: Learn how to publish your first package to an Azure Artifacts feed.
+ms.service: azure-devops-artifacts
+ms.topic: quickstart
+ms.author: rabououn
+author: ramiMSFT
+ms.date: 06/21/2024
+ms.collection: ce-skilling-ai-copilot
+monikerRange: '>= azure-devops-2020'
+---
+
+# Publish a package to an Azure Artifacts feed
+
+Azure Artifacts enables developers to efficiently manage all their dependencies from a single feed. Feeds in Azure Artifacts serve as organizational repositories for storing, managing, and sharing your packages within your team, across organizations, or publicly on the internet. Azure Artifacts feeds support a wide range of package types, including NuGet, npm, Python, Maven, Cargo, and Universal Packages.
+
+This article walks you through the process of publishing your first package to an Azure Artifacts feed. You also have the option to use GitHub Copilot to streamline this process and explore the capabilities of the GitHub Copilot Chat in Visual Studio Code.
+
+## Prerequisites
+
+* Create an Azure DevOps [organization](../organizations/accounts/create-organization.md) and a [project](../organizations/projects/create-project.md#create-a-project) if you haven't already.
+
+* Install the [.NET Core SDK](https://dotnet.microsoft.com/en-us/download).
+
+* Install the [Azure Artifacts Credential Provider](https://github.com/microsoft/artifacts-credprovider#azure-artifacts-credential-provider).
+
+* (Optional) [Set up GitHub Copilot and Visual Studio Code](https://docs.github.com/en/copilot/using-github-copilot/using-github-copilot-code-suggestions-in-your-editor?tool=vscode). A 30-day GitHub Copilot free trial is available if you haven't signed up yet.
+
+## Create a feed
+
+::: moniker range="azure-devops"
+
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
+
+1. Select **Artifacts**, and then select **Create Feed**.
+
+1. Provide a descriptive **Name** for your feed and set its **Visibility** (who can view packages in your feed). Define the **Scope** of your feed, and if you want to include packages from public sources, check the **Upstream sources** checkbox.
+
+1. Select **Create** when you're done.
+
+ :::image type="content" source="media/create-new-feed-azure-devops.png" alt-text="Screenshot that shows how to create a new feed in Azure DevOps Services.":::
+
+::: moniker-end
+
+::: moniker range="azure-devops-2022 || azure-devops-2020"
+
+1. Sign in to your Azure DevOps server, and then navigate to your project.
+
+2. Select **Artifacts**, and then select **Create Feed**.
+
+3. Provide a descriptive **Name** for your feed and set its **Visibility** (who can view packages in your feed). Define the **Scope** of your feed, and if you want to include packages from public sources, check the **Upstream sources** checkbox.
+
+::: moniker-end
+
+::: moniker range="azure-devops-2022"
+
+4. Select **Create** when you're done.
+
+ :::image type="content" source="media/create-new-feed-server-2022.png" alt-text="Screenshot that shows how to create a new feed in Azure DevOps Server 2022.":::
+
+::: moniker-end
+
+::: moniker range="azure-devops-2020"
+
+4. Select **Create** when you're done.
+
+ :::image type="content" source="media/create-new-feed-server-2020.png" alt-text="Screenshot that shows how to create a new feed in Azure DevOps Server 2020.":::
+
+::: moniker-end
+
+## Prepare the code
+
+#### [Without GitHub Copilot](#tab/withoutgithubcopilot/)
+
+Follow these steps to create a basic Class Library project from the command line, set up your package's metadata, and generate a NuGet package:
+
+1. On your local machine, create a new folder and give it a name.
+
+1. Open a command prompt window and navigate to the folder you created.
+
+1. Run the following command to create a new Class Library project:
+
+ ```dotnetcli
+ dotnet new classlib
+ ```
+
+1. Open your *csproj* file and add your package metadata within the `` tag. Your file structure should resemble the following:
+
+ ```xml
+
+
+
+ net8.0
+ demo_class_library
+ enable
+ enable
+
+ YOUR_PACKAGE_NAME
+ YOUR_PACKAGE_VERSION
+ YOUR_NAME
+ YOUR_COMPANY
+
+
+
+
+ ```
+
+1. Run the following command to package your project and generate a *.nupkg* artifact. your NuGet package is generated in the `bin\release` directory.
+
+ ```dotnetcli
+ dotnet pack
+ ```
+
+#### [With GitHub Copilot](#tab/githubcopilot/)
+
+Before publishing a package to the feed you created earlier, you must first pack your project and prepare it for publishing.
+
+The following example walks you through using GitHub Copilot to create a sample .NET Core class library and generate a NuGet package from the command line. You can also use GitHub Copilot to generate other types of projects, such as npm or Python projects.
+
+1. Open Visual Studio Code and select the chat icon from the left navigation panel to open the GitHub Copilot Chat.
+
+1. In the prompt box. ask GitHub copilot: "How do I create a .NET Core project and package it as a NuGet package?". GitHub Copilot's response might be something similar to the following:
+
+ :::image type="content" source="media/create-project-github-copilot-response.png" alt-text="A screenshot that shows a response from GitHub Copilot Chat.":::
+
+1. Follow the provided steps to generate your project, define your package ID and version, and pack your project.
+
+You can also ask GitHub Copilot to explain your project structure using the `@workspace` command, which lets you interact with the files and folders in your current workspace.
+
+> `@workspace` explain my app structure
+
+:::image type="content" source="media/github-copilot-app-structure.png" alt-text="A screenshot that shows GitHub Copilot explaining workspace app structure.":::
+
+Another useful method to understand new source code is to ask GitHub Copilot how specific files are related within the project. For example, you can ask how the *csproj* file is related to the *Class1.cs* file:
+
+> #file:artifacts-github-copilot.csproj #file:Class1.cs how are these files related
+
+:::image type="content" source="media/github-copilot-csproj-class-relation.png" alt-text="A screenshot that shows GitHub Copilot response in Visual Studio Code.":::
+
+
+* * *
+
+## Connect to a feed
+
+::: moniker range="azure-devops"
+
+1. Select **Artifacts** and then select your feed from the dropdown menu.
+
+1. Select **Connect to feed**, and then select **dotnet** from the **NuGet** section.
+
+1. Follow the instructions in the **Project setup** to set up your *nuget.config* file. The structure of your file should look similar to this:
+
+ - **Project-scoped feed**:
+
+ ```xml
+
+
+
+
+
+
+
+ ```
+
+ - **Organization-scoped feed**:
+
+ ```xml
+
+
+
+
+
+
+
+ ```
+
+::: moniker-end
+
+::: moniker range="azure-devops-2020 || azure-devops-2022"
+
+1. Sign in to your Azure DevOps collection, and then navigate to your project.
+
+1. Select **Artifacts**, and then select your feed from the dropdown menu.
+
+1. Select **Connect to Feed**, and then select **dotnet** from the left navigation pane.
+
+1. Follow the instructions in the **Project setup** section to configure your *nuget.config* file and connect to your feed.
+
+ :::image type="content" source="media/connect-to-feed-dotnet-server-2020-and-2022.png" alt-text="A screenshot that shows how to connect to a feed with dotnet in Azure DevOps Server 2020 and 2022.":::
+
+::: moniker-end
+
+> [!TIP]
+> You can ask GitHub Copilot, "how to add a new package source to an existing *nuget.config* file". Copilot will guide you through using the `nuget sources Add` command to add your new feed source URL to your *nuget.config* file.
+
+## Publish packages
+
+Run the following command from your project directory to publish your package. The ApiKey is required, but you can use any string value when publishing to an Azure Artifacts feed.
+
+```dotnetcli
+dotnet nuget push --source --api-key az
+```
+
+## Next steps
+
+> [!div class="nextstepaction"]
+> [Monitor Artifacts storage](artifact-storage.md)
+> [Share packages publicly](tutorials/share-packages-publicly.md)
+> [Manage permissions](feeds/feed-permissions.md)
diff --git a/docs/artifacts/get-started-cargo.md b/docs/artifacts/get-started-cargo.md
new file mode 100644
index 00000000000..8104c6ef715
--- /dev/null
+++ b/docs/artifacts/get-started-cargo.md
@@ -0,0 +1,113 @@
+---
+title: Get started with Cargo packages in Azure Artifacts
+description: How to use Azure Artifacts to publish and download Cargo packages.
+ms.service: azure-devops-artifacts
+ms.topic: quickstart
+ms.date: 07/11/2023
+monikerRange: '>= azure-devops-2022'
+"recommendations": "true"
+---
+
+# Get started with Cargo packages in Azure Artifacts
+
+[!INCLUDE [version-gt-eq-2022](../includes/version-gt-eq-2022.md)]
+
+Using Azure Artifacts, you can publish and download Cargo packages to feeds and public registries. This article guides you through setting up your project and publishing your Cargo packages to your Azure Artifacts feed.
+
+## Prerequisites
+
+- An Azure DevOps organization and a project. Create an [organization](../organizations/accounts/create-organization.md) or a [project](../organizations/projects/create-project.md#create-a-project) if you haven't already.
+
+- Download and install [rustup](https://rustup.rs/).
+
+## Create a feed
+
+If you already have an existing Azure Artifacts feed that can be used for Cargo you can jump to the next section.
+
+> [!NOTE]
+> Azure Artifacts recommends using a distinct feed for consuming crates from crates.io, and a separate feed exclusively for publishing internal crates.
+
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
+
+1. Select **Artifacts**, and then select **Create Feed**.
+
+1. Give your feed a **Name** and specify its **Visibility**. Check the **Upstream sources** checkbox if you want to include packages from public registries and then select a **Scope** for your feed.
+
+1. Select **Create** when you're done.
+
+## Connect to a feed
+
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
+
+1. Select **Artifacts**, and then select your feed from the dropdown menu.
+
+1. Select **Connect to feed**, and then select **Cargo** from the tool selection pane.
+
+1. Follow the **Project setup** instructions on the **Connect to feed** page.
+
+::: moniker range="azure-devops"
+
+> [!IMPORTANT]
+> Cargo support in Azure Artifacts requires rust version [1.74](https://rustup.rs/) or newer which includes support for the 'registry-auth' feature.
+> To update your rust version, run `rustup update`
+
+::: moniker-end
+
+::: moniker range="azure-devops-2022"
+
+> [!IMPORTANT]
+> Cargo is currently in preview and may require the [nightly toolchain](https://rust-lang.github.io/rustup/concepts/toolchains.html) with the `registry-auth` [unstable-feature](https://doc.rust-lang.org/cargo/reference/unstable.html) enabled. To enable `registry-auth`, add the following to [.cargo/config.toml](https://doc.rust-lang.org/cargo/reference/config.html).
+>
+> ```
+> [unstable]
+> registry-auth = true
+> ```
+>
+> To use the nightly toolchain, run the following command:
+>
+> ```
+> rustup default nightly
+> ```
+
+::: moniker-end
+
+## Publish packages
+
+To publish your Cargo package, run the following command in your project directory:
+
+```
+cargo publish
+```
+
+If you encounter `GLib-GObject-CRITICAL - libsecret-CRITICAL` error, make sure you follow these steps:
+
+1. Verify *libsecret* is installed:
+
+ ```
+ sudo apt update && sudo apt install libsecret-1-0
+ ```
+
+1. Make sure *gnome-keyring* is running:
+
+ ```
+ gnome-keyring-daemon --start --components=secrets
+ ```
+
+1. Update Rust to the latest stable version and set stable as the default toolchain:
+
+ ```
+ rustup update
+ rustup default stable
+ ```
+
+1. You should also run cargo publish with verbose logging to get more details:
+
+ ```
+ RUST_LOG=debug cargo publish --registry
+ ```
+
+## Related articles
+
+- [Feed permissions](feeds/feed-permissions.md)
+- [Delete/Yank Cargo packages](how-to/delete-and-recover-packages.md?tabs=cargo)
+- [Promote a package to a view](feeds/views.md)
diff --git a/docs/artifacts/get-started-maven.md b/docs/artifacts/get-started-maven.md
index 6b89a7151a2..118c6b8b009 100644
--- a/docs/artifacts/get-started-maven.md
+++ b/docs/artifacts/get-started-maven.md
@@ -1,42 +1,70 @@
---
title: Get started with Maven packages
-description: learn how to publish and download Maven artifacts
+description: Learn how to publish and restore Maven packages with Azure Artifacts.
ms.service: azure-devops-artifacts
ms.topic: quickstart
ms.assetid: C5112218-DA7E-4016-986D-2D0F70DAFA44
-ms.date: 05/06/2022
+ms.date: 07/01/2024
monikerRange: '<= azure-devops'
---
-# Get started with Maven packages and Azure Artifacts
+# Get started with Maven packages in Azure Artifacts
[!INCLUDE [version-lt-eq-azure-devops](../includes/version-lt-eq-azure-devops.md)]
-This quickstart will guide you through setting up your Maven project to connect to Azure Artifacts feeds and publish and download your Maven packages.
+Azure Artifacts enables developers to manage their dependencies from a single feed while providing control over package sharing. With Azure Artifacts feeds, you can publish and restore Maven packages, and set up upstream sources to consume packages from public registries like Maven Central, Google Maven Repository, Gradle Plugins, and JitPack. This article will guide you through setting up your Maven project, connecting to an Azure Artifacts feed, and publishing and restoring your Maven packages.
-### Prerequisites
+## Prerequisites
-- An Azure DevOps organization. [Create an organization](../organizations/accounts/create-organization.md), if you don't have one already.
-- [Install Apache Maven](https://maven.apache.org/download.cgi).
-- An Azure Artifacts feed. [Create a feed](./concepts/feeds.md#create-public-feeds.) if you don't have one already.
+- Create an Azure DevOps [organization](../organizations/accounts/create-organization.md) and a [project](../organizations/projects/create-project.md#create-a-project) if you haven't already.
-## Set up authentication
+- [Download](https://maven.apache.org/download.cgi) and [Install](https://maven.apache.org/install.html) Apache Maven.
+
+## Create a feed
+
+[!INCLUDE [](includes/create-feed.md)]
+
+## Connect to a feed
[!INCLUDE [](includes/maven/pom-and-settings.md)]
-> [!TIP]
-> If you are using [Maven task](/azure/devops/pipelines/tasks/reference/maven-v3), set the `mavenAuthenticateFeed` argument to true to automatically authenticate with your Maven feed.
+## Publish packages
+
+1. Open a command prompt window and navigate to your project directory where your *pom.xml* file is located, and then run the following command to package your project. This command compiles your code, runs tests included, and packages your project into a distributable format (such as a JAR file).
+
+ ```
+ mvn package
+ ```
+
+1. Run the following command from your project directory to publish your package to your feed:
+
+ ```
+ mvn deploy
+ ```
+
+1. After successfully deploying your package, it will shortly be available in your feed.
+
+ :::image type="content" source="media/get-started-maven/maven-package-published-to-feed-contracted.png" alt-text="A screenshot that shows a Maven package deployed to a feed." lightbox="media/get-started-maven/maven-package-published-to-feed.png":::
+
+> [!NOTE]
+> If your organization is using a firewall or a proxy server, make sure you allow [Azure Artifacts Domain URLs and IP addresses](../organizations/security/allow-list-ip-url.md#azure-artifacts).
+
+## Restore packages
+
+1. Navigate to **Artifacts** in your Azure DevOps project, select your feed from the dropdown menu, and then select the package you wish to install.
-## Publish artifacts
+1. Navigate to **Overview** > **Maven**, then copy the dependency snippet.
-[!INCLUDE [](includes/maven/publish.md)]
+1. Open your *pom.xml* file and paste the snippet inside the `` tag.
-## Install artifacts
+1. Run the following command from the directory where your *pom.xml* file is located to restore your packages:
-[!INCLUDE [](includes/maven/install.md)]
+ ```
+ mvn install
+ ```
## Related articles
-- [Configure permissions](./feeds/feed-permissions.md)
-- [Use feed views to share packages](./feeds/views.md)
-- [Set up upstream sources](./how-to/set-up-upstream-sources.md)
+- [Publish Maven artifacts with Azure Pipelines](../pipelines/artifacts/publish-maven-artifacts.md)
+- [Use packages from Maven Central](maven/upstream-sources.md)
+- [Use upstream sources in a public feed](how-to/public-feeds-upstream-sources.md)
diff --git a/docs/artifacts/get-started-npm.md b/docs/artifacts/get-started-npm.md
index 70ecc5e5faa..08c3d6cbe3c 100644
--- a/docs/artifacts/get-started-npm.md
+++ b/docs/artifacts/get-started-npm.md
@@ -1,11 +1,10 @@
---
-title: publish and download npm packages
-description: How to set up your .npmrc config file to publish and download npm packages
+title: Publish and download npm packages
+description: Learn how to set up your project to manage your npm packages in Azure Artifacts.
ms.service: azure-devops-artifacts
ms.topic: quickstart
ms.assetid: 5BFBA0C3-85ED-40C9-AC5F-F686923160D6
-ms.custom: contperf-fy20q4, conterperfq3, contperf-fy21q3
-ms.date: 04/13/2022
+ms.date: 05/28/2024
monikerRange: '<= azure-devops'
"recommendations": "true"
---
@@ -14,148 +13,71 @@ monikerRange: '<= azure-devops'
[!INCLUDE [version-lt-eq-azure-devops](../includes/version-lt-eq-azure-devops.md)]
-With Azure Artifacts, you can publish and download npm packages from feeds and public registries such as npmjs.com. This quickstart will guide you through creating your own feed, setting up your project, and publishing and downloading npm packages to and from your Azure Artifacts feed.
+Using Azure Artifacts, you can publish and download your npm packages from feeds and public registries such as npmjs.com. This quickstart will guide you through creating your feed, configuring your project, and managing npm packages with your Azure Artifacts feed.
-::: moniker range="tfs-2018"
+## Prerequisites
-## License the Azure Artifacts extension
+- An Azure DevOps organization. [Create one for free](../organizations/accounts/create-organization.md).
-To use Azure Artifacts in TFS, you must upgrade to Visual Studio Team Foundation Server 2017. If the Azure Artifacts extension has been removed, you can install it from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=ms.feed).
+- An Azure DevOps project. Create a new [project](../organizations/projects/create-project.md#create-a-project) if you don't have one already.
-### Assign licenses in Team Foundation Server
-
-Each organization gets five free licenses. If you need more than five licenses, go to the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=ms.feed), and select **Get it free**.
-
-If you aren't sure, you can select **Start 30-day free trial**. Every user in your organization is then granted access to Azure Artifacts for 30 days. After the 30-day trial period, your organization reverts back to five entitled users, and you must assign licenses to individual users. If you need additional licenses at this point, you can purchase them from Visual Studio Marketplace. If you have a license for Visual Studio Enterprise, you already have access to Azure Artifacts and don't need to be assigned a license. Just ensure that you've been assigned the "Visual Studio Enterprise" access level.
-
-> [!NOTE]
-> If you selected **Start 30 day free trial** and are still in the trial period, every user is granted access. Licenses don't need to be assigned until the trial period ends.
-
-1. From any collection in Team Foundation Server, hover over the settings menu and select **Users**. Then select **Package Management**.
-
- :::image type="content" source="media/users-hub-tfs.png" alt-text="Screenshot showing the user page in TFS":::
-
-1. Select **Assign**, enter the users you want to assign licenses, and then select **OK**.
-
- * Users with Visual Studio Enterprise subscriptions get Azure Artifacts for free. Make sure that your Visual Studio Enterprise subscribers have the appropriate access level. For more information, see [Change access levels](../organizations/security/change-access-levels.md).
-
- * Users who are using an instance of Team Foundation Server that's disconnected from the internet (and thus can't purchase licenses from Visual Studio Marketplace) can still assign licenses purchased through an enterprise agreement.
-
-::: moniker-end
+- [Download and install Node.js and npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm).
## Create a feed
-A feed is an organizational construct that allows users to store their packages and control who can access them. Azure Artifacts support storing several package types in a single feed such as NuGet, npm, Maven, Python, and Universal packages.
-
[!INCLUDE [](includes/create-feed.md)]
-::: moniker range="azure-devops"
-
-## Set up your .npmrc files
+## Connect to a feed
> [!NOTE]
-> `vsts-npm-auth` is not supported in TFS and Azure DevOps Server.
-
-We recommend having two .npmrc files. The first one should be placed in the same directory as your package.json file. The second one should be placed in the **$home** directory (Linux/macOS) or **$env.HOME** (Windows) to store your credentials. The npm client then will be able to look up this file and fetch your credentials for authentication. This enables you to share your config file while keeping your credentials secure.
-
-1. Select **Artifacts**, and then select **Connect to feed**.
-
- :::image type="content" source="media/connect-to-feed-azure-devops-newnav.png" alt-text="Screenshot showing how to connect to a feed":::
-
-1. Select **npm**. If this is your first time using Azure Artifacts, select **Get the tools** and then follow the steps to download Node.js and set up the credential provider.
-
-1. Follow the instructions in the **Project setup** to set up your project.
-
- :::image type="content" source="media/npm-azure-devops-newnav.png" alt-text="Screenshot showing how to set up your project":::
+> `vsts-npm-auth` is not supported in Azure DevOps Server.
-::: moniker-end
-
-::: moniker range=">= azure-devops-2019"
-
-### Set up authentication on your development machine
-
-> [!IMPORTANT]
-> npm supports a single `registry` in your .npmrc file. Multiple registries are possible with [scopes](npm/scopes.md) and [upstream sources](npm/upstream-sources.md).
+Azure Artifacts recommends using two .npmrc files. The first one should be placed in the *$home* directory (Linux/macOS) or *$env.HOME* (Windows) to securely store your credentials. This allows the npm client to locate the file and retrieve your credentials for authentication, enabling you to share your config file without exposing your credentials. In this section, we will set up the second *.npmrc* file, which should be placed in the same directory as your *package.json* file.
-#### [Windows](#tab/Windows/)
+::: moniker range="azure-devops"
-If you're developing on Windows, we recommend using `vsts-npm-auth` to authenticate with Azure Artifacts. Run `npm install -g vsts-npm-auth` to install the package globally and then add a run script to your package.json.
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
-```JSON
-"scripts": {
- "refreshVSToken": "vsts-npm-auth -config .npmrc"
-}
-```
-
-#### [Other](#tab/Other/)
-
-To authenticate with Azure Artifacts, we have to create a personal access token and add it to our .npmrc file.
+1. Select **Artifacts**, and then select **Connect to feed**.
-1. Copy the following code snippet to your .npmrc file.
+1. Select **npm** from the left navigation area. If this is your first time using Azure Artifacts with npm, make sure you've installed the prerequisites.
- - **Organization-scoped feed**:
+1. Follow the instructions in the **Project setup** section to set up your config file and connect to your feed.
- ```Command
- ; begin auth token
- //pkgs.dev.azure.com//_packaging//npm/registry/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
- //pkgs.dev.azure.com//_packaging//npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
- //pkgs.dev.azure.com//_packaging//npm/registry/:email=npm requires email to be set but doesn't use the value
- //pkgs.dev.azure.com//_packaging//npm/:username=[ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
- //pkgs.dev.azure.com//_packaging//npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
- //pkgs.dev.azure.com//_packaging//npm/:email=npm requires email to be set but doesn't use the value
- ; end auth token
- ```
-
- - **Project-scoped feed**:
+ :::image type="content" source="media/npm-project-setup-azure-devops.png" alt-text="A screenshot that shows how to set up an npm project and connect to an Azure Artifacts feed in Azure DevOps Services.":::
- ```Command
- ; begin auth token
- //pkgs.dev.azure.com///_packaging//npm/registry/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
- //pkgs.dev.azure.com///_packaging//npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
- //pkgs.dev.azure.com///_packaging//npm/registry/:email=npm requires email to be set but doesn't use the value
- //pkgs.dev.azure.com///_packaging//npm/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
- //pkgs.dev.azure.com///_packaging//npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
- //pkgs.dev.azure.com///_packaging//npm/:email=npm requires email to be set but doesn't use the value
- ; end auth token
- ```
+::: moniker-end
-1. Generate a [personal access token](../organizations/accounts/use-personal-access-tokens-to-authenticate.md) with **packaging read and write** scopes.
+::: moniker range="azure-devops-2022"
-1. Encode your newly generated personal access token as follows:
+1. Sign in to your Azure DevOps collection, and then navigate to your project.
- 1. Run the following command in an elevated command prompt window.
-
- ```Command
- node -e "require('readline') .createInterface({input:process.stdin,output:process.stdout,historySize:0}) .question('PAT> ',p => { b64=Buffer.from(p.trim()).toString('base64');console.log(b64);process.exit(); })"
- ```
+1. Select **Artifacts**, and then select **Connect to Feed**.
- 1. Paste your personal access token, and then press **Enter**.
-
- 1. Copy the Base64 encoded value.
+1. Select **npm** from the left, and then follow the instructions in the **Project setup** section to connect to your feed.
-1. Replace the `[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]` placeholder in your .npmrc file with your Base64 personal access token.
+ :::image type="content" source="media/npm-project-setup-server-2022-1.png" alt-text="A screenshot that shows how to set up an npm project and connect to an Azure Artifacts feed in Azure DevOps Server 2022.":::
::: moniker-end
-* * *
+::: moniker range="azure-devops-2020"
-::: moniker range="tfs-2018"
+1. Sign in to your Azure DevOps collection, and then navigate to your project.
-## Connect to feed
-
-1. Select **Packages**, and then select **Connect to feed**.
-
-2. Select **npm**.
+1. Select **Artifacts**, and then select **Connect to feed**.
-3. Select **Generate npm credentials**. Copy the credentials and add them to your .npmrc file.
+1. Select **npm** from the left, and then follow the instructions in **Project setup** to set up your config file and connect to your feed.
- :::image type="content" source="./media/tfs2018-connect-to-npm-feed.png" alt-text="Screenshot showing how generate credentials":::
+ :::image type="content" source="media/npm-project-setup-server-2020-1.png" alt-text="A screenshot that shows how to set up an npm project and connect to an Azure Artifacts feed in Azure DevOps Server 2020.":::
::: moniker-end
+> [!IMPORTANT]
+> npm supports a single `registry` in your .npmrc file. Multiple registries are possible with [scopes](npm/scopes.md) and [upstream sources](npm/upstream-sources.md).
+
## Publish packages
-To publish your npm package, run the following command in your project directory
+Run the following command in your project directory to publish your npm packages:
```Command
npm publish
@@ -166,16 +88,20 @@ npm publish
## Restore packages
-To restore an npm package, run the following command in your project directory
+Run the following command in your project directory to restore your npm packages:
+
+```Command
+npm install
+```
+
+To restore a specific npm package, run the following command from your project directory:
```Command
-npm install --save
+npm install --save
```
-## Next steps
+## Related articles
-> [!div class="nextstepaction"]
-> [Publish npm packages (YAML/Classic)](../pipelines/artifacts/npm.md)
-> [Use packages from npmjs.com](./npm/upstream-sources.md)
-> [Use npm scopes](npm/scopes.md)
-> [Use npm audit](npm/npm-audit.md)
+- [Publish npm packages (YAML/Classic)](../pipelines/artifacts/npm.md)
+- [Use packages from npmjs.com](./npm/upstream-sources.md)
+- [Use npm scopes](npm/scopes.md)
diff --git a/docs/artifacts/get-started-nuget.md b/docs/artifacts/get-started-nuget.md
index 3b1f5c9bf53..f5692682f92 100644
--- a/docs/artifacts/get-started-nuget.md
+++ b/docs/artifacts/get-started-nuget.md
@@ -1,78 +1,75 @@
---
-title: Get started with NuGet packages and Azure Artifacts
-description: Use Azure Artifacts to publish and download NuGet packages from your feeds
+title: "Quickstart: Get started with NuGet packages and Azure Artifacts"
+description: Learn how to use Azure Artifacts to publish and download NuGet packages from your feed.
ms.service: azure-devops-artifacts
-ms.custom: contperf-fy21q3
ms.topic: quickstart
+ms.author: rabououn
+author: ramiMSFT
ms.assetid: C5112218-DA7E-4016-986D-2D0F70DAFA44
-ms.date: 06/08/2023
+ms.date: 05/14/2024
monikerRange: '<= azure-devops'
"recommendations": "true"
---
-# Get started with NuGet packages in Azure Artifacts
+# Quickstart: Get started with NuGet packages in Azure Artifacts
[!INCLUDE [version-lt-eq-azure-devops](../includes/version-lt-eq-azure-devops.md)]
-Azure Artifacts enables developers to publish and download NuGet packages from different sources such as feeds and public registries. With Azure Artifacts, you can create feeds that can be either private, allowing you to share packages with your team and specific users, or public, enabling you to share them openly with anyone on the internet.
+Azure Artifacts enables developers to publish and download NuGet packages from sources such as feeds and public registries. With Azure Artifacts, you can create feeds that are either:
-In this article, you'll learn how to:
+* Private, so you can share packages with your team and specific users.
+* Public, so you can share packages openly with anyone on the internet.
-> [!div class="checklist"]
-> * Create a new feed
-> * Set up your project and connect to your feed
-> * Publish NuGet packages
-> * Download packages from your feed
+In this quickstart, you learn how to:
-## Prerequisites
+> [!div class="checklist"]
+>
+> * Create a new feed.
+> * Set up your project and connect to your feed.
+> * Publish NuGet packages.
+> * Download packages from your feed.
-- An Azure DevOps organization and a project. Create an [organization](../organizations/accounts/create-organization.md) or a [project](../organizations/projects/create-project.md#create-a-project) if you haven't already.
+## Prerequisites
-- Install the [latest NuGet version](https://www.nuget.org/downloads).
+* Create an Azure DevOps [organization](../organizations/accounts/create-organization.md) and a [project](../organizations/projects/create-project.md#create-a-project) if you haven't already.
-- Install [Azure Artifacts Credential Provider](https://github.com/microsoft/artifacts-credprovider#azure-artifacts-credential-provider).
+* Install the [latest NuGet version](https://www.nuget.org/downloads).
-## Create a feed
+* Install the [Azure Artifacts Credential Provider](https://github.com/microsoft/artifacts-credprovider#azure-artifacts-credential-provider).
-Azure Artifacts offers two types of feeds: project-scoped feeds and organization-scoped feeds. if you want to create a public feed, begin by creating a project-scoped feed, and then adjust the visibility settings of the project hosting your feed to public. This will effectively make your project-scoped feed accessible to the public.
+## Create a feed
[!INCLUDE [](includes/create-feed.md)]
-## Connect to feed
+## Connect to a feed
-::: moniker range=">= azure-devops-2019"
+::: moniker range="azure-devops"
-1. Sign in to your Azure DevOps organization, and then navigate to your project.
+1. Sign in to your Azure DevOps organization, and then go to your project.
1. Select **Artifacts**, and then select your feed from the dropdown menu.
-1. Select **Connect to feed**.
+1. Select **Connect to Feed**, and then select **NuGet.exe** from the left pane. If this is your first time using Azure Artifacts with *Nuget.exe*, ensure that you installed all the prerequisites.
- :::image type="content" source="./media/connect-to-feed-azure-devops-newnav.png" alt-text="A screenshot showing the connect to feed button.":::
+ :::image type="content" source="./media/connect-to-feed-azure-devops-newnav.png" alt-text="Screenshot that shows the button for connecting to a feed.":::
-1. Select **NuGet.exe**. If this is the first time using Azure Artifacts with Nuget.exe, ensure that you have installed all the prerequisites.
+1. Follow the instructions in the **Project setup** section to configure your *nuget.config* file and authenticate with Azure Artifacts.
-1. Follow the instructions provided in the **Project setup** section to configure your nuget.config file.
-
- :::image type="content" source="./media/project-setup.png" alt-text="A screenshot showing how to set up your project.":::
+ :::image type="content" source="./media/project-setup.png" alt-text="Screenshot that shows onscreen instructions for setting up a project.":::
::: moniker-end
-::: moniker range="tfs-2018"
-
-1. Navigate to your project `http://ServerName:8080/tfs/DefaultCollection/`.
+::: moniker range="azure-devops-2020 || azure-devops-2022"
-1. Select **Build and Release** > **Packages**.
+1. Sign in to your Azure DevOps server, and then go to your project.
-1. Select your feed from the dropdown menu.
-
-1. Select **Connect to feed**.
+1. Select **Artifacts**, and then select your feed from the dropdown menu.
- :::image type="content" source="./media/connect-to-feed.png" alt-text="A screenshot showing the connect to feed button in TFS.":::
+1. Select **Connect to Feed**, and then select **NuGet.exe** from the left pane.
-1. Select **NuGet**, and then follow the instruction to connect to your feed.
+1. Follow the instructions in the **Project setup** section to connect to your feed.
- :::image type="content" source="./media/connect-to-nuget-feed-tfs.png" alt-text="A screenshot showing how to connect to your feed in TFS.":::
+ :::image type="content" source="./media/connect-to-feed-nuget-server-2020.png" alt-text="Screenshot that shows onscreen instructions for setting up a NuGet project in Azure DevOps Server 2020 and 2022.":::
::: moniker-end
@@ -80,19 +77,40 @@ Azure Artifacts offers two types of feeds: project-scoped feeds and organization
[!INCLUDE [](includes/nuget/consume.md)]
+::: moniker range="azure-devops"
+
> [!NOTE]
-> Using NuGet Package Explorer to search for packages in upstreams is not supported.
+> Using NuGet Package Explorer to search for packages in upstream sources is not supported.
+
+::: moniker-end
## Publish packages
-Run the following command to publish your package to your feed. You can use any string for the *ApiKey* argument.
+To publish your package to your feed, run the following command. You can enter any string for the `ApiKey` argument.
```Command
nuget.exe push -Source -ApiKey key
```
-## Related articles
+**Examples:**
+
+- Project-scoped feed:
+
+ ```CLI
+ nuget.exe push -Source https://pkgs.dev.azure.com/myOrganization/MyProject/_packaging/MyFeed/nuget/v3/index.json -ApiKey AZ release/myDemoPackage.1.0.0.nupkg
+ ```
+
+- Organization-scoped feed:
+
+ ```CLI
+ nuget.exe push -Source https://pkgs.dev.azure.com/myOrganization/_packaging/myFeed/nuget/v3/index.json -ApiKey AZ release/myDemoPackage.1.0.0.nupkg
+ ```
+
+> [!NOTE]
+> The `ApiKey` is required, but you can use any arbitrary value when publishing to Azure Artifacts feeds.
+
+## Related content
-- [Publish NuGet packages with Azure Pipelines](../pipelines/artifacts/nuget.md)
-- [Publish packages to NuGet.org](./nuget/publish-to-nuget-org.md)
-- [NuGet.org upstream source](./nuget/upstream-sources.md)
\ No newline at end of file
+* [Publish NuGet packages with Azure Pipelines (YAML/classic)](../pipelines/artifacts/nuget.md)
+* [Publish packages to NuGet.org](./nuget/publish-to-nuget-org.md)
+* [Use packages from NuGet Gallery](./nuget/upstream-sources.md)
diff --git a/docs/artifacts/how-to/delete-and-recover-packages.md b/docs/artifacts/how-to/delete-and-recover-packages.md
index 2bb122b38a5..a1004de0fb8 100644
--- a/docs/artifacts/how-to/delete-and-recover-packages.md
+++ b/docs/artifacts/how-to/delete-and-recover-packages.md
@@ -1,11 +1,11 @@
---
title: Delete and recover packages
-description: Learn how to delete packages manually and with retention policies, and how to recover deleted packages from the Recycle Bin.
+description: Learn how to manually delete packages, set up retention policies, and recover deleted packages from the Recycle Bin.
ms.service: azure-devops-artifacts
ms.assetid: 10f5e81f-2518-41b9-92b6-e00c905b59b3
-ms.custom: contperf-fy21q2, contperf-fy22q1
-ms.topic: conceptual
-ms.date: 02/16/2022
+ms.custom: peer-review-program
+ms.topic: how-to
+ms.date: 03/13/2025
monikerRange: '<= azure-devops'
"recommendations": "true"
---
@@ -14,292 +14,239 @@ monikerRange: '<= azure-devops'
[!INCLUDE [version-lt-eq-azure-devops](../../includes/version-lt-eq-azure-devops.md)]
-Azure Artifacts safely stores different types of packages in your feed, whether you published them directly or saved them from upstream sources. As older package versions fall out of use, you might want to clean them up either manually or automatically by using retention policies.
+Azure Artifacts securely stores various package types in a feed, whether published directly or saved from upstream sources. As older package versions become less relevant, you can remove them manually or by using retention policies to free up space and reduce costs.
-In this article, you'll learn how to:
+## Prerequisites
-> [!div class="checklist"]
-> * Delete packages from feeds.
-> * Set up retention policies to automatically delete older packages.
-> * Recover recently deleted packages from the Recycle Bin.
-
-> [!NOTE]
-> You must be a feed **Owner** or **Administrator** to delete packages or set up retention policies.
+| **Product** | **Requirements** |
+|--------------------|----------------------|
+| **Azure DevOps** | - An Azure DevOps [organization](../../organizations/accounts/create-organization.md).
- An Azure DevOps [project](../../organizations/projects/create-project.md).
- An [Azure Artifacts feed](../start-using-azure-artifacts.md#create-a-new-feed).
- **Permissions:**
- You must be a [Feed Owner](../feeds/feed-permissions.md#permissions-table) to set up retention policies, delete packages and feeds, or restore packages from the recycle bin.
- You must be a [Feed Publisher (Contributor)](../feeds/feed-permissions.md#permissions-table) or higher to unlist, deprecate, or yank packages. |
## Delete packages
-In Azure Artifacts, packages are immutable. When you publish a package to your feed, its version number will be reserved permanently. You can't upload a new package with that same version number, even if you delete it from your feed.
+In Azure Artifacts, packages are immutable, meaning their version numbers cannot be reused or modified after publishing. Once you publish a package to a feed, its version number is permanently reserved. Even if you delete the package, its version remains recorded in the feed’s history, and you cannot publish a new package with the same version number.
#### [NuGet](#tab/nuget/)
-Two options are available to delete a NuGet package from your feed, [Unlist](#qa) and [Delete](#qa).
+There are two ways to remove a NuGet package from a feed: [Unlist](#qa) and [Delete](#qa). Unlisting a package version hides it from search results in Azure Artifacts feeds and on *NuGet.org*. Deleting a package version moves it to the recycle bin and makes it unavailable for installation.
-> [!NOTE]
-> You must be a **Contributor** to unlist a package and an **Owner** to delete it.
+::: moniker range="<=azure-devops"
-::: moniker range=">= azure-devops-2019"
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
-1. Select **Artifacts**, and then select your feed.
+1. Select **Artifacts**, and then select your feed from the dropdown menu.
-1. Select the package that you want to delete or deprecate, and then select **Unlist** or **Delete latest**.
+1. Select the package you want to delete, then select **Unlist** to hide it from search results in Azure Artifacts feeds and on *NuGet.org*, or **Delete** to move it to the recycle bin.
- :::image type="content" source="../media/delete/unlist-delete-nuget-package-newnav.png" alt-text="Screenshot that shows buttons for unlisting and deleting NuGet packages.":::
+ :::image type="content" source="../media/delete/unlist-delete-nuget-package-newnav.png" alt-text="A screenshot displaying how to delete or unlist a NuGet package in Azure Artifacts.":::
::: moniker-end
-::: moniker range="tfs-2018"
-
-1. Select **Build and Release**.
-
-1. Select **Packages**, and then select the package that you want to delete.
-
-1. Select **Unlist** or **Delete latest**.
-
- :::image type="content" source="../media/delete/unlist-delete-nuget-package.png" alt-text="Screenshot that shows the buttons for unlisting and deleting NuGet packages in Team Foundation Server.":::
-
-::: moniker-end
-
-### Unlist a NuGet package by using NuGet.exe
-
-1. Select **Artifacts**, and then go to your feed. Select **Connect to feed**.
-
- ::: moniker range=">= azure-devops-2019"
-
- :::image type="content" source="../media/connect-to-feed-azure-devops-newnav.png" alt-text="Screenshot that shows the button for connecting to a feed.":::
+### Unlist packages (CLI)
- ::: moniker-end
+1. Sign in to your Azure DevOps organization, then navigate to your project.
- ::: moniker range="tfs-2018"
+1. Select **Artifacts**, then select your feed from the dropdown menu.
- :::image type="content" source="../media/connect-to-feed.png" alt-text="Screenshot that shows the button for connecting to a feed in Team Foundation Server.":::
+1. Select **Connect to feed** > **NuGet.exe**, then find and copy your **Package Source** URL. It should follow this format: `https://pkgs.dev.azure.com/OrganizationName/ProjectName/_packaging/FeedName/nuget/v3/index.json`.
- ::: moniker-end
-
-2. Select **NuGet.exe**, and then find and copy your **Package Source** URL.
-
-3. Run the following command:
+1. Run the following command to unlist your package. The **ApiKey** argument is required but is treated as a placeholder when publishing to an Azure Artifacts feed, so you can use any string value:
```Command
- nuget.exe delete -Source -ApiKey
+ nuget.exe delete -Source -ApiKey
```
-> [!NOTE]
-> Azure DevOps and Visual Studio Team Foundation Server interpret the `nuget.exe delete` command as an unlist operation. To delete a package, you must use the [REST API](/rest/api/azure/devops/artifactspackagetypes/nuget/delete-package-version) or the web interface.
+> [!IMPORTANT]
+> Azure DevOps interprets the `nuget.exe delete` command as an unlisting operation. This means that running the command does not delete the package, but instead hides it from search results in Azure Artifacts feeds and on NuGet.org. To delete a package from your feed, you must use the [REST API](/rest/api/azure/devops/artifactspackagetypes/nuget/delete-package-version) or delete it manually from the web interface.
#### [npm](#tab/npm/)
-There are two options to delete an npm package from your feed, [Deprecate](#qa) and [Unpublish](#qa).
+There are two ways to remove an npm package from a feed: [Deprecate](#qa) or [Delete](#qa) them. Deprecating a package adds a warning message to its metadata, which will be displayed whenever the package is viewed or installed. Deleting a package version, on the other hand, moves it to the recycle bin and makes it unavailable for installation.
-> [!NOTE]
-> You must be a **Contributor** to deprecate a package and an **Owner** to unpublish it.
+::: moniker range="<=azure-devops"
-::: moniker range=">= azure-devops-2019"
+1. Sign in to your Azure DevOps organization, then navigate to your project.
-1. Select **Artifacts**, and then select your feed.
+1. Select **Artifacts**, then select your feed from the dropdown menu.
-1. Select the package that you want to delete or deprecate, and then select **Deprecate** or **Unpublish latest**.
+1. Select the package you want to delete, then select **Deprecate** or **Delete**.
- :::image type="content" source="../media/delete/deprecate-unpublish-npm-package-newnav.png" alt-text="Screenshot that shows the buttons for deprecating and unpublishing.":::
+ :::image type="content" source="../media/npm-deprecate-delete.png" alt-text="A screenshot displaying how to deprecate or delete an npm package in Azure Artifacts.":::
::: moniker-end
-::: moniker range="tfs-2018"
+### Deprecate or delete packages (CLI)
-1. Select **Build and Release**.
+1. [Set up your project's .npmrc](../npm/npmrc.md).
-1. Select **Packages**, and then select the package that you want to delete.
-
-1. Select **Deprecate** or **Unpublish latest**.
-
- :::image type="content" source="../media/delete/deprecate-unpublish-npm-package.png" alt-text="Screenshot that shows the buttons for deprecating and unpublishing in Team Foundation Server.":::
-
-::: moniker-end
-
-#### Deprecate or unpublish an npm package by using the CLI
-
-1. [Set up your client's .npmrc file](../npm/npmrc.md).
-
-1. Use the following command to deprecate an npm package:
+1. Use the following command to deprecate a package:
```Command
npm deprecate [@]
```
- Use the following command to unpublish an npm package:
+1. If you want to delete your package, run the following command. Keep in mind that the `npm unpublish` command does not remove all versions of the package:
```Command
npm unpublish @
```
-> [!NOTE]
-> The `npm unpublish` command won't unpublish all versions of the package. For more information, see the [deprecate](https://docs.npmjs.com/cli/deprecate) or [unpublish](https://docs.npmjs.com/cli/unpublish) documentation.
-
#### [Python](#tab/python/)
-1. Select **Artifacts**, and then select your feed.
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
-1. Select the package that you want to delete, and then select **Delete latest**.
+1. Select **Artifacts**, and then select your feed from the dropdown menu.
-> [!NOTE]
-> You must be a feed **Owner** to delete a Python package.
+1. Select the package you want to delete, and then select **Delete**.
-:::image type="content" source="../media/delete/delete-python-package.png" alt-text="Screenshot that shows the button for deleting a package in Python.":::
+ :::image type="content" source="../media/python-delete-package.png" alt-text="A screenshot displaying how to delete a Python package in Azure Artifacts." lightbox="../media/python-delete-package.png":::
#### [Maven](#tab/maven/)
-::: moniker range=">= azure-devops-2019"
+::: moniker range="<=azure-devops"
-1. Select **Artifacts**, and then select your feed.
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
-1. Select the package that you want to delete, and then select **Delete latest**. Select **Delete** to confirm.
+1. Select **Artifacts**, and then select your feed from the dropdown menu.
-::: moniker-end
+1. Select the package you want to delete, and then select **Delete**.
-::: moniker range="tfs-2018"
+1. Select **Delete** again to confirm your choice.
-1. Select **Build and Release**, and then select **Packages**.
+ :::image type="content" source="../media/maven-delete-package.png" alt-text="A screenshot displaying how to delete a Maven package in Azure Artifacts.":::
-1. Select your feed, and then select the package that you want to delete.
+::: moniker-end
-1. Select **Delete latest** to delete the latest version of your package.
+#### [Universal Packages](#tab/universal/)
- :::image type="content" source="../media/delete/delete-maven-package.png" alt-text="Screenshot that shows the button to delete packages from feeds.":::
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
-::: moniker-end
+1. Select **Artifacts**, and then select your feed from the dropdown menu.
-#### [Universal Package](#tab/universal/)
+1. Select the package you want to delete, and then select **Delete**.
-1. Select **Artifacts**, and then select your feed.
+ :::image type="content" source="../media/universal-package-delete-package.png" alt-text="A screenshot displaying how to delete a Universal Package in Azure Artifacts.":::
-1. Select the package that you want to delete, and then select **Delete latest**.
+#### [Cargo](#tab/cargo/)
-> [!NOTE]
-> You must be a feed **Owner** to delete a Universal Package.
+There are two ways to remove a Cargo package from a feed: [Yank](#qa) and [Delete](#qa). Yanking a package version marks it as deprecated or unusable, discouraging its use, though it doesn't actually delete the package. Deleting a package version, on the other hand, moves it to the recycle bin and makes it unavailable for installation.
-:::image type="content" source="../media/delete/delete-universal-package.png" alt-text="Screenshot that shows the button for deleting a Universal Package.":::
+1. Sign in to your Azure DevOps organization, then navigate to your project.
-* * *
+1. Select **Artifacts**, then select your feed from the dropdown menu.
-> [!NOTE]
-> Packages sent to the Recycle Bin will be deleted permanently after 30 days. However, these packages still count as part of your storage bill. If you want to delete them sooner, go to the Recycle Bin and delete them manually.
+1. Select the package you wish to delete, and then select **Yank** to mark it as deprecated or **Delete** to move it to the recycle bin.
-## Delete packages automatically with retention policies
+ :::image type="content" source="../media/delete-cargo-package.png" alt-text="A screenshot displaying how to delete or yank a Cargo package.":::
-The number of versions for each package hosted in your feed can grow quickly. To free up storage space, you can set up retention policies to automatically delete old packages.
+* * *
-If you want to retain a package indefinitely, you can promote it to a [view](../concepts/views.md). Packages promoted to a view are exempt from retention policies and won't be deleted.
+## Delete packages permanently
-> [!NOTE]
-> Package demotion is not supported. If you want this feature to be added to future releases, feel free to use **Suggest a feature** on our [Azure DevOps Developer Community](https://developercommunity.visualstudio.com/spaces/21/index.html) page.
+Packages in the recycle bin are automatically deleted after 30 days, but they still count toward your storage usage during this period. To remove them sooner, you can manually delete them from the Recycle Bin by following these steps:
-To configure retention policies:
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
-::: moniker range=">= azure-devops-2019"
+1. Select **Artifacts**, then select your feed from the dropdown menu.
-1. Select **Artifacts**.
+1. In the upper-right corner, select **Recycle Bin**.
- :::image type="content" source="../media/goto-feed-hub-azure-devops-newnav.png" alt-text="Screenshot that shows the Artifacts button.":::
+1. Select the package you want to delete permanently, then select **Permanently Delete**.
-1. Select the gear icon to navigate to your feed's settings.
+ :::image type="content" source="../media/delete/delete-package-permanently.png" alt-text="A screenshot displaying how to permanently delete a package in Azure Artifacts.":::
- :::image type="content" source="../media/feed-settings.png" alt-text="A screenshot showing how to navigate to feed settings.":::
+1. Select **Permanently Delete** again to confirm your decision. Your package will be deleted permanently.
-1. Select **Feed details**, and then select the **Enable package retention** checkbox. Then enter values for:
+ :::image type="content" source="../media/delete/delete-package-permanently-confirmation.png" alt-text="A screenshot displaying a confirmation message before you delete a package permanently.":::
- - **Maximum number of versions per package**: How many versions of a package you want to keep.
- - **Days to keep recently downloaded packages**: Packages will be deleted only if they haven't been downloaded for the number of days set in here.
+## Delete packages automatically with retention policies
- :::image type="content" source="../media/retention-policy-settings.png" alt-text="Screenshot that shows how to enable retention policies for your feed.":::
-
-1. Select **Save** when you're done.
+As the number of package versions in your feed grows, storage usage can increase rapidly. You can set up retention policies to automatically delete old package versions and free up space.
-::: moniker-end
+If you need to keep a package indefinitely, promote it to a [view](../concepts/views.md). Packages in a view are exempt from retention policies and will not be subject to deletion. To configure retention policies for your feed, follow the steps below:
-::: moniker range="tfs-2018"
+> [!NOTE]
+> Azure Artifacts does not support package demotion. Once a package is promoted to a view, it cannot be reverted back to *@local*.
-1. Select **Build and Release**.
+::: moniker range="<=azure-devops"
-1. Select **Packages**, and then select the gear icon to access your feed's settings.
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
- :::image type="content" source="../media/edit-feed-full.png" alt-text="Screenshot that shows how access the feed's settings in Team Foundation Server.":::
+1. Select **Artifacts**, then select the gear icon  in the upper-right corner to access your feed's settings.
+1. Select **Feed details**, check the **Enable package retention** checkbox, and configure the following settings:
-1. From the **Retention** tab, enter values for:
+ - **Maximum number of versions per package**: The number of versions for each package you wish to retain.
- - **Maximum number of versions per package**: How many versions of a package you want to keep.
- - **Days to keep recently downloaded packages**: Packages will be deleted only if they haven't been downloaded for the number of days set in here.
-
- :::image type="content" source="../media/retention-policy-settings-tfs.png" alt-text="Screenshot that shows retention policies in Team Foundation Server.":::
-
+ - **Days to keep recently downloaded packages**: Packages will only be deleted if they haven't been downloaded for the specified number of days specified here.
1. Select **Save** when you're done.
+ :::image type="content" source="../media/retention-policy-settings.png" alt-text="A screenshot displaying how to set up retention policies for your feed.":::
+
::: moniker-end
> [!NOTE]
-> When you enable package retention, a version of a package will be deleted when *both* of the following criteria are met:
-> - The number of published versions reaches the **Maximum number of versions per package** limit.
-> - A version of that package has not been downloaded for the period defined in **Days to keep recently downloaded packages**.
-
-## Recover deleted packages
-
-Deleted packages will remain in the Recycle Bin for 30 days. After that, they'll be permanently deleted. You must be a feed **Owner** to recover deleted packages.
+> When retention policies are enabled, a package version will be deleted only when **both** of the following conditions are met:
+> - The total number of published versions reaches the **Maximum number of versions per package** limit.
+> - A version of that package has not been downloaded within the timeframe specified in **Days to keep recently downloaded packages**.
-::: moniker range=">= azure-devops-2019"
+## Restore deleted packages
-1. Select **Artifacts**.
+Deleted packages remain in the recycle bin for 30 days. After this period, they are permanently deleted. To restore a package from the recycle bin, follow these steps:
- :::image type="content" source="../media/goto-feed-hub-azure-devops-newnav.png" alt-text="Screenshot of how to access Azure Artifacts.":::
+::: moniker range="<=azure-devops"
-1. Select **Recycle Bin**.
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
- :::image type="content" source="../media/recycle-bin.png" alt-text="A screenshot showing how to access the recycle bin.":::
+1. Select **Artifacts**, then select **Recycle Bin**.
1. Select your package, and then select **Restore**.
- :::image type="content" source="../media/restore-package.png" alt-text="A screenshot showing how to restore deleted packages.":::
+1. Select **Restore** once more to confirm your decision.
+
+ :::image type="content" source="../media/restore-package.png" alt-text="A screenshot displaying how to restore deleted packages.":::
::: moniker-end
-::: moniker range="tfs-2018"
+## Q&A
-1. Select **Build and Release**, and then select **Packages**.
+##### Q: What is the difference between *Deprecate*, *Unlist*, *Yank*, and *Delete* a package version?
-1. Select **Recycle Bin**.
+A: *Deprecate* applies to npm packages, *Yank* applies to Cargo packages while *Unlist* applies to NuGet packages. You can *Delete* any of the package types (npm, Maven, Python, Cargo, and Universal Packages) from your Azure Artifacts feed.
- :::image type="content" source="../media/recycle-bin/find-recycle-bin.png" alt-text="Screenshot of how to access the Recycle Bin in Team Foundation Server.":::
+- **Deprecate** (npm): When you deprecate a package version, a warning message is added to the package's metadata. Azure Artifacts and most npm clients will display this warning message whenever the package is viewed or installed.
-1. Select the appropriate package, and then select the package version that you want to delete.
+- **Unlist** (NuGet): Unlisting a package version hides it from search results in Azure Artifacts feeds and on NuGet.org.
- :::image type="content" source="../media/recycle-bin/recycle-bin-view.png" alt-text="Screenshot that shows the package in the Recycle Bin in Team Foundation Server.":::
+- **Yank** (Cargo): Yanking a package version marks it as obsolete or deprecated, discouraging its use, but it doesn't delete the package.
-1. Select **Restore to feed**.
+- **Delete**: Deleting a package version moves it to the recycle bin, making it unavailable for installation. Deleted packages can be restored from the recycle bin within 30 days. After this period, they will be permanently deleted.
- :::image type="content" source="../media/recycle-bin/recycle-bin-restore.png" alt-text="Screenshot that shows the button for restoring to feed in Team Foundation Server.":::
+##### Q: How do I delete all package versions?
-::: moniker-end
+A: To delete all versions of a package, select the package from your feed, select **Versions**, and then select the checkbox next to *version*. This will select all versions of that package in your feed. Select **Delete**, then select delete once more to confirm.
-## Q&A
+:::image type="content" source="../media/delete-all-versions.png" alt-text="A screenshot displaying how to delete all versions from a feed.":::
+
+##### Q: What happens with old or existing packages when we enable retention policies?
+
+A: Old or existing packages will be soft-deleted and moved to the recycle bin. The deletion job runs once a day, but there might be an initial delay after the policy is turned on for the first time due to an influx of packages.
-### Q: What is the difference between *Deprecate*, *Unpublish*, *Unlist*, and *Delete* a package version?
+Packages remain in the recycle bin for 30 days before they're permanently deleted. To remove the packages from your billable storage, you can manually delete them using the web UI or the REST API before the 30-day period ends.
-A: *Unpublish* and *Deprecate* applies to npm packages, while *Unlist* and *Delete* applies to NuGet packages. You can also *Delete* package versions for the rest of the package types (Maven, Python, and Universal Packages):
+##### Q: What if I don't want to enable retention policies?
-- **Deprecate** (npm): When you deprecate a package version, a warning message is added to the package's metadata. Azure Artifacts and most npm clients will display the warning message whenever the package is viewed or installed.
-- **Unpublish** (npm): Unpublishing a package version makes it unavailable to install. Unpublished packages can be restored from the Recycle Bin within 30 days of deletion. After that, the packages will be permanently deleted.
+A: Azure Artifacts retention policies are designed to help manage your dependencies and streamline storage cost management. If you choose not to enable retention policies, you'll need to manage your storage manually, monitoring consumption and deleting packages as necessary. Azure Artifacts offers 2 GiB of free storage per organization, which allows you to evaluate whether the service fits your workflow. Once you exceed the storage limit, you won't be able to publish new artifacts unless you set up billing and [increase your storage limit](../start-using-azure-artifacts.md#increase-azure-artifacts-storage-limit).
-- **Unlist** (NuGet): Unlisting a package version hides it from the search results in Azure Artifacts feeds and on NuGet.org.
-- **Delete**: Deleting a package version makes it unavailable to install. Deleted packages can be restored from the Recycle Bin within 30 days of deletion. After that, the packages will be permanently deleted.
+##### Q: How long does it take for the billed storage amount to update after deleting Artifacts?
-### Q: What happens with old or existing packages when we enable retention policies?
+A: Typically, storage consumption should update within 24 hours. However, in some cases, it might take up to 48 hours for the changes to be reflected. The Artifacts usage on your organization's billing page updates once a day, while the Artifact Storage page is updated more frequently, which could lead to a slight discrepancy between the two.
-A: Old or existing packages will be soft-deleted and moved to the Recycle Bin. The deletion job runs once a day, but there might be an initial delay after the policy is turned on for the first time because of an influx of packages.
+## Related content
-Packages remain in the Recycle Bin for 30 days before they're permanently deleted. To remove the packages from your billable storage, you can choose to delete them manually by using the UI or the REST API before the 30 days are up.
+- [Monitor Artifacts storage consumption](../artifact-storage.md)
-## Related articles
+- [Limits on package sizes and counts](../reference/limits.md)
-- [Understand upstream sources](../concepts/upstream-sources.md)
-- [Feeds permissions](../feeds/feed-permissions.md)
-- [Configure upstream sources](./set-up-upstream-sources.md)
-- [Promote a package to a view](../feeds/views.md)
\ No newline at end of file
+- [Manage permissions](../feeds/feed-permissions.md)
diff --git a/docs/artifacts/how-to/public-feeds-upstream-sources.md b/docs/artifacts/how-to/public-feeds-upstream-sources.md
new file mode 100644
index 00000000000..4c259e7c84f
--- /dev/null
+++ b/docs/artifacts/how-to/public-feeds-upstream-sources.md
@@ -0,0 +1,157 @@
+---
+title: Enable and add upstream sources to a public feed
+description: How to enable and add upstream sources to a public feed in Azure Artifacts
+ms.service: azure-devops-artifacts
+ms.topic: tutorial
+ms.date: 03/02/2023
+monikerRange: 'azure-devops'
+---
+
+# Use upstream sources in a public feed
+
+[!INCLUDE [version-eq-azure-devops](../../includes/version-eq-azure-devops.md)]
+
+Azure Artifacts enables developers to manage their dependencies from a single feed. Using upstream sources, you can consume packages from feeds and public registries such as NuGet.org, and npmjs.com. In this article, you'll learn how to:
+
+> [!div class="checklist"]
+>
+> - Create a public feed
+> - Enable upstream sources
+> - Add a new upstream source
+
+## Prerequisites
+
+- An Azure DevOps organization. [Create an organization](../../organizations/accounts/create-organization.md), if you don't have one already.
+
+- An Azure DevOps project. [Create a new project](../../organizations/projects/create-project.md) if you don't have one already.
+
+- Set your project visibility to [public](../../organizations/projects/make-project-public.md).
+
+## Create a public feed
+
+A public feed is a project-scoped feed in a public project. Public feeds inherit the visibility settings of the hosting project.
+
+1. Sign in to your Azure DevOps organization, and then select your public project.
+
+1. Select **Artifacts**, and then select **Create Feed**.
+
+ :::image type="content" source="../media/new-feed-devops.png" alt-text="A screenshot showing the create feed button in Azure Artifacts.":::
+
+1. Give your feed a **Name**, and then select **Project: PublicProject (Recommended)** for its scope.
+
+ :::image type="content" source="../media/new-public-feed.png" alt-text="A screenshot showing how to create a new public feed.":::
+
+1. Select **Create** when you're done.
+
+> [!IMPORTANT]
+> Public feeds do not support upstreaming to a private Artifacts feed. If you are using a public Azure Artifacts feed, you can only upstream to public registries (NuGet.org, npmjs) or other **Public** Azure Artifacts feeds.
+
+## Add an upstream source
+
+1. Sign in to your Azure DevOps organization, and then select your public project.
+
+1. Select **Artifacts**, and then select your public feed.
+
+1. Select the gear icon  to access your **Feed Settings**.
+
+1. Select **Upstream Sources**, and then select **Add Upstream**.
+
+ :::image type="content" source="../media/public-feed-add-upstream.png" alt-text="A screenshot showing how to add an upstream source in a public feed.":::
+
+1. Select your upstream source **Type**. In this example, we'll be adding NuGet.org as an upstream source.
+
+ :::image type="content" source="../media/public-feed-upstream-types.png" alt-text="A screenshot showing the different types of upstream sources.":::
+
+1. Configure your source, and then select **Add** when you're done.
+
+ :::image type="content" source="../media/public-feed-configure-upstream.png" alt-text="A screenshot showing how to configure your upstream source.":::
+
+1. Select **Save** to save your new upstream source.
+
+ :::image type="content" source="../media/save-upstream.png" alt-text="A screenshot showing how to save the newly added upstream source.":::
+
+> [!IMPORTANT]
+> [Package lock files](https://devblogs.microsoft.com/nuget/enable-repeatable-package-restores-using-a-lock-file/) are required to save NuGet and Dotnet packages from upstream sources to a public feed.
+
+## Restore packages
+
+Run the following command in your project directory to restore your packages:
+
+#### [NuGet](#tab/nuget)
+
+```Command
+nuget.exe restore
+```
+
+#### [Dotnet](#tab/dotnet)
+
+```Command
+dotnet restore --interactive
+```
+
+#### [Npm](#tab/npm)
+
+```Command
+npm install
+```
+
+#### [Maven](#tab/maven)
+
+```Command
+mvn install
+```
+
+#### [Gradle](#tab/gradle)
+
+```Command
+gradle build
+```
+
+#### [Python](#tab/python)
+
+```Command
+pip install
+```
+
+#### [Cargo](#tab/cargo)
+
+Feed and Upstream Reader (Collaborator) roles or higher must use an additional flag to authenticate with their public feed in order to install packages. Be sure to follow the instructions in [Cargo - Connect to a feed](../cargo/cargo-upstream-source.md#connect-to-your-feed) to properly authenticate with your feed, and then run the following command in your project directory to restore your packages.
+
+```Command
+cargo build
+```
+
+- - -
+
+> [!NOTE]
+> You must be a **Feed and Upstream Reader (Collaborator)** or higher to install new package versions from upstream. Anonymous users can only install packages that exist in their feed.
+
+## Q&A
+
+#### Q: I'm trying to restore my packages but I keep getting a 401 unauthorized error?
+
+The contents of a feed can only be changed by an authenticated and authorized identity who has appropriate permissions on the feed. This includes saving packages into the feed from an upstream source. Unauthenticated (anonymous) users can *download packages already saved* into a feed, but cannot save new packages from an upstream into the feed.
+
+Maintainers of a project should save all needed versions of packages into the public feed. This can be done by restoring a project using an identity that *can* supply credentials to the feed when prompted, **and** ensuring that the identity used has **Feed and Upstream Reader (Collaborator)** or higher permissions on the public feed.
+
+If anonymous users who are restoring packages for a project are repeatedly being blocked by requests for credentials (401 response), the following approaches will reduce or eliminate the issue:
+
+1. Avoid using package version ranges in your project configuration. Explicit package versions will ensure that packaging clients only request the exact version needed.
+
+1. Where supported, utilize lock files for your packaging ecosystem so that the packaging clients only request the specific versions needed for the project during a restore/install operation.
+
+#### Q: I'm trying to restore my packages using Visual Studio, but I'm noticing that they're getting pulled from a different source?
+
+A: Make sure that Visual Studio is using the source referenced in your *nuget.config* file and not from the local NuGet package manager. See [Package sources](/nuget/consume-packages/install-use-packages-visual-studio#package-sources) for more details.
+
+You can also use the NuGet CLI to force NuGet to use the source in your config file by running the following command:
+
+```Command
+nuget restore -config
+```
+
+## Related content
+
+- [Search for packages in upstream sources](search-upstream.md)
+- [Set up upstream sources](set-up-upstream-sources.md)
+- [Configure upstream behavior](../concepts/upstream-behavior.md)
diff --git a/docs/artifacts/how-to/search-upstream.md b/docs/artifacts/how-to/search-upstream.md
index a6b5a413b32..ac8a4dd423f 100644
--- a/docs/artifacts/how-to/search-upstream.md
+++ b/docs/artifacts/how-to/search-upstream.md
@@ -4,11 +4,13 @@ description: How to search for packages in upstream sources
ms.service: azure-devops-artifacts
ms.topic: conceptual
ms.date: 09/29/2022
-monikerRange: '<= azure-devops'
+monikerRange: '>= azure-devops-2022'
---
# Search for packages in upstream sources
+[!INCLUDE [version-gt-eq-2022](../../includes/version-gt-eq-2022.md)]
+
Using upstream sources enable developers to consume packages from different feeds and public registries. This tutorial will walk you through how to enable upstream sources in your feed and search for packages in upstreams.
## Enable upstream sources
@@ -23,7 +25,7 @@ Using upstream sources enable developers to consume packages from different feed
1. Select **Public source**, and then select the **Public source**. (Example *NuGet gallery (https://api.nuget.org/v3/index.json)*)
-1. Select **Save** when you're done.
+1. Select **Add** when you're done.
:::image type="content" source="../media/enable-upstream.png" alt-text="A screenshot showing how to add the NuGet upstream.":::
@@ -47,10 +49,10 @@ Using upstream sources enable developers to consume packages from different feed
:::image type="content" source="../media/upstream-packages.png" alt-text="A screenshot showing package versions from upstream.":::
-## Save packages
-
> [!NOTE]
-> Saving packages to your feed is only supported for NuGet, Npm, and Universal Packages.
+> Searching for packages in upstream sources from your feed is only supported in Azure DevOps services.
+
+## Save packages
1. To save a package, select the ellipsis button and then select **Save to feed**.
@@ -64,6 +66,9 @@ Using upstream sources enable developers to consume packages from different feed
:::image type="content" source="../media/downloaded-versions-from-upstream.png" alt-text="A screenshot showing the downloaded versions.":::
+> [!NOTE]
+> Saving package versions to your feed from the search upstreams result list is only supported for NuGet, Npm, and Universal Packages.
+
## Related articles
- [Set up upstream sources](./set-up-upstream-sources.md)
diff --git a/docs/artifacts/how-to/set-up-upstream-sources.md b/docs/artifacts/how-to/set-up-upstream-sources.md
index d6da4079b43..36afd8e8790 100644
--- a/docs/artifacts/how-to/set-up-upstream-sources.md
+++ b/docs/artifacts/how-to/set-up-upstream-sources.md
@@ -1,117 +1,143 @@
---
title: Set up upstream sources for your feed
-description: How to configure upstream sources for your Azure Artifacts feeds
+description: How to set up external feeds and public registries as upstream sources for your feed
ms.service: azure-devops-artifacts
ms.topic: conceptual
-ms.date: 02/16/2022
-monikerRange: '<= azure-devops'
+ms.date: 03/21/2024
+monikerRange: "<=azure-devops"
---
-# Configure upstream sources
+# Set up upstream sources
-[!INCLUDE [version-lt-eq-azure-devops](../../includes/version-lt-eq-azure-devops.md)]
+[!INCLUDE [version-gt-eq-azure-devops-2019](../../includes/version-gt-eq-2019.md)]
-With upstream sources, you can use a single feed to store the packages you generate and the packages you consume from public registries such as npmjs.com, NuGet.org, Maven Central, and PyPI.org. Once you've enabled an upstream source, every time you install a package from the public registry, Azure Artifacts will save a copy of that package in your feed.
+With Azure Artifacts upstream sources, you can streamline your package management by using a single feed to store both the packages you publish and those you consume from external feeds and public registries such as npmjs.com, NuGet.org. When an upstream source is enabled on your feed, Azure Artifacts will automatically save a copy of any package installed by a collaborator or higher from upstream.
-## Create a new feed and enable upstream sources
+> [!NOTE]
+> Maven snapshots are not supported in upstream sources.
+
+## Enable upstream sources in a new feed
+
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
-1. From within your project, select **Artifacts**.
+1. Select **Artifacts**, and then select **Create Feed**.
- :::image type="content" source="../media/goto-feed-hub-azure-devops-newnav.png" alt-text="Screenshot of Artifacts button.":::
+1. Provide a **Name** for your feed and select its **Visibility** and **Scope** settings. Make sure to check the **Include packages from common public sources** checkbox to enable upstream sources.
+
+1. Select **Create** when you're done.
-1. Select **Create Feed**.
+ :::image type="content" source="../media/new-feed-dialog-azure-devops.png" alt-text="A screenshot showing how to create a new feed.":::
- :::image type="content" source="../media/new-feed-button-azure-devops-newnav.png" alt-text="Screenshot of the create feed button.":::
+> [!NOTE]
+> You must be a feed owner or a feed administrator to add or remove upstream sources.
-1. Give your feed a **Name** and choose its **visibility**, and **scope** settings. Make sure you check the **Include packages from common public sources** checkbox to enable upstream sources.
+## Enable upstream sources in an existing feed
- :::image type="content" source="../media/new-feed-dialog-azure-devops.png" alt-text="Screenshot showing the create new feed window panel.":::
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
-1. Select **Create** when you are done.
+1. Select the gear icon button  to navigate to your feed settings.
-> [!IMPORTANT]
-> Maven snapshots are not supported in upstream sources.
+1. Select **Upstream sources**, and then select **Add upstream source**.
-## Enable upstream sources in an existing feed
+1. Select **Public source**, and then select a **Public source** from the dropdown menu.
+
+1. Select **Add** when you're done, and then select **Save** once more in the top right corner to preserve your changes.
> [!NOTE]
> Custom public upstream sources are only supported with npm registries.
-1. Select the  button to access your feed's settings.
+## Add a feed in the same organization as an upstream source
-1. Select **Upstream sources**.
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
-1. Select **Add upstream source**.
+1. Select the gear icon button to access your feed's settings.
-1. Select **Public source**, and then select the **Public source**. (Example *Maven Central (https://repo.maven.apache.org/maven2/)* for Maven central)
+1. Select **Upstream sources**, and then select **Add Upstream**.
-1. Select **Add** when you are done.
+1. Select **Azure Artifacts feed in this organization**.
-> [!NOTE]
-> Azure Artifacts support Maven Central, Google Maven Repository, Gradle Plugins, and JitPack as upstream sources for Maven.
+1. Select the desired **Feed** from the dropdown menu to add it as an upstream source. Then, select the **View** and choose the **Package type(s)** you wish to use. Optionally, you can also modify the name of your upstream source.
-## Add a feed in your organization as an upstream source
+1. Select **Add** when you're done.
-1. Select the  button to access your feed's settings.
+ :::image type="content" source="../media/add-upstream-same-org.png" alt-text="A screenshot showing how to add a feed in your organization as an upstream source.":::
-1. Select **Upstream sources**.
+## Add a feed in a different organization as an upstream source
-1. Select **Add Upstream**.
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
-1. Select **Azure Artifacts feed in this organization**.
+1. Select the gear icon button to access your feed's settings.
-1. Select the feed you would like to add from the dropdown menu.
+1. Select **Upstream sources**, and then select **Add Upstream**.
-1. Select the package types you want to use, select the **View** and name your upstream source.
+1. Select **Azure Artifacts feed in another organization**.
-1. Select **Save** when you are done.
+1. Enter your **Azure Artifacts feed locator** in the following format:
- :::image type="content" source="../media/add-upstream-same-org.png" alt-text="A screenshot showing how to add a feed in your organization as an upstream source.":::
+ - **Organization scoped feed**:
+
+ ```
+ azure-feed://ORGANIZATION_NAME/FEED_NAME@VIEW
+ ```
+
+ - **Project scoped feed**:
+
+ ```
+ azure-feed://ORGANIZATION_NAME/PROJECT_NAME/FEED_NAME@VIEW
+ ```
-## Add a feed in a different organization as an upstream source
+1. Select the **Package type(s)** you wish to use and provide a name for your upstream source.
+
+1. Select **Add** when you're done.
+
+ :::image type="content" source="../media/add-upstream-diff-org.png" alt-text="A screenshot showing how to add a feed in a different organization as an upstream source.":::
> [!NOTE]
-> Universal Packages are only supported in upstream sources within the same organization.
+> To add a feed from a different organization as an upstream source, the target feed owner must share the target view with **All feeds and people in organizations associated with my Microsoft Entra tenant** by navigating to **Feed Settings** > **Views** > Select the ellipsis button on the right for the specified view > **Edit** .
-1. Select the  button to access your feed's settings.
+## Examples
-1. Select **Upstream sources**.
+# [NuGet](#tab/nuget)
-1. Select **Add Upstream**.
+- [Use packages from NuGet.org](../nuget/upstream-sources.md)
-1. Select **Azure Artifacts feed in another organization**.
+# [Npm](#tab/npm)
-1. Enter your **Azure DevOps Services feed locator**. Example: *azure-feed://myOrg/myProject/myFeed@local*.
+- [Use packages from npmjs.com](../npm/upstream-sources.md)
-1. Select the **Package type(s)** you want to use and enter an **Upstream source name**.
+# [Python](#tab/python)
-1. Select **Save** when you are done.
+- [Use packages from Python package index (PyPI)](../python/use-packages-from-pypi.md)
- :::image type="content" source="../media/add-upstream-diff-org.png" alt-text="A screenshot showing how to add a feed in a different organization as an upstream source.":::
+# [Maven](#tab/maven)
+
+- [Use packages from Maven Central](../maven/upstream-sources.md)
+
+- [Use packages from Google Maven Repository](../maven/google-maven.md)
-## Example: install NuGet packages from upstream sources with Visual Studio
+- [Use packages from Gradle Plugins](../maven/gradle-plugins.md)
-Using Visual Studio, we can now install packages from the upstream sources we configured:
+- [Use packages from JitPack](../maven/jitpack-upstream.md)
-1. Navigate to NuGet.org, find the package you want to install, and then copy the `Install-Package` command.
-1. In Visual Studio, select **Tools** > **NuGet Package Manager** > **Package Manager Console**.
-1. Paste the install command into the Package Manager Console and press ENTER to run it.
+# [Cargo](#tab/cargo)
-## Example: install npm packages from upstream sources using the CLI
+- [Use packages from Crates.io](../cargo/cargo-upstream-source.md)
-Run the following command in an elevated command prompt window to install your npm package from upstream.
+# [Universal Packages](#tab/universalpackages)
-```Command
-npm install --save
-```
+- [Universal Packages upstream sources](../universal-packages/universal-packages-upstream.md)
+
+# [PowerShell](#tab/powershell)
+
+- [Use packages from the PowerShell Gallery](../tutorials/powershell-upstream-source.md)
+
+---
> [!NOTE]
-> You must be a **Collaborator**, a **Contributor**, or an **Owner** to install new packages from upstream. A copy of each upstream package is saved to the feed on first use. Packages already saved from upstream sources can be used by feed **Readers**.
+> You must be a **Feed and Upstream Reader (Collaborator)**, a **Feed Publisher (Contributor)**, or a **Feed Owner** to install new packages from upstream. A copy of each upstream package is saved to the feed on first use. Packages already saved from upstream sources can be used by **Feed Readers**.
## Related articles
-- [Manage dependencies with upstream sources](../tutorials/protect-oss-packages-with-upstream-sources.md)
-- [Universal Packages upstream sources](../universal-packages/universal-packages-upstream.md)
-- [Configure upstream behavior](../concepts/upstream-behavior.md)
-- [Use feed views to share packages](../feeds/views.md)
+- [Search for packages in upstream sources](./search-upstream.md)
- [Configure permissions](../feeds/feed-permissions.md)
+- [Use feed views to share packages](../feeds/views.md)
diff --git a/docs/artifacts/includes/create-feed-gt-eq-2019.md b/docs/artifacts/includes/create-feed-gt-eq-2019.md
new file mode 100644
index 00000000000..d89fe2dec77
--- /dev/null
+++ b/docs/artifacts/includes/create-feed-gt-eq-2019.md
@@ -0,0 +1,64 @@
+---
+ms.topic: include
+ms.service: azure-devops-artifacts
+ms.manager: mijacobs
+ms.author: rabououn
+author: ramiMSFT
+ms.date: 02/22/2024
+---
+
+::: moniker range=">= azure-devops"
+
+1. Sign in to your Azure DevOps organization, and then go to your project.
+
+1. Select **Artifacts**, and then select **Create Feed**.
+
+ :::image type="content" source="../media/new-feed-dialog-azure-devops.png" alt-text="A screenshot showing how to create a feed.":::
+
+1. Enter the following information for your feed:
+
+ 1. Enter a descriptive **Name** for your feed.
+ 1. Define its **Visibility** (indicating who can view packages within the feed).
+ 1. Select whether to use packages from public sources such as pypi.org.
+ 1. Specify the **Scope** of your feed.
+
+1. Select **Create**.
+
+::: moniker-end
+
+::: moniker range="azure-devops-2022"
+
+1. Go to your Azure DevOps collection, select your project.
+
+1. Select **Artifacts**, and then select **Create Feed**.
+
+ :::image type="content" source="../media/new-feed-dialog-devops-server.png" alt-text="A screenshot showing how to create a feed in DevOps Server.":::
+
+1. Enter the following information for your feed:
+
+ 1. Enter a descriptive **Name** for your feed.
+ 1. Define its **Visibility** (indicating who can view packages within the feed).
+ 1. Select whether to use packages from public sources such as pypi.org.
+ 1. Specify the **Scope** of your feed.
+
+1. Select **Create**.
+
+::: moniker-end
+
+::: moniker range="azure-devops-2020"
+
+1. Go to your Azure DevOps collection, select your project.
+
+1. Select **Artifacts**, and then select **Create Feed** to create a new feed.
+
+1. Enter the following information for your feed:
+
+ 1. Enter a descriptive **Name** for your feed.
+ 1. Define its **Visibility** (indicating who can view packages within the feed).
+ 1. Select whether to use packages from public sources such as pypi.org.
+ 1. Specify the **Scope** of your feed.
+
+1. Select **Create**.
+
+::: moniker-end
+
diff --git a/docs/artifacts/includes/create-feed.md b/docs/artifacts/includes/create-feed.md
index 8cd6335e94c..2537be6e039 100644
--- a/docs/artifacts/includes/create-feed.md
+++ b/docs/artifacts/includes/create-feed.md
@@ -4,47 +4,48 @@ ms.service: azure-devops-artifacts
ms.manager: mijacobs
ms.author: rabououn
author: ramiMSFT
-ms.date: 02/14/2022
+ms.date: 03/15/2024
---
-::: moniker range=">= azure-devops-2019"
+::: moniker range="azure-devops"
-1. Sign in to your Azure DevOps organization, and then navigate to your project.
+1. Sign in to your Azure DevOps organization and navigate to your project.
1. Select **Artifacts**, and then select **Create Feed**.
- :::image type="content" source="../media/new-feed-button-azure-devops-newnav.png" alt-text="A screenshot showing the create a feed button.":::
-
-1. Provide a descriptive **Name** for your feed and specify its **Visibility** (determining who can view packages within the feed). Additionally, configure the **Upstream sources** and specify the **Scope** of your feed (project-scoped or organization-scoped).
-
- :::image type="content" source="../media/new-feed-dialog-azure-devops.png" alt-text="A screenshot showing how to create a need feed.":::
+1. Provide a **Name** for your feed, choose the **Visibility** option that defines who can view your packages, check **Include packages from common public sources** if you want to include packages from sources like *nuget.org* or *npmjs.com*, and for **Scope**, decide whether the feed should be scoped to your project or the entire organization.
1. Select **Create** when you're done.
-> [!NOTE]
-> When creating a new feed, the default access level for the *Project Collection Build Service* (organization-scoped) and the project-level *Build Service*(project-scoped) is set to **Collaborator**.
+ :::image type="content" source="../media/create-new-feed-azure-devops.png" alt-text="Screenshot that shows selections for creating a new feed in Azure DevOps Services.":::
::: moniker-end
-::: moniker range="tfs-2018"
+::: moniker range="azure-devops-2022 || azure-devops-2020"
-Azure Artifacts comes pre-installed in TFS 2018. If this is the first time using your feed, you might be asked to [assign a license](../start-using-azure-artifacts.md?preserve-view=true&view=tfs-2018#assign-licenses-in-tfs)
+1. Sign in to your Azure DevOps server, and then go to your project.
-1. Go to **Build & Release** and select **Packages**.
+2. Select **Artifacts**, and then select **Create Feed**.
- > [!div class="mx-imgBorder"]
- > 
+3. Provide a **Name** for your feed, choose the **Visibility** option that defines who can view your packages, check **Include packages from common public sources** if you want to include packages from sources like *nuget.org* or *npmjs.com*, and for **Scope**, decide whether the feed should be scoped to your project or the entire organization.
-1. Select **+ New feed**.
+::: moniker-end
- > [!div class="mx-imgBorder"]
- > 
+::: moniker range="azure-devops-2022"
-1. Give your feed a **Name**, a **Description**, and set up **who can read**, **who can contribute** and if you want to **Include external packages**.
+4. Select **Create** when you're done.
- > [!div class="mx-imgBorder"]
- > 
+ :::image type="content" source="../media/create-new-feed-server-2022.png" alt-text="Screenshot that shows selections for creating a new feed in Azure DevOps 2022.":::
-1. Select **Create** when you're done.
+::: moniker-end
+
+::: moniker range="azure-devops-2020"
+
+4. Select **Create** when you're done.
+
+ :::image type="content" source="../media/create-new-feed-server-2020.png" alt-text="Screenshot that shows selections for creating a new feed in Azure DevOps 2020.":::
::: moniker-end
+
+> [!NOTE]
+> By default, newly created feeds have their project's **Build Service** value set to **Feed and Upstream Reader (Collaborator)**.
diff --git a/docs/artifacts/includes/edit-feed.md b/docs/artifacts/includes/edit-feed.md
index 34338e92b2d..80d07a4321d 100644
--- a/docs/artifacts/includes/edit-feed.md
+++ b/docs/artifacts/includes/edit-feed.md
@@ -7,7 +7,7 @@ author: ramiMSFT
ms.date: 02/16/2022
---
-::: moniker range=">= azure-devops-2019"
+::: moniker range="<=azure-devops"
1. Select the gear icon to navigate to your feed's settings.
@@ -15,10 +15,3 @@ ms.date: 02/16/2022
::: moniker-end
-::: moniker range="tfs-2018"
-
-1. Select the gear icon to navigate to your feed's settings.
-
- :::image type="content" source="../media/editfeed.png" alt-text="Screenshot of the Edit feed button TFS.":::
-
-::: moniker-end
diff --git a/docs/artifacts/includes/maven/install.md b/docs/artifacts/includes/maven/install.md
index e68aebd9aa1..45035b87149 100644
--- a/docs/artifacts/includes/maven/install.md
+++ b/docs/artifacts/includes/maven/install.md
@@ -16,12 +16,4 @@ ms.date: 05/06/2022
::: moniker-end
-::: moniker range="tfs-2018"
-1. Select **Packages**, and then select the package you want to install and copy the `` snippet.
-
-1. Open your pom.xml file and paste your code inside the `` tag.
-
-1. Run `mvn install` from the same path as your pom.xml file.
-
-::: moniker-end
diff --git a/docs/artifacts/includes/maven/pom-and-settings.md b/docs/artifacts/includes/maven/pom-and-settings.md
index 824ba58023f..388550e76f2 100644
--- a/docs/artifacts/includes/maven/pom-and-settings.md
+++ b/docs/artifacts/includes/maven/pom-and-settings.md
@@ -3,29 +3,120 @@ ms.topic: include
ms.service: azure-devops-artifacts
ms.author: rabououn
author: ramiMSFT
-ms.date: 10/04/2022
+ms.date: 07/01/2024
---
-::: moniker range=">= azure-devops-2019"
+::: moniker range="azure-devops"
-1. Select **Artifacts**, and then select **Connect to Feed**.
-
- :::image type="content" source="../../media/connect-to-feed-azure-devops-newnav.png" alt-text="A screenshot showing how to connect to a feed.":::
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
-::: moniker-end
+1. Select **Artifacts**, and then select your feed from the dropdown menu.
+
+1. Select **Connect to feed**, and then select **Maven** from the left navigation area.
+
+1. If this is your first time using Azure Artifacts with Maven, make sure you've installed the prerequisites. Otherwise select **Get the tools** in the top-right corner to install them.
-::: moniker range="tfs-2018"
+1. Follow the instructions in the **Project setup** section to set up your *pom.xml* and *settings.xml* files. Your files should resemble the following examples:
-1. Select **Packages**, and then select **Connect to Feed**.
+ - **pom.xml**:
+
+ ```xml
+
+
+ MavenDemo
+ https://pkgs.dev.azure.com///_packaging//maven/v1
+
+ true
+
+
+ true
+
+
+
+
+
+ MavenDemo
+ https://pkgs.dev.azure.com///_packaging//maven/v1
+
+ true
+
+
+ true
+
+
+
+ ```
- :::image type="content" source="../../media/connect-to-feed.png" alt-text="A screenshot showing how to connect to a feed in TFS.":::
+ - **settings.xml**:
+
+ ```xml
+
+
+ MavenDemo
+
+ [PERSONAL_ACCESS_TOKEN]
+
+
+ ```
+
+1. Generate a [Personal Access Token](../../../organizations/accounts/use-personal-access-tokens-to-authenticate.md#create-a-pat) with **Packaging** > **Read & write** scope, and then paste it into the `` tag.
::: moniker-end
-2. Select **Maven**.
+::: moniker range="azure-devops-2020 || azure-devops-2022"
+
+1. Sign in to your Azure DevOps collection, and then navigate to your project.
+
+1. Select **Artifacts**, and then select your feed from the dropdown menu.
+
+1. Select **Connect to Feed**, and then select **Maven** from the left navigation pane.
-3. If this is the first time using Azure Artifacts with Maven, select **Get the tools** to download and install Maven.
+1. If this is your first time using Azure Artifacts with Maven, make sure you've installed the prerequisites, otherwise select **Get the tools** in the top-right corner to install them.
-4. Follow the instructions in the **Project setup** to set up your pom.xml and settings.xml files. If your *settings.xml* file is shared within your team, you can use Maven to [encrypt your passwords](https://maven.apache.org/guides/mini/guide-encryption.html).
+1. Follow the instructions in the **Project setup** section to set up your *pom.xml* and *settings.xml* files. Your files should resemble the following examples:
+
+ - **pom.xml**:
+
+ ```xml
+
+
+ MavenDemo
+ http://///_packaging//maven/v1
+
+ true
+
+
+ true
+
+
+
+
+
+ MavenDemo
+ http://///_packaging//maven/v1
+
+ true
+
+
+ true
+
+
+
+ ```
+
+ - **settings.xml**:
+
+ ```xml
+
+
+ MavenDemo
+
+ [PERSONAL_ACCESS_TOKEN]
+
+
+ ```
+
+1. Generate a [Personal Access Token](../../../organizations/accounts/use-personal-access-tokens-to-authenticate.md#create-a-pat) with **Packaging** > **Read & write** scope, and then paste it into the `` tag.
+
+::: moniker-end
- :::image type="content" source="../../media/maven-azure-devops-newnav.png" alt-text="A screenshot showing how to set up your project.":::
diff --git a/docs/artifacts/includes/npm/npmrc.md b/docs/artifacts/includes/npm/npmrc.md
index 4f1472e2fdd..9c47c1f0e99 100644
--- a/docs/artifacts/includes/npm/npmrc.md
+++ b/docs/artifacts/includes/npm/npmrc.md
@@ -3,28 +3,40 @@ ms.topic: include
ms.service: azure-devops-artifacts
ms.author: rabououn
author: ramiMSFT
-ms.date: 05/25/2022
+ms.date: 09/11/2023
---
-::: moniker range=">= azure-devops-2019"
+::: moniker range="<=azure-devops"
+
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
1. Select **Artifacts**, and then select **Connect to feed**.
- :::image type="content" source="../../media/connect-to-feed-azure-devops-newnav.png" alt-text="A screenshot showing how to connect to a feed.":::
+ :::image type="content" source="../../npm/media/npm-scopes-connect-to-feed.png" alt-text="A screenshot showing how to connect to a feed.":::
1. Select **npm**, and then select **Other**.
1. Add a `.npmrc` file in the same directory as your package.json, and paste the following snippet into your file.
- ```JSON
- registry=https://pkgs.dev.azure.com//_packaging//npm/registry/
+ - **Organization-scoped feed**:
- always-auth=true
- ```
+ ```Command
+ registry=https://pkgs.dev.azure.com//npm/registry/
+
+ always-auth=true
+ ```
+
+ - **Project-scoped feed**:
+
+ ```Command
+ registry=https://pkgs.dev.azure.com///_packaging//npm/registry/
+
+ always-auth=true
+ ```
### Set up credentials
-1. Copy the following snippet into your `.npmrc` file.
+1. Copy the following snippet into your user-level `.npmrc` file, (Example: C:\Users\FabrikamUser\.npmrc). Make sure you don't paste it into the .npmrc file within your source repository.
- **Organization-scoped feed**:
@@ -54,7 +66,7 @@ ms.date: 05/25/2022
1. Generate a [personal access token](../../../organizations/accounts/use-personal-access-tokens-to-authenticate.md) with **Packaging** > **Read & write** scopes.
-1. Run the following command to encode your newly generated personal access token. Paste your personal access token when prompted.
+1. Run the following command to encode your newly generated personal access token. When prompted, paste your personal access token and then copy the resulting Base64 encoded value.
```Command
node -e "require('readline') .createInterface({input:process.stdin,output:process.stdout,historySize:0}) .question('PAT> ',p => { b64=Buffer.from(p.trim()).toString('base64');console.log(b64);process.exit(); })"
@@ -64,14 +76,3 @@ ms.date: 05/25/2022
::: moniker-end
-::: moniker range="tfs-2018"
-
-1. Select **Packages**, and then select **Connect to feed**.
-
-1. Select **npm**.
-
-1. Select **Generate npm credentials**, and then copy the credentials and add them to your .npmrc file.
-
- :::image type="content" source="../../media/tfs2018-connect-to-npm-feed.png" alt-text="Screenshot showing how to generate npm credentials in TFS.":::
-
-::: moniker-end
\ No newline at end of file
diff --git a/docs/artifacts/includes/npm/publish-restore.md b/docs/artifacts/includes/npm/publish-restore.md
index 8a57548bc05..6ae39c45e8b 100644
--- a/docs/artifacts/includes/npm/publish-restore.md
+++ b/docs/artifacts/includes/npm/publish-restore.md
@@ -20,6 +20,9 @@ ms.date: 01/24/2023
npm publish
```
+> [!NOTE]
+> If your organization is using a firewall or a proxy server, make sure you allow [Azure Artifacts Domain URLs and IP addresses](../../../organizations/security/allow-list-ip-url.md#azure-artifacts).
+
## Restore packages
1. Run the following command in your project directory to restore your npm packages:
diff --git a/docs/artifacts/includes/nuget/auth-with-sp.md b/docs/artifacts/includes/nuget/auth-with-sp.md
new file mode 100644
index 00000000000..f99161afd1d
--- /dev/null
+++ b/docs/artifacts/includes/nuget/auth-with-sp.md
@@ -0,0 +1,49 @@
+---
+ms.topic: include
+ms.service: azure-devops-artifacts
+ms.author: wonga
+author: wonga
+ms.date: 12/10/2024
+---
+
+## Authenticate NuGet Feed with Service Principal
+
+To authenticate with a service principal, you must first install the [Artifacts Credential Provider](https://github.com/microsoft/artifacts-credprovider).
+
+Set the [ARTIFACTS_CREDENTIALPROVIDER_FEED_ENDPOINTS](https://github.com/microsoft/artifacts-credprovider/blob/master/README.md#environment-variables) environment variable as shown below, specifying your feed URL, the service principal's application (client) ID, and the subject name or the file path of your service principal certificate. (Only one is needed between the certificate subject name or file path.)
+
+
+#### [Windows](#tab/Windows/)
+
+In PowerShell, enter the following code.
+
+```powershell
+$env:ARTIFACTS_CREDENTIALPROVIDER_FEED_ENDPOINTS = @'{
+ "endpointCredentials": [
+ {
+ "endpoint": "",
+ "clientId": "",
+ "clientCertificateSubjectName": "",
+ "clientCertificateFilePath": ""
+ }
+ ]
+}
+'@
+```
+
+#### [Linux/macOS](#tab/Linux/)
+
+In Bash, enter the following code.
+
+```bash
+export ARTIFACTS_CREDENTIALPROVIDER_FEED_ENDPOINTS='{
+ "endpointCredentials": [
+ {
+ "endpoint": "",
+ "clientId": "",
+ "clientCertificateSubjectName": "",
+ "clientCertificateFilePath": ""
+ }
+ ]
+}'
+```
diff --git a/docs/artifacts/includes/nuget/consume.md b/docs/artifacts/includes/nuget/consume.md
index 3854611bc9c..3cbee9d4074 100644
--- a/docs/artifacts/includes/nuget/consume.md
+++ b/docs/artifacts/includes/nuget/consume.md
@@ -3,10 +3,10 @@ ms.topic: include
ms.service: azure-devops-artifacts
ms.author: rabououn
author: ramiMSFT
-ms.date: 05/10/2022
+ms.date: 05/15/2024
---
-#### 1. Get the feed's source URL
+#### 1. Get the package source URL
[!INCLUDE [get a NuGet URL](nuget-consume-endpoint.md)]
@@ -14,27 +14,27 @@ ms.date: 05/10/2022
#### [Windows](#tab/windows/)
-1. In Visual Studio, select **Tools**, and then **Options**.
+1. In Visual Studio, select **Tools** > **Options**.
1. Expand the **NuGet Package Manager** section, and then select **Package Sources**.
-1. Enter the feed's **Name** and the **Source** URL, and then select the green (+) sign to add a source.
+1. Enter the feed's **Name** value and the **Source** URL, and then select the green plus sign (+) to add a source.
1. If you enabled upstream sources in your feed, clear the **nuget.org** checkbox.
1. Select **OK** when you're done.
- :::image type="content" source="../../media/vs-addsource.png" alt-text="A screenshot showing how to set up visual studio in Windows.":::
+ :::image type="content" source="../../media/vs-addsource.png" alt-text="A screenshot that shows selections for setting up Visual Studio in Windows.":::
#### [macOS](#tab/macOS/)
1. Create a [personal access token](../../../organizations/accounts/use-personal-access-tokens-to-authenticate.md).
-1. In visual studio, select **Preferences** from the menu bar.
+1. In Visual Studio, on the menu bar, select **Preferences**.
1. Select **NuGet**, and then select **Sources**.
-1. Select **Add** and enter your feed's name, the source URL, a userName (any string), and your personal access token.
+1. Select **Add** and enter your feed's name, the source URL, a username (any string), and your personal access token.
1. Select **OK** to save your source.
@@ -42,16 +42,16 @@ ms.date: 05/10/2022
1. Select **OK** when you're done.
- :::image type="content" source="../../media/vs-mac-settings.png" alt-text="A screenshot showing how to set up visual studio in macOS.":::
+ :::image type="content" source="../../media/vs-mac-settings.png" alt-text="A screenshot that shows selections for setting up Visual Studio in macOS.":::
---
#### 3. Download packages
-1. In Visual Studio, right-click on your project, and then select **Manage NuGet Packages**.
+1. In Visual Studio, right-click your project, and then select **Manage NuGet Packages**.
1. Select **Browse**, and then select your feed from the **Package source** dropdown menu.
-
- :::image type="content" source="../../media/select-pkg-src.png" alt-text="A screenshot showing how to select your feed source.":::
+
+ :::image type="content" source="../../media/select-pkg-src.png" alt-text="Screenshot that shows selection of a package source in Visual Studio.":::
1. Use the search bar to search for packages from your feed.
diff --git a/docs/artifacts/includes/nuget/nuget-consume-endpoint.md b/docs/artifacts/includes/nuget/nuget-consume-endpoint.md
index 34d552a8473..4cc3a1b70c3 100644
--- a/docs/artifacts/includes/nuget/nuget-consume-endpoint.md
+++ b/docs/artifacts/includes/nuget/nuget-consume-endpoint.md
@@ -3,29 +3,17 @@ ms.topic: include
ms.service: azure-devops-artifacts
ms.author: rabououn
author: ramiMSFT
-ms.date: 01/26/2023
+ms.date: 05/15/2024
---
-::: moniker range=">= azure-devops-2019"
+::: moniker range="<=azure-devops"
-1. Navigate to your project, and then select **Artifacts** then select your feed.
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
-1. Select **Connect to feed**, and then select **Visual Studio** from the left navigation panel.
+1. Select **Artifacts**, select your feed from the dropdown menu, and then select **Connect to Feed**.
-1. Copy your **Source** URL.
+1. Select **Visual Studio** from the left navigation pane, then copy your **Source** URL.
- :::image type="content" source="../../media/nuget-visual-studio-newnav.png" alt-text="A screenshot showing the source URL.":::
-
-::: moniker-end
-
-::: moniker range="tfs-2018"
-
-1. Select **Build and Release**, and then select **Packages**.
-
-1. Select your feed from the dropdown menu.
-
-1. Select **Connect to feed**, and then copy your **Source** URL.
-
- :::image type="content" source="../../media/nuget-consume-url.png" alt-text="A screenshot showing the package source URL in TFS.":::
+ :::image type="content" source="../../media/nuget-visual-studio-newnav.png" alt-text="A screenshot displaying how to find the feed's Source URL.":::
::: moniker-end
diff --git a/docs/artifacts/includes/nuget/nuget-publish-endpoint.md b/docs/artifacts/includes/nuget/nuget-publish-endpoint.md
index 962e7521e3d..9a815ab1df7 100644
--- a/docs/artifacts/includes/nuget/nuget-publish-endpoint.md
+++ b/docs/artifacts/includes/nuget/nuget-publish-endpoint.md
@@ -6,7 +6,7 @@ author: ramiMSFT
ms.date: 06/23/2022
---
-::: moniker range=">= azure-devops-2019"
+::: moniker range="<=azure-devops"
1. Select **Artifacts**, and then select your feed from the dropdown menu.
@@ -24,18 +24,3 @@ ms.date: 06/23/2022
::: moniker-end
-::: moniker range="tfs-2018"
-
-1. Select **Build and Release** > **Packages**.
-
-1. Select your feed from the dropdown menu or [create one](../../get-started-nuget.md#create-a-feed) if you haven't.
-
-1. Select **Connect to feed**.
-
- :::image type="content" source="../../media/connect-to-feed.png" alt-text="Connect to feed - TFS":::
-
-1. Select **NuGet** and follow the instruction to connect to your feed.
-
- :::image type="content" source="../../media/connect-to-nuget-feed-tfs.png" alt-text="Connect to NuGet feed - TFS":::
-
-::: moniker-end
diff --git a/docs/artifacts/includes/save-requires-collaborator.md b/docs/artifacts/includes/save-requires-collaborator.md
new file mode 100644
index 00000000000..e72e614952c
--- /dev/null
+++ b/docs/artifacts/includes/save-requires-collaborator.md
@@ -0,0 +1,10 @@
+---
+author: jmyersmsft
+ms.author: jmyers
+ms.date: 03/18/2024
+ms.topic: include
+ms.service: azure-devops-artifacts
+---
+
+> [!NOTE]
+> To save packages from upstreams, you must have the **Feed and Upstream Reader (Collaborator)** role or higher. See [Manage Permissions](../feeds/feed-permissions.md#permissions-table) for more details.
diff --git a/docs/artifacts/index.yml b/docs/artifacts/index.yml
index 554cac88812..3e8e66a8c27 100644
--- a/docs/artifacts/index.yml
+++ b/docs/artifacts/index.yml
@@ -1,16 +1,16 @@
### YamlMime:Landing
title: Azure Artifacts documentation
-summary: Code once and share packages across your organization. Host your private NuGet, npm, Maven, Python, and Universal Packages with Azure Artifacts for more reliable and scalable builds.
+summary: Create, host, and share NuGet, npm, Maven, Python, Cargo, and Universal Packages with Azure Artifacts for seamless package management and collaboration across projects and organizations.
metadata:
title: Azure Artifacts documentation
- description: Code once and share your packages NuGet, npm, Maven, Python, and Universal Packages with Azure Artifacts for more reliable and scalable builds.
+ description: Create, host, and share NuGet, npm, Maven, Python, Cargo, and Universal Packages with Azure Artifacts for seamless package management and collaboration across projects and organizations.
ms.service: azure-devops-artifacts
ms.topic: landing-page
- author: KathrynEE
- ms.author: kaelli
- ms.date: 09/17/2021
+ ms.author: rabououn
+ author: ramiMSFT
+ ms.date: 02/11/2025
# linkListType: architecture | concept | deploy | download | get-started | how-to-guide | learn | overview | quickstart | reference | tutorial | video | whats-new
# Schema location: https://static.docs.com/ui/latest/schemas/Landing.schema.json
@@ -23,17 +23,23 @@ landingContent:
linkLists:
- linkListType: concept
links:
- - text: Artifacts overview
+ - text: What is Azure Artifacts?
url: ./start-using-azure-artifacts.md
- - linkListType: quickstart
- links:
+ - text: Limits on package sizes and counts
+ url: reference/limits.md
- text: Best practices
url: ./concepts/best-practices.md
- - text: Artifacts storage consumption
- url: ./artifact-storage.md
- - text: Package sizes and count limits
- url: ./reference/limits.md
- - title: Configure Feeds
+ - text: Key concepts
+ url: artifacts-key-concepts.md
+ - linkListType: quickstart
+ links:
+ - text: Publish your first package
+ url: get-started-artifacts-ai.md
+ - text: Monitor Artifacts storage
+ url: artifact-storage.md
+ - text: Search packages across your feeds
+ url: ../project/search/functional-package-search.md?toc=/azure/devops/artifacts/toc.json
+ - title: Feeds
linkLists:
- linkListType: concept
links:
@@ -43,28 +49,108 @@ landingContent:
url: ./concepts/views.md
- linkListType: quickstart
links:
- - text: Configure permissions
- url: ./feeds/feed-permissions.md
- - text: Upstream sources overview
- url: ./concepts/upstream-sources.md
- - text: Configure upstream sources
- url: ./how-to/set-up-upstream-sources.md
- - title: Artifacts in Azure Pipelines
+ - text: Promote packages and manage views
+ url: feeds/views.md
+ - text: Use public feeds to share your packages publicly
+ url: tutorials/share-packages-publicly.md
+ - title: Publish
+ linkLists:
+ - linkListType: how-to-guide
+ links:
+ - text: NuGet
+ url: nuget/publish.md
+ - text: dotnet
+ url: nuget/dotnet-exe.md
+ - text: npm
+ url: npm/publish.md
+ - text: Gradle
+ url: maven/publish-with-gradle.md
+ - text: Python
+ url: quickstarts/python-cli.md
+ - text: Universal Packages
+ url: quickstarts/universal-packages.md
+ - text: Cargo
+ url: get-started-cargo.md
+ - title: Restore
+ linkLists:
+ - linkListType: how-to-guide
+ links:
+ - text: NuGet
+ url: nuget/restore-nuget-packages-nuget-exe.md
+ - text: dotnet
+ url: nuget/restore-nuget-packages-dotnet.md
+ - text: npm
+ url: npm/publish.md
+ - text: Maven
+ url: maven/install.md
+ - text: Python
+ url: quickstarts/install-python-packages.md
+ - text: Universal Packages
+ url: quickstarts/download-universal-packages.md
+ - text: Cargo
+ url: get-started-cargo.md
+ - title: Upstream sources
+ linkLists:
+ - linkListType: overview
+ links:
+ - text: Upstream sources overview
+ url: concepts/upstream-sources.md
+ - linkListType: how-to-guide
+ links:
+ - text: Set up upstream sources
+ url: how-to/set-up-upstream-sources.md
+ - text: Use upstream sources with public feeds
+ url: how-to/public-feeds-upstream-sources.md
+ - text: Search for packages in upstream sources
+ url: how-to/search-upstream.md
+ - text: Use packages from NuGet.org
+ url: nuget/upstream-sources.md
+ - text: Use packages from npmjs.com
+ url: npm/upstream-sources.md
+ - text: Use packages from Maven Central
+ url: maven/upstream-sources.md
+ - text: Use packages from PyPi
+ url: python/use-packages-from-pypi.md
+ - text: Universal Packages upstream sources
+ url: universal-packages/universal-packages-upstream.md
+ - text: Use packages from Crates.io
+ url: cargo/cargo-upstream-source.md
+ - title: Security
linkLists:
- linkListType: concept
+ links:
+ - text: Manage permissions
+ url: feeds/feed-permissions.md
+ - text: Safeguard against malicious public packages
+ url: concepts/upstream-behavior.md
+ - title: Artifacts in Azure Pipelines
+ linkLists:
+ - linkListType: overview
links:
- text: Overview
url: ../pipelines/artifacts/artifacts-overview.md
- linkListType: quickstart
links:
- - text: Pipeline Artifacts
- url: ../pipelines/artifacts/build-artifacts.md
- - text: Release Artifacts and Artifact sources
- url: ../pipelines/release/artifacts.md
- - text: Publish and download Artifacts
+ - text: Publish and download pipeline artifacts
url: ../pipelines/artifacts/pipeline-artifacts.md
- - text: Pipeline caching
- url: ../pipelines/release/caching.md
+ - text: Publish and download build artifacts
+ url: ../pipelines/artifacts/build-artifacts.md
+ - text: Use the .artifactignore file
+ url: reference/artifactignore.md
+ - text: NuGet
+ url: ../pipelines/artifacts/nuget.md
+ - text: npm
+ url: ../pipelines/artifacts/npm.md
+ - text: Maven
+ url: ../pipelines/artifacts/publish-maven-artifacts.md
+ - text: Gradle
+ url: ../pipelines/artifacts/build-publish-artifacts-gradle.md
+ - text: Python
+ url: ../pipelines/artifacts/pypi.md
+ - text: Cargo
+ url: ../pipelines/artifacts/cargo-pipelines.md
+ - text: Universal Packages
+ url: ../pipelines/artifacts/universal-packages.md
- title: Symbols
linkLists:
- linkListType: concept
@@ -78,82 +164,4 @@ landingContent:
- text: Debug with WinDbg
url: ./symbols/debug-with-symbols-windbg.md
- text: Publish symbols with Azure Pipelines
- url: ../pipelines/artifacts/symbols.md
- - title: NuGet
- linkLists:
- - linkListType: quickstart
- links:
- - text: Get started
- url: get-started-nuget.md
- - linkListType: how-to-guide
- links:
- - text: Publish NuGet packages (CLI)
- url: ./nuget/publish.md
- - text: Publish NuGet packages with Azure Pipelines (YAML/Classic)
- url: ../pipelines/artifacts/nuget.md?toc=/azure/devops/artifacts/toc.json
- - text: Install NuGet packages with Visual Studio
- url: ./nuget/consume.md
- - text: NuGet.org upstream source
- url: ./nuget/upstream-sources.md
- - title: npm
- linkLists:
- - linkListType: quickstart
- links:
- - text: Get started
- url: get-started-npm.md
- - linkListType: how-to-guide
- links:
- - text: Publish npm packages (CLI)
- url: ./npm/publish.md
- - text: Publish npm packages with Azure Pipelines (YAML/Classic)
- url: ../pipelines/artifacts/npm.md?toc=/azure/devops/artifacts/toc.json
- - text: Set up your project and connect to Azure Artifacts
- url: ./npm/npmrc.md
- - text: Use npm scopes
- url: ./npm/scopes.md
- - text: Npmjs.com upstream source
- url: ./npm/upstream-sources.md
- - title: Maven
- linkLists:
- - linkListType: quickstart
- links:
- - text: Get started
- url: get-started-maven.md
- - linkListType: how-to-guide
- links:
- - text: Project setup
- url: ./maven/pom-and-settings.md
- - text: Install Maven Artifacts
- url: ./maven/install.md
- - text: Use packages from Maven Central
- url: ./maven/upstream-sources.md
- - text: Google Maven Repository upstream source
- url: ./maven/google-maven.md
- - text: Gradle Plugins upstream source
- url: ./maven/gradle-plugins.md
- - text: JitPack upstream source
- url: ./maven/jitpack-upstream.md
- - title: Python
- linkLists:
- - linkListType: quickstart
- links:
- - text: Get started
- url: ./quickstarts/python-packages.md
- - linkListType: how-to-guide
- links:
- - text: Publish and download Python packages (CLI)
- url: ./quickstarts/python-cli.md
- - text: Publish and download Python packages with Azure Pipelines (YAML/Classic)
- url: ../pipelines/artifacts/pypi.md?toc=/azure/devops/artifacts/toc.json
- - title: Universal Packages
- linkLists:
- - linkListType: quickstart
- links:
- - text: Get started
- url: ./quickstarts/universal-packages.md
- - linkListType: how-to-guide
- links:
- - text: Publish and download Universal Packages with Azure Pipelines (YAML/Classic)
- url: ../pipelines/artifacts/universal-packages.md?toc=/azure/devops/artifacts/toc.json
- - text: Universal Packages upstream sources
- url: ./universal-packages/universal-packages-upstream.md
\ No newline at end of file
+ url: ../pipelines/artifacts/symbols.md
\ No newline at end of file
diff --git a/docs/artifacts/maven/google-maven.md b/docs/artifacts/maven/google-maven.md
index 16b448cbc9e..66d8ed89c8f 100644
--- a/docs/artifacts/maven/google-maven.md
+++ b/docs/artifacts/maven/google-maven.md
@@ -1,44 +1,96 @@
---
-title: Google Maven Repository upstream source
-description: How to add Google Maven Repository upstream source
+title: Use packages from Google Maven Repository upstream source
+description: How to consume packages from Google Maven Repository upstream source
ms.service: azure-devops-artifacts
ms.topic: conceptual
-ms.date: 03/03/2022
+ms.date: 11/14/2023
monikerRange: '<= azure-devops'
"recommendations": "true"
---
-# Google Maven Repository upstream source
+# Use packages from Google Maven Repository
[!INCLUDE [version-lt-eq-azure-devops](../../includes/version-lt-eq-azure-devops.md)]
-With Azure Artifacts, developers can enable upstream sources to store packages from different sources such as Google Maven Repository. Once enabled, Azure Artifacts will save a copy of all the packages installed from Google Maven Repository. Azure Artifacts also support other Maven upstream sources such as Maven Central, Gradle Plugins, and JitPack.
+With Azure Artifacts, developers can enable upstream sources to consume packages from different public registries such as Google Maven Repository. Once enabled, Azure Artifacts will automatically save a copy of any package installed from the upstream. Additionally, Azure Artifacts supports other Maven upstream sources such as Maven Central, Gradle Plugins, and JitPack. In this article, you'll learn how to:
-## Add Google Maven Repository
+> [!div class="checklist"]
+> * Add Google Maven Repository as an upstream source
+> * Consume a package from upstream
+> * Find saved packages in your feed
-1. Select the  at the top right corner to navigate to **Feed Settings**.
+## Prerequisites
-1. Select **Upstream sources**.
+- An Azure DevOps organization and a project. Create an [organization](../../organizations/accounts/create-organization.md) or a [project](../../organizations/projects/create-project.md#create-a-project) if you haven't already.
-1. Select **Add Upstream**.
+- An Azure Artifacts feed.
-1. Select **Public source**, and then select **Google Maven Repository (https://maven.google.com/web/index.html)** from the dropdown menu.
+## Enable upstream sources
+
+If you don't have a feed already, follow the instructions below to create a new feed, and make sure to check the *upstream sources* checkbox to enable them. If you already have a feed, jump to the [next step](#add-google-maven-repository-upstream) to add Google Maven Repository as an upstream source:
+
+[!INCLUDE [](../includes/create-feed.md)]
- :::image type="content" source="../media/google-maven-repository.png" alt-text="A screenshot showing how to add Google Maven Repository.":::
+## Add Google Maven Repository upstream
-1. Select **Save** when you are done.
+If you checked the *upstream sources* checkbox when creating your feed, Google Maven Repository should already be added as an upstream source. If not, you can add it manually using the following steps:
-1. Select **Save** at the top right corner to save your changes.
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
+
+1. Select **Artifacts**, and then select the gear icon  in the top right corner to navigate to your **Feed Settings**.
+
+1. Select **Upstream sources**, and then select **Add Upstream**.
+
+1. Select **Public source**, and then select **Google Maven Repository (https://maven.google.com/web/index.html)** from the dropdown menu.
+
+1. Select **Add** when you're done, and then select **Save** again in the top right corner to save your changes.
> [!NOTE]
> Maven snapshots are not supported with Maven upstream sources.
+## Save packages from Google Maven Repository
+
+Before saving packages from Google Maven Repository, make sure you have set up your project to connect to your feed. If you haven't done so already, follow the instruction in the [project setup](pom-and-settings.md) to set up your Maven project and connect to your feed. The following example illustrates how to save the Zipflinger Library from Google Maven Repository.
+
+If you want to save/restore your packages using Azure Pipelines instead, follow the steps in the [Restore Maven packages with Azure Pipelines (YAML/Classic)](../../pipelines/packages/maven-restore.md) tutorial.
+
+1. Navigate to Google Maven Repository at `https://mvnrepository.com/`.
+
+1. Search for the Zipflinger library. Select the **Zipflinger** package, and then select the version you wish to install.
+
+1. Copy the `` snippet from the **Maven** tab.
+
+ ```xml
+
+ com.android
+ zipflinger
+ 8.3.0-alpha13
+
+ ```
+
+1. Open your *pom.xml* file and paste the snippet inside your `` tag, and then save your file.
+
+1. Run the following command from the same path as your *pom.xml* file to install your dependencies:
+
+ ```command
+ mvn install
+ ```
+
+[!INCLUDE [save-requires-collaborator](../includes/save-requires-collaborator.md)]
## View saved packages
-To view the packages you installed from Google Maven Repository, select the appropriate source from the dropdown menu.
+To view the packages you installed from upstream, select the **Google Maven Repository** source from the dropdown menu.
+
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
+
+1. Select **Artifacts**, and then select your feed from the dropdown menu.
+
+1. Select the **Google Maven Repository** source from the dropdown menu to find packages from this upstream.
-:::image type="content" source="media/google-maven-source.png" alt-text="A screenshot showing how to filter for packages from Google Maven Repository.":::
+1. The *Zipflinger* package that we saved in the previous step is now available in our feed, as Azure Artifacts automatically saved a copy when we executed the mvn install command.
+
+ :::image type="content" source="media/saved-zipflinger-package-from-google-maven-repository.png" alt-text="A screenshot showing packages from Google Maven Repository." lightbox="media/saved-zipflinger-package-from-google-maven-repository.png":::
> [!TIP]
> If Maven is not downloading all your dependencies, run the following command from the project directory to regenerate your project's files:
@@ -46,7 +98,6 @@ To view the packages you installed from Google Maven Repository, select the appr
## Related articles
-- [Maven Central upstream source](./upstream-sources.md)
+- [Use packages from Maven Central](./upstream-sources.md)
+- [Search for packages in upstream sources](../how-to/search-upstream.md)
- [Configure permissions](../feeds/feed-permissions.md)
-- [Set up upstream sources](../how-to/set-up-upstream-sources.md)
-- [Upstream behavior](../concepts/upstream-behavior.md)
diff --git a/docs/artifacts/maven/gradle-plugins.md b/docs/artifacts/maven/gradle-plugins.md
index b005878dafe..09345dbe0b6 100644
--- a/docs/artifacts/maven/gradle-plugins.md
+++ b/docs/artifacts/maven/gradle-plugins.md
@@ -27,11 +27,9 @@ With Azure Artifacts feeds, you can enable upstream sources to include packages
1. Select **Public source**, and then select **Gradle Plugins (https://plugins.gradle.org/m2/)** from the dropdown menu.
- :::image type="content" source="./media/gradle-plugins.png" alt-text="A screenshot showing how to add Gradle Plugins.":::
-
-1. Select **Save** when you are done.
+1. Select **Add** when you're done, and then select **Save** at the top right corner to save your changes.
-1. Select **Save** at the top right corner to save your changes.
+ :::image type="content" source="./media/gradle-plugins.png" alt-text="A screenshot showing how to add Gradle Plugins.":::
## View saved packages
diff --git a/docs/artifacts/maven/install.md b/docs/artifacts/maven/install.md
index 58aa4ee6408..96798c0d196 100644
--- a/docs/artifacts/maven/install.md
+++ b/docs/artifacts/maven/install.md
@@ -1,61 +1,164 @@
---
-title: Install Maven Artifacts
-description: How to connect to feeds and install Maven Artifacts
+title: Restore Maven packages from your Azure Artifacts feed
+description: Learn how to connect to your Azure Artifacts feed and restore your Maven packages.
ms.service: azure-devops-artifacts
ms.assetid: 0f66e727-e76a-4a72-be12-3fa1775b9e2c
-ms.manager: jenp
+ms.manager: mijacobs
ms.topic: conceptual
-ms.reviewer: dastahel
ms.custom: engagement-fy23
-ms.date: 01/09/2023
+ms.date: 06/11/2024
monikerRange: '<= azure-devops'
+"recommendations": "true"
---
-# Install Maven Artifacts
+# Restore Maven packages from your Azure Artifacts feed
[!INCLUDE [version-lt-eq-azure-devops](../../includes/version-lt-eq-azure-devops.md)]
-With Azure Artifacts, you can publish and restore Maven packages from Azure Artifacts feed and public registries. In this article, you will learn how to connect to Azure Artifacts feeds and restore your Maven packages.
+With Azure Artifacts, you can publish and restore Maven packages from Azure Artifacts feed and public registries. This article will walk you through setting up your Maven project, connecting to your Azure Artifacts feed, and restoring your Maven packages.
## Prerequisites
-- An Azure DevOps organization. [Create an organization](../../organizations/accounts/create-organization.md), if you don't have one already.
-
-- An Azure Artifacts feed. [Create a new feed](../get-started-nuget.md#create-a-feed) if you don't have one already.
-
-- [Download](https://maven.apache.org/download.cgi) and [install](https://maven.apache.org/install.html) Maven.
-
-## Connect to feed
-
-1. From your Azure DevOps project, select **Artifacts**, and then select your feed from the dropdown menu.
-
-1. Select **Connect to feed**.
-
- :::image type="content" source="../media/connect-to-feed-azure-devops-newnav.png" alt-text="Screenshot showing how to connect to your feed":::
-
-1. Select **Maven** from the left navigation panel.
-
-1. Follow the instructions in the **Project setup** section to set up your config files and generate a new personal access token.
-
- :::image type="content" source="../media/maven-project-setup.png" alt-text="Screenshot showing how to set up Maven projects.":::
+- An Azure DevOps organization. [Create one for free](../../organizations/accounts/create-organization.md).
+
+- An Azure DevOps project. Create a new [project](../../organizations/projects/create-project.md#create-a-project) if you don't have one already.
+
+- An Azure Artifacts feed. [Create one for free](../concepts/feeds.md#create-a-new-feed).
+
+- [Download](https://maven.apache.org/download.cgi) and [Install](https://maven.apache.org/install.html) Apache Maven.
+
+## Connect to a feed
+
+::: moniker range="azure-devops"
+
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
+
+1. Select **Artifacts**, and then select your feed from the dropdown menu.
+
+1. Select **Connect to feed**, and then select **Maven** from the left navigation area.
+
+1. If this is your first time using Azure Artifacts with Maven, make sure you've installed the prerequisites. Otherwise select **Get the tools** in the top-right corner to install them.
+
+1. Follow the instructions in the **Project setup** section to set up your *pom.xml* and *settings.xml* files. Your files should resemble the following examples:
+
+ - **pom.xml**:
+
+ ```xml
+
+
+ MavenDemo
+ https://pkgs.dev.azure.com///_packaging//maven/v1
+
+ true
+
+
+ true
+
+
+
+
+
+ MavenDemo
+ https://pkgs.dev.azure.com///_packaging//maven/v1
+
+ true
+
+
+ true
+
+
+
+ ```
+
+ - **settings.xml**:
+
+ ```xml
+
+
+ MavenDemo
+
+ [PERSONAL_ACCESS_TOKEN]
+
+
+ ```
+
+1. Generate a [Personal Access Token](../../organizations/accounts/use-personal-access-tokens-to-authenticate.md#create-a-pat) with **Packaging** > **Read & write** scope, and then paste it into the `` tag.
+
+::: moniker-end
+
+::: moniker range="azure-devops-2020 || azure-devops-2022"
+
+1. Sign in to your Azure DevOps collection, and then navigate to your project.
+
+1. Select **Artifacts**, and then select your feed from the dropdown menu.
+
+1. Select **Connect to Feed**, and then select **Maven** from the left navigation pane.
+
+1. If this is your first time using Azure Artifacts with Maven, make sure you've installed the prerequisites, otherwise select **Get the tools** in the top-right corner to install them.
+
+1. Follow the instructions in the **Project setup** section to set up your *pom.xml* and *settings.xml* files. Your files should resemble the following examples:
+
+ - **pom.xml**:
+
+ ```xml
+
+
+ MavenDemo
+ http://///_packaging//maven/v1
+
+ true
+
+
+ true
+
+
+
+
+
+ MavenDemo
+ http://///_packaging//maven/v1
+
+ true
+
+
+ true
+
+
+
+ ```
+
+ - **settings.xml**:
+
+ ```xml
+
+
+ MavenDemo
+
+ [PERSONAL_ACCESS_TOKEN]
+
+
+ ```
+
+1. Generate a [Personal Access Token](../../organizations/accounts/use-personal-access-tokens-to-authenticate.md#create-a-pat) with **Packaging** > **Read & write** scope, and then paste it into the `` tag.
+
+::: moniker-end
> [!TIP]
> If your *settings.xml* file is shared within your team, you can use Maven to [encrypt your passwords](https://maven.apache.org/guides/mini/guide-encryption.html).
-## Restore Maven packages
+## Restore packages
-Run the following command in an elevated command prompt to download your Maven packages. Maven automatically downloads all your dependencies to your local repository when the `build` command is executed.
+Run the following command in your project directory to restore your packages:
-```Command
-mvn build
+```
+mvn install
```
-> [!TIP]
-> The `` tags in your *settings.xml* and *pom.xml* files must be the same.
+> [!NOTE]
+> Ensure that the `` tags in your *settings.xml* and *pom.xml* files match exactly.
## Related articles
- [Use packages from Maven Central](./upstream-sources.md)
- [Use public feeds to share your packages publicly](../tutorials/share-packages-publicly.md)
-- [Configure permissions](../feeds/feed-permissions.md)
-- [Use feed views to share packages](../feeds/views.md)
\ No newline at end of file
+- [Configure permissions](../feeds/feed-permissions.md)
\ No newline at end of file
diff --git a/docs/artifacts/maven/jitpack-upstream.md b/docs/artifacts/maven/jitpack-upstream.md
index 7f1df741419..70f1aaddd2d 100644
--- a/docs/artifacts/maven/jitpack-upstream.md
+++ b/docs/artifacts/maven/jitpack-upstream.md
@@ -24,11 +24,9 @@ With Azure Artifacts, you can consume packages from different public registries
1. Select **Public source**, and then select **JitPack (https://jitpack.io/)** from the dropdown menu.
- :::image type="content" source="./media/jitpack-upstream.png" alt-text="A screenshot showing how to add JitPack.":::
-
-1. Select **Save** when you are done.
+1. Select **Add** when you're done, and then select **Save** at the top right corner to save your changes.
-1. Select **Save** at the top right corner to save your changes.
+ :::image type="content" source="./media/jitpack-upstream.png" alt-text="A screenshot showing how to add JitPack.":::
## View saved packages
diff --git a/docs/artifacts/maven/media/gradle-plugins.png b/docs/artifacts/maven/media/gradle-plugins.png
index 5a873045487..60f0c4f9cec 100644
Binary files a/docs/artifacts/maven/media/gradle-plugins.png and b/docs/artifacts/maven/media/gradle-plugins.png differ
diff --git a/docs/artifacts/maven/media/jitpack-upstream.png b/docs/artifacts/maven/media/jitpack-upstream.png
index 711954d544d..4a452fd19ad 100644
Binary files a/docs/artifacts/maven/media/jitpack-upstream.png and b/docs/artifacts/maven/media/jitpack-upstream.png differ
diff --git a/docs/artifacts/maven/media/publish-package-gradle.png b/docs/artifacts/maven/media/publish-package-gradle.png
new file mode 100644
index 00000000000..edcc7cb53de
Binary files /dev/null and b/docs/artifacts/maven/media/publish-package-gradle.png differ
diff --git a/docs/artifacts/maven/media/save-upstream-sources.png b/docs/artifacts/maven/media/save-upstream-sources.png
new file mode 100644
index 00000000000..756f9248767
Binary files /dev/null and b/docs/artifacts/maven/media/save-upstream-sources.png differ
diff --git a/docs/artifacts/maven/media/saved-kotlin-package-from-upstream.png b/docs/artifacts/maven/media/saved-kotlin-package-from-upstream.png
new file mode 100644
index 00000000000..6d69fc05752
Binary files /dev/null and b/docs/artifacts/maven/media/saved-kotlin-package-from-upstream.png differ
diff --git a/docs/artifacts/maven/media/saved-zipflinger-package-from-google-maven-repository.png b/docs/artifacts/maven/media/saved-zipflinger-package-from-google-maven-repository.png
new file mode 100644
index 00000000000..24fbf51b3fa
Binary files /dev/null and b/docs/artifacts/maven/media/saved-zipflinger-package-from-google-maven-repository.png differ
diff --git a/docs/artifacts/maven/pom-and-settings.md b/docs/artifacts/maven/pom-and-settings.md
index 53ffdd1caca..1ab3683fa99 100644
--- a/docs/artifacts/maven/pom-and-settings.md
+++ b/docs/artifacts/maven/pom-and-settings.md
@@ -1,18 +1,151 @@
---
-title: Set up your Maven project
-description: How to set up Maven client
+title: Connect your Maven project with Azure Artifacts
+description: Learn how to set up your Maven project and connect to an Azure Artifacts feed.
ms.service: azure-devops-artifacts
ms.assetid: 944f45ee-baa3-45ba-8467-5e7ab2bc47cf
ms.topic: conceptual
-ms.date: 10/04/2022
+ms.date: 06/10/2024
monikerRange: '<= azure-devops'
+"recommendations": "true"
---
-# Set up your Maven project and connect to feed
+# Connect your Maven project to an Azure Artifacts feed
[!INCLUDE [version-lt-eq-azure-devops](../../includes/version-lt-eq-azure-devops.md)]
-[!INCLUDE [](../includes/maven/pom-and-settings.md)]
+With Azure Artifacts, you can seamlessly publish and restore Maven packages from feeds and public registries. Azure Artifacts supports upstreaming from Maven Central, Google Maven Repository, Gradle Plugins, and JitPack. This guide will walk you through the process of setting up your Maven project and connecting to your Azure Artifacts feed.
+
+## Prerequisites
+
+- An Azure DevOps organization. [Create one for free](../../organizations/accounts/create-organization.md).
+
+- An Azure DevOps project. Create a new [project](../../organizations/projects/create-project.md#create-a-project) if you don't have one already.
+
+- An Azure Artifacts feed. [Create one for free](../concepts/feeds.md#create-a-new-feed).
+
+- [Download](https://maven.apache.org/download.cgi) and [Install](https://maven.apache.org/install.html) Apache Maven.
+
+## Project setup
+
+::: moniker range="azure-devops"
+
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
+
+1. Select **Artifacts**, and then select your feed from the dropdown menu.
+
+1. Select **Connect to feed**, and then select **Maven** from the left navigation area.
+
+1. If this is your first time using Azure Artifacts with Maven, make sure you've installed the prerequisites. Otherwise select **Get the tools** in the top-right corner to install them.
+
+1. Follow the instructions in the **Project setup** section to set up your *pom.xml* and *settings.xml* files. Your files should resemble the following examples:
+
+ - **pom.xml**:
+
+ ```xml
+
+
+ MavenDemo
+ https://pkgs.dev.azure.com///_packaging//maven/v1
+
+ true
+
+
+ true
+
+
+
+
+
+ MavenDemo
+ https://pkgs.dev.azure.com///_packaging//maven/v1
+
+ true
+
+
+ true
+
+
+
+ ```
+
+ - **settings.xml**:
+
+ ```xml
+
+
+ MavenDemo
+
+ [PERSONAL_ACCESS_TOKEN]
+
+
+ ```
+
+1. Generate a [Personal Access Token](../../organizations/accounts/use-personal-access-tokens-to-authenticate.md#create-a-pat) with **Packaging** > **Read & write** scope, and then paste it into the `` tag.
+
+::: moniker-end
+
+::: moniker range="azure-devops-2020 || azure-devops-2022"
+
+1. Sign in to your Azure DevOps collection, and then navigate to your project.
+
+1. Select **Artifacts**, and then select your feed from the dropdown menu.
+
+1. Select **Connect to Feed**, and then select **Maven** from the left navigation pane.
+
+1. If this is your first time using Azure Artifacts with Maven, make sure you've installed the prerequisites, otherwise select **Get the tools** in the top-right corner to install them.
+
+1. Follow the instructions in the **Project setup** section to set up your *pom.xml* and *settings.xml* files. Your files should resemble the following examples:
+
+ - **pom.xml**:
+
+ ```xml
+
+
+ MavenDemo
+ http://///_packaging//maven/v1
+
+ true
+
+
+ true
+
+
+
+
+
+ MavenDemo
+ http://///_packaging//maven/v1
+
+ true
+
+
+ true
+
+
+
+ ```
+
+ - **settings.xml**:
+
+ ```xml
+
+
+ MavenDemo
+
+ [PERSONAL_ACCESS_TOKEN]
+
+
+ ```
+
+1. Generate a [Personal Access Token](../../organizations/accounts/use-personal-access-tokens-to-authenticate.md#create-a-pat) with **Packaging** > **Read & write** scope, and then paste it into the `` tag.
+
+::: moniker-end
> [!NOTE]
-> If your `settings.xml` file is shared within your team, you can use mvn to [encrypt your passwords](https://maven.apache.org/guides/mini/guide-encryption.html).
+> If your `settings.xml` file is shared within your team, you can use Maven to [encrypt your passwords](https://maven.apache.org/guides/mini/guide-encryption.html).
+
+## Related articles
+
+- [Restore Maven packages](install.md)
+- [Use packages from Maven Central](upstream-sources.md)
+- [JitPack upstream source](jitpack-upstream.md)
\ No newline at end of file
diff --git a/docs/artifacts/maven/publish-with-gradle.md b/docs/artifacts/maven/publish-with-gradle.md
index dd822397c0a..088c0f3396c 100644
--- a/docs/artifacts/maven/publish-with-gradle.md
+++ b/docs/artifacts/maven/publish-with-gradle.md
@@ -1,110 +1,191 @@
---
-title: Publish a Maven artifact using Gradle
-description: How to publish Maven artifacts using Gradle
+title: Publish artifacts using Gradle
+description: Learn how to connect to a feed and publish your packages with Gradle.
ms.service: azure-devops-artifacts
ms.topic: conceptual
-ms.date: 05/08/2023
+ms.date: 10/16/2024
ms.author: rabououn
author: ramiMSFT
monikerRange: '<= azure-devops'
"recommendations": "true"
---
-# Publish Maven artifacts using Gradle
+# Publish artifacts with Gradle
[!INCLUDE [version-lt-eq-azure-devops](../../includes/version-lt-eq-azure-devops.md)]
-In this article, you will learn how to connect to an Azure Artifacts feed and publish Maven artifacts using Gradle.
+With Azure Artifacts, you can efficiently manage your dependencies from a single feed, storing various types of packages in one place. Azure Artifacts enables developers to publish and consume packages from different sources, and sharing them according to the feed's visibility settings. In this article, you'll learn how to connect to an Azure Artifacts feed and publish your packages using Gradle.
## Prerequisites
-- An Azure DevOps organization. [Create an organization](../../organizations/accounts/create-organization.md), if you don't have one already.
+- Create an Azure DevOps [organization](../../organizations/accounts/create-organization.md) and a [project](../../organizations/projects/create-project.md#create-a-project) if you haven't already.
-- An Azure Artifacts feed. [Create a feed](../concepts/feeds.md#create-public-feeds) if you don't have one already.
+- [Create a feed](../get-started-maven.md#create-a-feed) if you don't have one already.
- Download and install [Gradle](https://docs.gradle.org/current/userguide/installation.html).
-- Install [Java SE](https://www.oracle.com/technetwork/java/javase/downloads/index.html).
+- Install the [Java Development Kit (JDK)](https://jdk.java.net/) version 8 or higher.
+
+## Create a personal access token
+
+To authenticate with your feed, you must first create a personal access token with packaging *Read & Write* scopes:
+
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
+
+1. Select **User settings**, and then select **Personal access tokens**.
+
+ :::image type="content" source="media/create-pat.png" alt-text="A screenshot showing how to locate the personal access token button.":::
+
+1. Select **New Token** and fill out the required fields. Be sure to select the **Packaging** > **Read & write** scope.
+
+1. Select **Create** when you're done. Copy your token and save it in a secure location, as you'll need it for the next step.
+
+ :::image type="content" source="media/gradle-pat.png" alt-text="A screenshot demonstrating how to create a new personal access token with packaging read & write scopes.":::
## Project setup
-Before setting up your project, ensure that you have installed Gradle and added the Maven Settings plugin to your *build.gradle* file as follows:
+# [Gradle 8.2 and above](#tab/newer)
+
+Before setting up your project, ensure Gradle is installed and that you've added the Maven Settings plugin to your *build.gradle* file as follows:
```groovy
plugins {
- id "net.linguica.maven-settings" version "0.5"
+ id 'maven-publish'
}
```
-### Create a personal access token
+#### Configure build.gradle
-1. Sign in to your Azure DevOps organization, and then navigate to your project.
+1. If a *build.gradle* file doesn't exist in the root of your project, create a new file and name it: *build.gradle*.
-1. Select **User settings**, and then select **Personal access tokens**.
+1. Add the following section to your *build.gradle* file within both the **repositories** and **publishing.repositories** containers:
+
+ ```groovy
+ maven {
+ url 'https://pkgs.dev.azure.com///_packaging//maven/v1' //for organization-scoped feeds use this format: 'https://pkgs.dev.azure.com//_packaging//maven/v1'
+ name ''
+ credentials(PasswordCredentials)
+ authentication {
+ basic(BasicAuthentication)
+ }
+ }
+ ```
+
+Here's an example of what your *build.gradle* file should look like:
+
+```groovy
+repositories {
+ mavenCentral()
+
+ maven {
+ url 'https://pkgs.dev.azure.com///_packaging//maven/v1' //for organization-scoped feeds use this format: 'https://pkgs.dev.azure.com//_packaging//maven/v1'
+ name ''
+ credentials(PasswordCredentials)
+ authentication {
+ basic(BasicAuthentication)
+ }
+ }
+}
+
+publishing {
+ publications {
+ library(MavenPublication) {
+ from components.java
+ }
+ }
+
+ repositories {
+ maven {
+ url 'https://pkgs.dev.azure.com///_packaging//maven/v1' //for organization-scoped feeds use this format: 'https://pkgs.dev.azure.com//_packaging//maven/v1'
+ name ''
+ credentials(PasswordCredentials)
+ authentication {
+ basic(BasicAuthentication)
+ }
+ }
+ }
+}
+```
+
+#### Configure gradle.properties
+
+1. Open the *gradle.properties* file located in the *.gradle* directory of your home folder (~/.gradle/gradle.properties). If the file doesn't exist, create a new one.
+
+1. Add the following snippet, replacing the placeholders with your feed name, organization name, and the personal access token you created earlier.
- :::image type="content" source="media/create-pat.png" alt-text="Screenshot showing how to create a personal access token":::
+ ```
+ # Substitute FEED_NAME with the same name specified as the 'name' of the maven repository in build.gradle.
+ # The value of the username is arbitrary but should not be blank.
+ [FEED_NAME]Username=[ORGANIZATION_NAME]
+ [FEED_NAME]Password=[PERSONAL_ACCESS_TOKEN]
+ ```
-1. Select **New Token**, and then fill out the required fields. Make sure you select the **Packaging** > **Read & write** scope.
+# [Older versions](#tab/older)
-1. Select **Create** when you are done. Copy your token and save it in a secure location.
+Before setting up your project, ensure Gradle is installed and that you've added the Maven Settings plugin to your *build.gradle* file as follows:
- :::image type="content" source="media/gradle-pat.png" alt-text="Screenshot showing how to create a new personal access token with packaging read & write scopes.":::
+```groovy
+plugins {
+ id 'net.linguica.maven-settings' version '0.5'
+ id 'maven-publish'
+}
+```
-### Configure build.gradle
+#### Configure build.gradle
-1. If a *build.gradle* file does not exist in the root of your project, create a new file and name it: *build.gradle*.
+1. If a *build.gradle* file doesn't exist in the root of your project, create a new file and name it: *build.gradle*.
-1. Add the following section to your *build.gradle* file in both the **repositories** and **publishing.repositories** containers.
+1. Add the following section to your *build.gradle* file within both the **repositories** and **publishing.repositories** containers:
```groovy
maven {
- url 'https://pkgs.dev.azure.com///_packaging//maven/v1'
+ url 'https://pkgs.dev.azure.com///_packaging//maven/v1' //for organization-scoped feeds use this format: 'https://pkgs.dev.azure.com//_packaging//maven/v1'
name ''
authentication {
basic(BasicAuthentication)
}
}
```
-1. Here's an example of what your *build.gradle* file should look like:
- ```groovy
- publishing {
- publications {
- myPublication(MavenPublication) {
- groupId ''
- artifactId ''
- version ''
- artifact ''
- }
- }
-
- // Repositories to publish artifacts
- repositories {
- maven {
- url 'https://pkgs.dev.azure.com///_packaging//maven/v1'
- name ''
- authentication {
- basic(BasicAuthentication)
- }
- }
- }
- }
-
- // Repositories to fetch dependencies
+Here's an example of what your *build.gradle* file should look like:
+
+```groovy
+publishing {
+ publications {
+ library(MavenPublication) {
+ from components.java
+ }
+ }
+
+ // Repositories to publish artifacts
repositories {
- maven {
- url 'https://pkgs.dev.azure.com///_packaging//maven/v1'
- name ''
- authentication {
- basic(BasicAuthentication)
- }
+ maven {
+ url 'https://pkgs.dev.azure.com///_packaging//maven/v1' //for organization-scoped feeds use this format: 'https://pkgs.dev.azure.com//_packaging//maven/v1'
+ name ''
+ authentication {
+ basic(BasicAuthentication)
}
+ }
}
- ```
+}
+
+// Repositories to fetch dependencies
+repositories {
+ maven {
+ url 'https://pkgs.dev.azure.com///_packaging//maven/v1' //for organization-scoped feeds use this format: 'https://pkgs.dev.azure.com//_packaging//maven/v1'
+ name ''
+ authentication {
+ basic(BasicAuthentication)
+ }
+ }
+}
+```
-### Configure settings.xml
+#### Configure settings.xml
-1. Open your *settings.xml* file in your home directory and add the following snippet. Replace the placeholders with your feed name, organization name, and the personal access token you created earlier.
+1. Open the *settings.xml* file located in the *.m2* directory of your home folder (typically found at *~/.m2/settings.xml* on macOS and Linux, and at *Users\\.m2\settings.xml* on Windows). If the file doesn't exist, you can create a new one.
+
+1. Add the following snippet, replacing the placeholders with your feed name, organization name, and the personal access token you created earlier.
```xml
@@ -114,16 +195,20 @@ plugins {
```
-## Publish artifacts
+---
-Run the following command in an elevated command prompt to publish your package to your feed. Your new package will be named: *groupId:artifactId*.
+## Publish your packages
-```Command
-gradle publish
-```
+1. Run the following command in your project directory to publish your package to your feed:
+
+ ```command
+ gradle publish
+ ```
+
+:::image type="content" source="media/publish-package-gradle.png" alt-text="A screenshot displaying a package successfully published to the feed.":::
-## Related articles
+## Related content
-- [Install Maven Artifacts](./install.md)
-- [Use packages from Maven Central](./upstream-sources.md)
-- [Google Maven Repository upstream source](./google-maven.md)
+- [Use packages from Maven Central](upstream-sources.md)
+- [Restore Maven packages](./install.md)
+- [Use packages from Google Maven Repository](google-maven.md)
diff --git a/docs/artifacts/maven/upstream-sources.md b/docs/artifacts/maven/upstream-sources.md
index c29bfd0f044..862149d43b4 100644
--- a/docs/artifacts/maven/upstream-sources.md
+++ b/docs/artifacts/maven/upstream-sources.md
@@ -1,9 +1,9 @@
---
title: Use packages from Maven Central
-description: How to use packages from Maven upstream
+description: How to use packages from Maven Central upstream source
ms.service: azure-devops-artifacts
ms.topic: conceptual
-ms.date: 02/15/2022
+ms.date: 11/10/2023
monikerRange: '<= azure-devops'
"recommendations": "true"
---
@@ -12,40 +12,85 @@ monikerRange: '<= azure-devops'
[!INCLUDE [version-lt-eq-azure-devops](../../includes/version-lt-eq-azure-devops.md)]
-With upstream sources, you can use both private packages you've created and public packages from Maven Central. When you enable upstream sources in your feed, Azure Artifacts will save a copy of any packages you install from Maven central. Azure Artifacts also support other Maven upstream sources such as Google Maven Repository, Gradle Plugins, and JitPack.
+Using Azure Artifacts upstream sources allows you to use a single feed for hosting both the packages you produce and packages from public registries such as Maven Central. When you add upstream sources to your feed, Azure Artifacts saves a copy of any package installed from upstream. This ensures continued accessibility for your development, even if a public registry suffers an outage. Additionally, Azure Artifacts supports various other Maven upstream sources, including the Google Maven Repository, Gradle Plugins, and JitPack.
+
+## Prerequisites
+
+- An Azure DevOps organization and a project. Create an [organization](../../organizations/accounts/create-organization.md) or a [project](../../organizations/projects/create-project.md#create-a-project) if you haven't already.
+
+- An Azure Artifacts feed.
> [!NOTE]
> Maven snapshots are not supported with Maven upstream sources.
## Enable upstream sources
-Follow the instructions below to create a new feed and enable upstream sources:
+If you don't have a feed already, follow these instructions to create one, and make sure that you check the *upstream sources* checkbox to enable them. If you already have a feed, move to the [next step](#add-maven-central-upstream) to add Maven Central as an upstream source.
[!INCLUDE [](../includes/create-feed.md)]
-### Add Maven Central upstream
+## Add Maven Central upstream
-1. Select the  in the top right of the page to access your feed's settings.
+If you checked the *upstream sources* checkbox when creating your feed, Maven Central should already be added as an upstream source. If not, you can add it manually using the following steps:
-1. Select **Upstream sources**.
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
-1. Select **Add Upstream**.
+1. Select **Artifacts**, and then select the  in the top right corner to navigate to your **Feed Settings**.
-1. Select **Public source**, and then select **Maven Central (https://repo.maven.apache.org/maven2/)** from the dropdown menu.
+1. Select **Upstream sources**, and then select **Add Upstream**.
+
+1. Select **Public source**, select **Maven Central (https://repo.maven.apache.org/maven2/)** from the dropdown menu, and then select **Add** when you're done.
:::image type="content" source="../media/maven-add-upstream.png" alt-text="A screenshot showing how to add Maven central upstream source.":::
-1. Select **Save** when you are done.
+1. Select **Save** in the top right corner to save your changes.
+
+ :::image type="content" source="media/save-upstream-sources.png" alt-text="A screenshot showing how to save upstream sources.":::
+
+## Save package from Maven Central
+
+Before saving packages from Maven Central, make sure you have set up your project to connect to your feed. If you haven't done so already, follow the instruction in the [project setup](pom-and-settings.md) to set up your Maven project and connect to your feed. The following example illustrates how to save the Kotlin Datetime Library from Maven Central using the command line.
+
+If you want to save/restore your packages using Azure Pipelines instead, follow the steps in the [Restore Maven packages with Azure Pipelines (YAML/Classic)](../../pipelines/packages/maven-restore.md) tutorial.
+
+1. Navigate to Maven Central at `https://mvnrepository.com/`.
-1. Select **Save** to save your changes.
+1. Search for the Kotlin Datetime Library. Select the **Kotlinx Datetime** package, and then select the version you wish to install.
- :::image type="content" source="../media/save-upstream-source.png" alt-text="A screenshot showing how to save changes in upstream sources":::
+1. Copy the `` snippet from the **Maven** tab.
+
+ ```xml
+
+ org.jetbrains.kotlinx
+ kotlinx-datetime-jvm
+ 0.4.1
+ runtime
+
+ ```
+
+1. Open your *pom.xml* file and paste the snippet inside your `` tag, and then save your file.
+
+1. Run the following command from the same path as your *pom.xml* file to install your dependencies:
+
+ ```command
+ mvn install
+ ```
+
+[!INCLUDE [save-requires-collaborator](../includes/save-requires-collaborator.md)]
## View saved packages
You can view the packages you saved from upstreams by selecting the **Maven Central** source from the dropdown menu.
-:::image type="content" source="media/maven-central-packages.png" alt-text="A screenshot showing how to filter for packages from Maven Central.":::
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
+
+1. Select **Artifacts**, and then select your feed from the dropdown menu.
+
+1. Select **Maven Central** from the source dropdown menu to filter for packages from this upstream.
+
+1. The *Kotlinx Datetime* package that we saved in the previous step, is now available in our feed. Azure Artifacts automatically saved a copy to our feed when we executed the mvn install command.
+
+:::image type="content" source="media/saved-kotlin-package-from-upstream.png" alt-text="A screenshot showing a package that was saved from Maven Central.":::
> [!TIP]
> If Maven is not downloading all your dependencies, run the following command from the project directory to regenerate your project's files:
@@ -53,6 +98,6 @@ You can view the packages you saved from upstreams by selecting the **Maven Cent
## Related articles
-- [Install Maven Artifacts](./install.md)
+- [Search for packages in upstream sources](../how-to/search-upstream.md)
+- [Promote packages and manage feed views](../feeds/views.md)
- [Configure permissions](../feeds/feed-permissions.md)
-- [Configure upstream behavior](../concepts/upstream-behavior.md)
\ No newline at end of file
diff --git a/docs/artifacts/media/add-new-upstream.png b/docs/artifacts/media/add-new-upstream.png
deleted file mode 100644
index 2e8893f4b21..00000000000
Binary files a/docs/artifacts/media/add-new-upstream.png and /dev/null differ
diff --git a/docs/artifacts/media/add-upstream-diff-org.png b/docs/artifacts/media/add-upstream-diff-org.png
index 76ca0039098..b31c67c44dd 100644
Binary files a/docs/artifacts/media/add-upstream-diff-org.png and b/docs/artifacts/media/add-upstream-diff-org.png differ
diff --git a/docs/artifacts/media/add-upstream-same-org.png b/docs/artifacts/media/add-upstream-same-org.png
index c3d4b414da6..90669022dbd 100644
Binary files a/docs/artifacts/media/add-upstream-same-org.png and b/docs/artifacts/media/add-upstream-same-org.png differ
diff --git a/docs/artifacts/media/adjust-artifacts-usage-limit.png b/docs/artifacts/media/adjust-artifacts-usage-limit.png
new file mode 100644
index 00000000000..48607304042
Binary files /dev/null and b/docs/artifacts/media/adjust-artifacts-usage-limit.png differ
diff --git a/docs/artifacts/media/artifacts-recycle-bin.png b/docs/artifacts/media/artifacts-recycle-bin.png
new file mode 100644
index 00000000000..557dbdd4573
Binary files /dev/null and b/docs/artifacts/media/artifacts-recycle-bin.png differ
diff --git a/docs/artifacts/media/billing-settings.png b/docs/artifacts/media/billing-settings.png
deleted file mode 100644
index 1e02b632f40..00000000000
Binary files a/docs/artifacts/media/billing-settings.png and /dev/null differ
diff --git a/docs/artifacts/media/connect-to-feed-dotnet-server-2020-and-2022.png b/docs/artifacts/media/connect-to-feed-dotnet-server-2020-and-2022.png
new file mode 100644
index 00000000000..54fa8642407
Binary files /dev/null and b/docs/artifacts/media/connect-to-feed-dotnet-server-2020-and-2022.png differ
diff --git a/docs/artifacts/media/connect-to-feed-nuget-server-2019.png b/docs/artifacts/media/connect-to-feed-nuget-server-2019.png
new file mode 100644
index 00000000000..3e8c57cd2e9
Binary files /dev/null and b/docs/artifacts/media/connect-to-feed-nuget-server-2019.png differ
diff --git a/docs/artifacts/media/connect-to-feed-nuget-server-2020.png b/docs/artifacts/media/connect-to-feed-nuget-server-2020.png
new file mode 100644
index 00000000000..2fddf6a4264
Binary files /dev/null and b/docs/artifacts/media/connect-to-feed-nuget-server-2020.png differ
diff --git a/docs/artifacts/media/create-new-feed-azure-devops.png b/docs/artifacts/media/create-new-feed-azure-devops.png
new file mode 100644
index 00000000000..7596fbaf3de
Binary files /dev/null and b/docs/artifacts/media/create-new-feed-azure-devops.png differ
diff --git a/docs/artifacts/media/create-new-feed-dialog.png b/docs/artifacts/media/create-new-feed-dialog.png
new file mode 100644
index 00000000000..8cab486471e
Binary files /dev/null and b/docs/artifacts/media/create-new-feed-dialog.png differ
diff --git a/docs/artifacts/media/create-new-feed-server-2019.png b/docs/artifacts/media/create-new-feed-server-2019.png
new file mode 100644
index 00000000000..443356ca3b5
Binary files /dev/null and b/docs/artifacts/media/create-new-feed-server-2019.png differ
diff --git a/docs/artifacts/media/create-new-feed-server-2020.png b/docs/artifacts/media/create-new-feed-server-2020.png
new file mode 100644
index 00000000000..073d68cb396
Binary files /dev/null and b/docs/artifacts/media/create-new-feed-server-2020.png differ
diff --git a/docs/artifacts/media/create-new-feed-server-2022.png b/docs/artifacts/media/create-new-feed-server-2022.png
new file mode 100644
index 00000000000..c6708ab7d43
Binary files /dev/null and b/docs/artifacts/media/create-new-feed-server-2022.png differ
diff --git a/docs/artifacts/media/create-project-github-copilot-response.png b/docs/artifacts/media/create-project-github-copilot-response.png
new file mode 100644
index 00000000000..bba49215c4a
Binary files /dev/null and b/docs/artifacts/media/create-project-github-copilot-response.png differ
diff --git a/docs/artifacts/media/delete-all-versions.png b/docs/artifacts/media/delete-all-versions.png
new file mode 100644
index 00000000000..6bf9f58a518
Binary files /dev/null and b/docs/artifacts/media/delete-all-versions.png differ
diff --git a/docs/artifacts/media/delete-cargo-package.png b/docs/artifacts/media/delete-cargo-package.png
new file mode 100644
index 00000000000..2f8c24cc5d7
Binary files /dev/null and b/docs/artifacts/media/delete-cargo-package.png differ
diff --git a/docs/artifacts/media/delete/delete-package-permanently-confirmation.png b/docs/artifacts/media/delete/delete-package-permanently-confirmation.png
new file mode 100644
index 00000000000..2b6eded3943
Binary files /dev/null and b/docs/artifacts/media/delete/delete-package-permanently-confirmation.png differ
diff --git a/docs/artifacts/media/delete/delete-package-permanently.png b/docs/artifacts/media/delete/delete-package-permanently.png
new file mode 100644
index 00000000000..43a59d69f8f
Binary files /dev/null and b/docs/artifacts/media/delete/delete-package-permanently.png differ
diff --git a/docs/artifacts/media/delete/recycle-bin.png b/docs/artifacts/media/delete/recycle-bin.png
new file mode 100644
index 00000000000..9896e48cf48
Binary files /dev/null and b/docs/artifacts/media/delete/recycle-bin.png differ
diff --git a/docs/artifacts/media/delete/unlist-delete-nuget-package-newnav.png b/docs/artifacts/media/delete/unlist-delete-nuget-package-newnav.png
index 9ea09fbc935..b463a47ed27 100644
Binary files a/docs/artifacts/media/delete/unlist-delete-nuget-package-newnav.png and b/docs/artifacts/media/delete/unlist-delete-nuget-package-newnav.png differ
diff --git a/docs/artifacts/media/enable-upstream.png b/docs/artifacts/media/enable-upstream.png
index 9b3b47067a9..22f9b7873f4 100644
Binary files a/docs/artifacts/media/enable-upstream.png and b/docs/artifacts/media/enable-upstream.png differ
diff --git a/docs/artifacts/media/get-started-maven/maven-package-published-to-feed-contracted.png b/docs/artifacts/media/get-started-maven/maven-package-published-to-feed-contracted.png
new file mode 100644
index 00000000000..73d926c0e7a
Binary files /dev/null and b/docs/artifacts/media/get-started-maven/maven-package-published-to-feed-contracted.png differ
diff --git a/docs/artifacts/media/get-started-maven/maven-package-published-to-feed.png b/docs/artifacts/media/get-started-maven/maven-package-published-to-feed.png
new file mode 100644
index 00000000000..89af4e6a93f
Binary files /dev/null and b/docs/artifacts/media/get-started-maven/maven-package-published-to-feed.png differ
diff --git a/docs/artifacts/media/github-copilot-app-structure.png b/docs/artifacts/media/github-copilot-app-structure.png
new file mode 100644
index 00000000000..46eeea583e8
Binary files /dev/null and b/docs/artifacts/media/github-copilot-app-structure.png differ
diff --git a/docs/artifacts/media/github-copilot-csproj-class-relation.png b/docs/artifacts/media/github-copilot-csproj-class-relation.png
new file mode 100644
index 00000000000..b65dd968cf2
Binary files /dev/null and b/docs/artifacts/media/github-copilot-csproj-class-relation.png differ
diff --git a/docs/artifacts/media/increase-artifacts-beyond-free-tier.png b/docs/artifacts/media/increase-artifacts-beyond-free-tier.png
index b959a95fc0f..a628cc2607e 100644
Binary files a/docs/artifacts/media/increase-artifacts-beyond-free-tier.png and b/docs/artifacts/media/increase-artifacts-beyond-free-tier.png differ
diff --git a/docs/artifacts/media/maven-add-upstream.png b/docs/artifacts/media/maven-add-upstream.png
index 41f2e05c898..6f1a706f00f 100644
Binary files a/docs/artifacts/media/maven-add-upstream.png and b/docs/artifacts/media/maven-add-upstream.png differ
diff --git a/docs/artifacts/media/maven-delete-package.png b/docs/artifacts/media/maven-delete-package.png
new file mode 100644
index 00000000000..96796ec9d3e
Binary files /dev/null and b/docs/artifacts/media/maven-delete-package.png differ
diff --git a/docs/artifacts/media/new-feed-dialog-azure-devops.png b/docs/artifacts/media/new-feed-dialog-azure-devops.png
index 8cc0cc45d89..51f5189a82e 100644
Binary files a/docs/artifacts/media/new-feed-dialog-azure-devops.png and b/docs/artifacts/media/new-feed-dialog-azure-devops.png differ
diff --git a/docs/artifacts/media/new-feed-dialog-devops-server.png b/docs/artifacts/media/new-feed-dialog-devops-server.png
new file mode 100644
index 00000000000..5adce4c8eaa
Binary files /dev/null and b/docs/artifacts/media/new-feed-dialog-devops-server.png differ
diff --git a/docs/artifacts/media/new-feed-dialog.png b/docs/artifacts/media/new-feed-dialog.png
index 96464f5ca54..fbb63703a6f 100644
Binary files a/docs/artifacts/media/new-feed-dialog.png and b/docs/artifacts/media/new-feed-dialog.png differ
diff --git a/docs/artifacts/media/new-feed-with-scope-dialog.png b/docs/artifacts/media/new-feed-with-scope-dialog.png
deleted file mode 100644
index 6abac424568..00000000000
Binary files a/docs/artifacts/media/new-feed-with-scope-dialog.png and /dev/null differ
diff --git a/docs/artifacts/media/npm-connect-to-feed-azure-devops.png b/docs/artifacts/media/npm-connect-to-feed-azure-devops.png
new file mode 100644
index 00000000000..c3f29a71c2c
Binary files /dev/null and b/docs/artifacts/media/npm-connect-to-feed-azure-devops.png differ
diff --git a/docs/artifacts/media/npm-deprecate-delete.png b/docs/artifacts/media/npm-deprecate-delete.png
new file mode 100644
index 00000000000..9f03c4d0bfb
Binary files /dev/null and b/docs/artifacts/media/npm-deprecate-delete.png differ
diff --git a/docs/artifacts/media/npm-project-setup-azure-devops.png b/docs/artifacts/media/npm-project-setup-azure-devops.png
new file mode 100644
index 00000000000..856cf976414
Binary files /dev/null and b/docs/artifacts/media/npm-project-setup-azure-devops.png differ
diff --git a/docs/artifacts/media/npm-project-setup-server-2019-1.png b/docs/artifacts/media/npm-project-setup-server-2019-1.png
new file mode 100644
index 00000000000..1366abbbac4
Binary files /dev/null and b/docs/artifacts/media/npm-project-setup-server-2019-1.png differ
diff --git a/docs/artifacts/media/npm-project-setup-server-2020-1.png b/docs/artifacts/media/npm-project-setup-server-2020-1.png
new file mode 100644
index 00000000000..ad9e3b26ec8
Binary files /dev/null and b/docs/artifacts/media/npm-project-setup-server-2020-1.png differ
diff --git a/docs/artifacts/media/npm-project-setup-server-2022-1.png b/docs/artifacts/media/npm-project-setup-server-2022-1.png
new file mode 100644
index 00000000000..36fcbeb6259
Binary files /dev/null and b/docs/artifacts/media/npm-project-setup-server-2022-1.png differ
diff --git a/docs/artifacts/media/organization-billing-artifacts.png b/docs/artifacts/media/organization-billing-artifacts.png
new file mode 100644
index 00000000000..a58681adb60
Binary files /dev/null and b/docs/artifacts/media/organization-billing-artifacts.png differ
diff --git a/docs/artifacts/media/packages-public-feed.png b/docs/artifacts/media/packages-public-feed.png
new file mode 100644
index 00000000000..2ba2757f014
Binary files /dev/null and b/docs/artifacts/media/packages-public-feed.png differ
diff --git a/docs/artifacts/media/proj-org-scoped-feed.png b/docs/artifacts/media/proj-org-scoped-feed.png
index 821217fec65..e0697e12ec9 100644
Binary files a/docs/artifacts/media/proj-org-scoped-feed.png and b/docs/artifacts/media/proj-org-scoped-feed.png differ
diff --git a/docs/artifacts/media/public-feed-add-upstream.png b/docs/artifacts/media/public-feed-add-upstream.png
new file mode 100644
index 00000000000..7f56b8fe3bd
Binary files /dev/null and b/docs/artifacts/media/public-feed-add-upstream.png differ
diff --git a/docs/artifacts/media/public-feed-configure-upstream.png b/docs/artifacts/media/public-feed-configure-upstream.png
new file mode 100644
index 00000000000..58e2a1d6402
Binary files /dev/null and b/docs/artifacts/media/public-feed-configure-upstream.png differ
diff --git a/docs/artifacts/media/public-feed-upstream-types.png b/docs/artifacts/media/public-feed-upstream-types.png
new file mode 100644
index 00000000000..25621ebf3a4
Binary files /dev/null and b/docs/artifacts/media/public-feed-upstream-types.png differ
diff --git a/docs/artifacts/media/python-delete-package.png b/docs/artifacts/media/python-delete-package.png
new file mode 100644
index 00000000000..233b0f6b978
Binary files /dev/null and b/docs/artifacts/media/python-delete-package.png differ
diff --git a/docs/artifacts/media/recycle-bin.png b/docs/artifacts/media/recycle-bin.png
deleted file mode 100644
index 9024d3ce952..00000000000
Binary files a/docs/artifacts/media/recycle-bin.png and /dev/null differ
diff --git a/docs/artifacts/media/restore-package.png b/docs/artifacts/media/restore-package.png
index 05aa4cc48e7..01d8f0705f5 100644
Binary files a/docs/artifacts/media/restore-package.png and b/docs/artifacts/media/restore-package.png differ
diff --git a/docs/artifacts/media/save-upstream.png b/docs/artifacts/media/save-upstream.png
new file mode 100644
index 00000000000..ab66b73205b
Binary files /dev/null and b/docs/artifacts/media/save-upstream.png differ
diff --git a/docs/artifacts/media/server-2019-1-connect-to-feed.png b/docs/artifacts/media/server-2019-1-connect-to-feed.png
new file mode 100644
index 00000000000..843f46caf6c
Binary files /dev/null and b/docs/artifacts/media/server-2019-1-connect-to-feed.png differ
diff --git a/docs/artifacts/media/server-2020-1-connect-to-feed.png b/docs/artifacts/media/server-2020-1-connect-to-feed.png
new file mode 100644
index 00000000000..e2592534a5b
Binary files /dev/null and b/docs/artifacts/media/server-2020-1-connect-to-feed.png differ
diff --git a/docs/artifacts/media/server-2022-1-connect-to-feed.png b/docs/artifacts/media/server-2022-1-connect-to-feed.png
new file mode 100644
index 00000000000..7591ba69247
Binary files /dev/null and b/docs/artifacts/media/server-2022-1-connect-to-feed.png differ
diff --git a/docs/artifacts/media/settings-vs-storage.png b/docs/artifacts/media/settings-vs-storage.png
index f65e4d6ec98..6e1abcd8eb7 100644
Binary files a/docs/artifacts/media/settings-vs-storage.png and b/docs/artifacts/media/settings-vs-storage.png differ
diff --git a/docs/artifacts/media/universal-package-delete-package.png b/docs/artifacts/media/universal-package-delete-package.png
new file mode 100644
index 00000000000..890407c2154
Binary files /dev/null and b/docs/artifacts/media/universal-package-delete-package.png differ
diff --git a/docs/artifacts/npm/media/include-upstream-sources.png b/docs/artifacts/npm/media/include-upstream-sources.png
deleted file mode 100644
index c7b33f0205a..00000000000
Binary files a/docs/artifacts/npm/media/include-upstream-sources.png and /dev/null differ
diff --git a/docs/artifacts/npm/media/npm-audit-classic-pipeline.png b/docs/artifacts/npm/media/npm-audit-classic-pipeline.png
new file mode 100644
index 00000000000..49b5823b8b9
Binary files /dev/null and b/docs/artifacts/npm/media/npm-audit-classic-pipeline.png differ
diff --git a/docs/artifacts/npm/media/npm-audit-report.png b/docs/artifacts/npm/media/npm-audit-report.png
new file mode 100644
index 00000000000..cb8be019f27
Binary files /dev/null and b/docs/artifacts/npm/media/npm-audit-report.png differ
diff --git a/docs/artifacts/npm/media/npm-scopes-connect-to-feed.png b/docs/artifacts/npm/media/npm-scopes-connect-to-feed.png
new file mode 100644
index 00000000000..b907e9f7043
Binary files /dev/null and b/docs/artifacts/npm/media/npm-scopes-connect-to-feed.png differ
diff --git a/docs/artifacts/npm/media/project-setup-npm.png b/docs/artifacts/npm/media/project-setup-npm.png
index 12fa1abda3e..fba4f1f65c0 100644
Binary files a/docs/artifacts/npm/media/project-setup-npm.png and b/docs/artifacts/npm/media/project-setup-npm.png differ
diff --git a/docs/artifacts/npm/media/publish-scoped-packages.png b/docs/artifacts/npm/media/publish-scoped-packages.png
new file mode 100644
index 00000000000..8966344b0c4
Binary files /dev/null and b/docs/artifacts/npm/media/publish-scoped-packages.png differ
diff --git a/docs/artifacts/npm/media/saved-package-from-upstream.png b/docs/artifacts/npm/media/saved-package-from-upstream.png
new file mode 100644
index 00000000000..0c750326842
Binary files /dev/null and b/docs/artifacts/npm/media/saved-package-from-upstream.png differ
diff --git a/docs/artifacts/npm/npm-audit.md b/docs/artifacts/npm/npm-audit.md
index 7c25fd747e8..6e22a57d444 100644
--- a/docs/artifacts/npm/npm-audit.md
+++ b/docs/artifacts/npm/npm-audit.md
@@ -1,99 +1,114 @@
---
-title: Use npm audit with Azure Artifacts
-description: Use npm audit to scan for security vulnerabilities
+title: Enhance project security with npm audit
+description: Use npm audit to scan and fix package vulnerabilities
ms.service: azure-devops-artifacts
ms.topic: conceptual
-ms.date: 08/29/2022
+ms.date: 12/18/2023
monikerRange: 'azure-devops'
+"recommendations": "true"
---
-# Use npm audit
+# Use npm audit to detect and fix package vulnerabilities
[!INCLUDE [version-eq-azure-devops](../../includes/version-eq-azure-devops.md)]
-The *npm audit* command scans your project for security vulnerabilities and provides a detailed report of any identified anomaly. Performing security audits is an essential part in identifying and fixing vulnerabilities in the project's dependencies. Fixing these vulnerabilities could prevent things like data loss, service outages, and unauthorized access to sensitive information.
+The *npm audit* command performs a thorough scan of your project, identifying potential security vulnerabilities and generating a detailed report that highlights any issues found. Conducting security audits is a vital step in recognizing and resolving vulnerabilities within the project's dependencies. The *npm audit fix* command automatically addresses the detected vulnerabilities, updating insecure package versions to the latest secure releases.
+Addressing these vulnerabilities is crucial for preventing potential problems like data loss, service disruptions, and unauthorized access to sensitive information.
-Azure DevOps does not support *npm audit*, if you try to run the default *npm audit* command from your pipeline, the task will fail with the following message: *Unexpected end of JSON input while parsing...*.
+>[!WARNING]
+> Executing *npm audit* will transmit the names of all packages specified in your *package.json* to the public registry.
-As a workaround, you can run *npm audit* with the registry argument `--registry=https://registry.npmjs.org/`. This will route the *npm audit* command directly to the public registry.
+## Run npm audit locally
->[!WARNING]
-> Running *npm audit* will forward all the packages' names from your *package.json* to the public registry.
+`npm audit` can be executed locally without needing to authenticate with your feed. This allows you to scan your project for vulnerabilities and receive a detailed report on the detected security issues and their severity.
-## Run npm audit from your pipeline
+If you want to fix the detected vulnerabilities, you can run `npm audit fix`, but you must be authenticated with your feed in order to do so. This command updates insecure package versions to the latest secure releases available.
-Select the YAML or the classic tab to learn how to run npm audit from you Pipeline.
+When you run npm audit fix, it not only updates the local project's *package.json* and *package-lock.json* but also syncs these changes with the associated Azure Artifacts feed. The newly secured versions of the packages will be automatically available in your feed.
-# [YAML](#tab/yaml)
+This synchronization ensures that other projects sharing the same feed will also benefit from these updates. It helps maintain a consistent and secure set of package versions across all projects.
+
+1. Run the following command in your project directory to perform an npm audit:
-Add the following task to your yaml pipeline to only scan for security vulnerabilities.
+ ```Command
+ npm audit
+ ```
+
+1. If you want to attempt to upgrade to non-vulnerable package versions, make sure you're [connected to your feed](./npmrc.md#connect-to-feed) first, then run the following command in your project directory:
+
+ ```Command
+ npm audit fix
+ ```
-```yaml
-steps:
-- task: Npm@1
- displayName: 'npm audit'
- inputs:
- command: custom
- customCommand: 'audit --registry=https://registry.npmjs.org/'
-```
+After running *npm audit fix*, make sure to conduct a thorough testing on your application to confirm that the updates didn't introduce any breaking changes. If a fix requires a major version update, it's recommended to review the package's release notes for any potential breaking changes. Keep in mind that while a private package with public vulnerable dependencies receives vulnerability alerts, it won't receive fixes through *npm audit fix*.
-Instead of only scanning, to scan and also attempt to upgrade to non-vulnerable package versions:
+> [!NOTE]
+> *npm audit* automatically runs with each execution of *npm install*, but it only works for public packages.
-```yaml
-steps:
-- task: Npm@1
- displayName: 'npm audit fix'
- inputs:
- command: custom
- customCommand: 'npm audit fix --registry=https://registry.npmjs.org/ --package-lock-only'
-```
+## Run npm audit from your pipeline
-- **command**: the npm command to run.
-- **customCommand**: Required when command == custom.
+Azure Pipelines doesn't currently support *npm audit*. If you try using the regular *npm audit* command in your pipeline, it will fail. Instead, execute *npm audit* with the *--registry* argument and provide your feed's source URL.
# [Classic](#tab/classic)
-1. From your pipeline definition, select the `+` sign to add a task to your agent job.
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
+
+1. Select **Pipelines**, select your pipeline, and then select **Edit** to modify it.
+
+1. From your pipeline definition, select the `+` sign to add a new task.
- :::image type="content" source="media/add-new-task.png" alt-text="Screenshot showing how to add a new task to the agent job":::
+1. Search for the **npm** task, and then select **Add** to add it to your pipeline.
-1. Search for the **npm** task. Select **Add** to add it to your agent job.
+1. Enter a **Display name** for your task, and select **custom** from the **Command** dropdown menu.
-1. Fill out the required fields as follows:
+1. Paste your custom command into the **Command and arguments** text box:
- 1. To only scan for security vulnerabilities use this command:
+ 1. Use the following command to perform an npm audit and scan for package vulnerabilities. Replace the placeholder with your feed's source URL:
- ```Command
- audit --registry=https://registry.npmjs.org/
- ```
+ ```Command
+ audit --registry=
+ ```
- 1. To also attempt to upgrade to non-vulnerable package versions:
+ 1. If you want to attempt to upgrade to non-vulnerable package versions, use the following command. Replace the placeholder with your feed's source URL:
```Command
- audit fix --registry=https://registry.npmjs.org/ --package-lock-only
+ audit fix --registry=
```
-:::image type="content" source="media/npm-audit-task.png" alt-text="Screenshot showing the npm custom task to run npm audit":::
+ :::image type="content" source="./media/npm-audit-classic-pipeline.png" alt-text="A screenshot showing the npm audit task in a classic pipeline.":::
----
+# [YAML](#tab/yaml)
+
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
-## Run npm audit on your development machine
+1. Select **Pipelines**, select your pipeline, and then select **Edit** to modify it.
-To run npm audit locally, run the following command in a command prompt window:
+1. Add the following task to your yaml pipeline to perform an npm audit and scan for package vulnerabilities:
-```Command
-npm audit --registry=https://registry.npmjs.org/
-```
+ ```yaml
+ steps:
+ - task: Npm@1
+ displayName: 'npm audit'
+ inputs:
+ command: custom
+ customCommand: 'audit --registry='
+ ```
-To also attempt to upgrade to non-vulnerable package versions:
+1. If you want to upgrade to non-vulnerable package versions, add the following task to your yaml pipeline:
+
+ ```yaml
+ steps:
+ - task: Npm@1
+ displayName: 'npm audit & fix'
+ inputs:
+ command: custom
+ customCommand: 'audit fix --registry='
+ ```
-```Command
-audit fix --registry=https://registry.npmjs.org/ --package-lock-only
-```
+* * *
## Related articles
-- [npm quickstart](../get-started-npm.md).
-- [Publish npm packages with Azure Pipelines](../../pipelines/artifacts/npm.md).
-- [Artifacts storage consumption](../artifact-storage.md)
-- [Delete and recover packages](../how-to/delete-and-recover-packages.md).
+- [Use packages from npmjs.com](./upstream-sources.md)
+- [Publish npm packages (YAML/Classic)](../../pipelines/artifacts/npm.md)
+- [Use Npm scopes in Azure Artifacts](./scopes.md)
diff --git a/docs/artifacts/npm/npmrc.md b/docs/artifacts/npm/npmrc.md
index 671dcd538ee..a2ca12d7bed 100644
--- a/docs/artifacts/npm/npmrc.md
+++ b/docs/artifacts/npm/npmrc.md
@@ -1,95 +1,79 @@
---
-title: Set up your client's npmrc
-description: How to set up your project and connect to Azure Artifacts feeds
+title: Connect your npm project to Azure Artifacts
+description: Learn how to set up your npm project and connect to Azure Artifacts
ms.assetid: A5364E3A-3918-4318-AAE0-430EA91AD5F1
ms.service: azure-devops-artifacts
ms.custom: engagement-fy23
ms.topic: conceptual
-ms.date: 04/04/2023
+ms.date: 03/13/2025
monikerRange: '<= azure-devops'
+"recommendations": "true"
---
-# Set up your project and connect to Azure Artifacts
+# Connect your npm project to Azure Artifacts
[!INCLUDE [version-lt-eq-azure-devops](../../includes/version-lt-eq-azure-devops.md)]
-Azure Artifacts enables you to publish various package types to your feeds and install packages from both feeds and public registries like npmjs.com. Before we can authenticate with Azure Artifacts, we need to configure our *.npmrc* file, which stores the feed URLs and credentials that Npm uses. This file can be used to customize the behavior of the Npm client, such as setting up proxies, specifying default package locations, or configuring private package feeds. The *.npmrc* file is located in the user's home directory and can also be created at the project level to override the default settings. By editing the *.npmrc* file, users can customize their Npm experience and make it more tailored to their needs.
+Azure Artifacts enables developers to manage their packages from various sources, including both public registries like npmjs.com and private feeds. To authenticate with Azure Artifacts, you'll need to configure your npm config file. This file contains feed URLs and credentials used by npm, offering options to customize your npm client behavior, such as setting up proxies, defining default package locations, or configuring private package feeds. The *npmrc* file is typically located in the user's home directory but can also be created at the project level to override default settings.
-## Project setup
+## Prerequisites
-For best practice, we suggest using two separate configuration files. The first file is used to authenticate with Azure Artifacts, while the second file is stored locally and contains your credentials. To set up the second file, place it in your home directory on your development machine and include all of your registry credentials. By using this approach, the Npm client can easily retrieve your credentials for authentication, allowing you to share your configuration file while keeping your credentials secure. These steps will walk you through the process of setting up the first configuration file:
+- An Azure DevOps organization. [Create one for free](../../organizations/accounts/create-organization.md).
-### [Windows](#tab/windows/)
-
-::: moniker range="azure-devops"
-
-1. Sign in to your Azure DevOps organization, and then navigate to your project.
-
-1. Select **Artifacts**, and then select **Connect to feed**.
-
- :::image type="content" source="../media/connect-to-feed-azure-devops-newnav.png" alt-text="Screenshot showing how to connect to a feed.":::
-
-1. Select **npm** from the left navigation pane.
+- An Azure DevOps project. Create a new [project](../../organizations/projects/create-project.md#create-a-project) if you don't have one already.
-1. If this is the first time using Azure Artifacts with npm, select **Get the tools** and follow the instructions to install the prerequisites.
+- An Azure Artifacts feed. [Create one for free](../get-started-npm.md#create-a-feed).
-1. Follow the instructions in **Project setup** to set up your config file.
+- [Download and install Node.js and npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm).
- :::image type="content" source="../media/npm-azure-devops-newnav.png" alt-text="Screenshot showing the steps to set up the project and publish and restore packages.":::
+## Connect to Feed
-::: moniker-end
+Azure Artifacts recommends using two separate configuration files. The first is dedicated to authenticating with Azure Artifacts, while the second should be kept locally to store your credentials. This approach allows you to share your configuration file while keeping your credentials secure.
-::: moniker range="azure-devops-2019 || azure-devops-2020 || azure-devops-2022"
+To set up the second file, place it in your home directory on your development machine and include all your registry credentials. This enables the npm client to easily access your credentials for authentication.
-1. Sign in to your Azure DevOps organization, and then navigate to your project.
-
-1. Select **Artifacts**, and then select **Connect to feed**.
-
- :::image type="content" source="../media/connect-to-feed-azure-devops-newnav.png" alt-text="Screenshot showing how to connect to a feed.":::
+The following steps guide you through setting up the first configuration file. Select the tab that corresponds to your development environment:
-1. Select **npm** from the left navigation pane.
+::: moniker range="< azure-devops"
-1. If this is the first time using Azure Artifacts with npm, select **Get the tools** and follow the instructions to install the prerequisites.
-
-1. Follow the instructions in **Project setup** to set up your config file.
-
- :::image type="content" source="../media/connect-to-feed-devops-server.png" alt-text="Screenshot showing the steps to set up the project and restore packages.":::
+> [!NOTE]
+> `vsts-npm-auth` is not supported in Azure DevOps Server.
::: moniker-end
-::: moniker range="tfs-2018"
-
-1. Select **Build and Release**.
-
-1. Select **Packages**, and then select **Connect to feed**.
+::: moniker range="azure-devops"
- :::image type="content" source="../media/connect-to-feed.png" alt-text="Screenshot showing how to connect to a feed in TFS.":::
+### [Windows](#tab/windows/)
-1. Select **npm** from the left navigation pane.
+1. Sign in to your Azure DevOps organization, and then navigate to your project.
-1. Follow the instructions provided in the **Other** tab to set up your project.
+1. Select **Artifacts**, and then select **Connect to Feed**.
+
+ :::image type="content" source="../media/npm-connect-to-feed-azure-devops.png" alt-text="A screenshot showing how to connect to a feed in Azure DevOps Services.":::
-::: moniker-end
+1. Select **npm** from the left sidebar. If this is the first time using Azure Artifacts with npm, make sure you've installed the prerequisites.
+1. Follow the instructions in the **Project setup** section to connect to your feed.
-> [!TIP]
-> Using multiple registries in .npmrc files is supported with [scopes](..//npm/scopes.md) and [upstream sources](../concepts/upstream-sources.md).
+ :::image type="content" source="../media/npm-project-setup-azure-devops.png" alt-text="A screenshot showing how to set up your npm project.":::
-### [Other](#tab/other/)
+### [Linux/macOS](#tab/Linuxmac/)
-1. Add a *.npmrc* file in your project's directory, in the same directory as your package.json file, and copy the following snippet into it.
+1. Add a *.npmrc* file in your project's directory, in the same directory as your *package.json* file, and paste the following snippet into it.
- ```Command
- registry=https://pkgs.dev.azure.com/ramiMSFTDevOps/_packaging/OrgScopedDemo/npm/registry/
+ ```
+ registry=https://pkgs.dev.azure.com///_packaging//npm/registry/
always-auth=true
```
-1. Copy the following snippet into your user-level *.npmrc* file (~/.npmrc). Make sure that you don't add it to the *.npmrc* file in your source repository:
+### Setup credentials
+
+1. Copy the following snippet and paste it into your user-level *npmrc* file:
- **Organization-scoped feed**:
- ```Command
+ ```
; begin auth token
//pkgs.dev.azure.com//_packaging//npm/registry/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
//pkgs.dev.azure.com//_packaging//npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
@@ -102,7 +86,7 @@ For best practice, we suggest using two separate configuration files. The first
- **Project-scoped feed**:
- ```Command
+ ```
; begin auth token
//pkgs.dev.azure.com///_packaging//npm/registry/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
//pkgs.dev.azure.com///_packaging//npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
@@ -115,151 +99,213 @@ For best practice, we suggest using two separate configuration files. The first
1. Generate a [personal access token](../../organizations/accounts/use-personal-access-tokens-to-authenticate.md) with **packaging read and write** scopes.
-1. Encode your newly generated personal access token as follows:
-
- 1. Run the following command in a command prompt window, and then paste your personal access token when prompted:
+1. Run the following command in a command prompt window, and then paste your personal access token when prompted. Once done, copy the generated Base 64 encoded value.
- ```Command
- node -e "require('readline') .createInterface({input:process.stdin,output:process.stdout,historySize:0}) .question('PAT> ',p => { b64=Buffer.from(p.trim()).toString('base64');console.log(b64);process.exit(); })"
- ```
+ ```
+ node -e "require('readline') .createInterface({input:process.stdin,output:process.stdout,historySize:0}) .question('PAT> ',p => { b64=Buffer.from(p.trim()).toString('base64');console.log(b64);process.exit(); })"
+ ```
- You can also use the following command to convert your personal access token to Base64.
+1. If you're on Linux/Mac, you can alternatively use the following command to convert your personal access token to Base 64. Copy the resulting Base64 encoded value.
- - **Linux/Mac**:
- ```Command
- echo -n "YOUR_PERSONAL_ACCESS-TOKEN" | base64
- ```
- 1. Copy the Base64 encoded value.
+ ```
+ echo -n "YOUR_PERSONAL_ACCESS-TOKEN" | base64
+ ```
-1. Open your *.npmrc* file and replace the placeholder *[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]* with your encoded personal access token that you created in the previous step.
+1. Replace the placeholders *[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]* in your user *.npmrc* file with the encoded personal access token obtained from the previous step.
* * *
-> [!NOTE]
-> `vsts-npm-auth` is not supported in TFS and Azure DevOps Server.
+::: moniker-end
-## Pipeline authentication
+::: moniker range="azure-devops-2022"
-For authentication with your pipeline, Azure Artifacts recommends using the [npm authenticate task](/azure/devops/pipelines/tasks/reference/npm-authenticate-v0). When using a task runner like gulp or Grunt, it's important to add the npm authenticate task to the beginning of your pipeline. By doing so, your credentials are injected into your project's *.npmrc* file and persisted during the pipeline run, enabling subsequent steps to use the credentials in the configuration file.
+### [Windows](#tab/windows/)
-### [Classic](#tab/classic)
+1. Sign in to your Azure DevOps collection, and then navigate to your project.
-::: moniker range=">= azure-devops-2019"
+1. Select **Artifacts**, and then select **Connect to Feed**.
+
+ :::image type="content" source="../media/server-2022-1-connect-to-feed.png" alt-text="A screenshot showing how to connect to a feed in Azure DevOps Server 2022.1.":::
-1. Sign in to your Azure DevOps organization, and then navigate to your project.
+1. Select **npm** from the left sidebar, and then follow the instructions in the **Project setup** section to set up your config file.
-1. Select **Azure Pipelines**, and then select your pipeline definition.
+ :::image type="content" source="../media/npm-project-setup-server-2022-1.png" alt-text="A screenshot showing how to set up your npm project in Azure DevOps Server 2022.1.":::
-1. Select **Edit** to modify your pipeline.
+### [Linux/macOS](#tab/Linuxmac/)
-1. Select `+` to add a task to your pipeline.
+1. Add a *.npmrc* file in your project's directory, in the same directory as your *package.json* file, and paste the following snippet into it.
- :::image type="content" source="../../pipelines/media/get-started-designer/builds-tab-add-task-azure-devops-newnavon.png" alt-text="Screenshot showing how to add the npm authenticate task to your pipeline.":::
+ ```
+ registry=http://///_packaging//npm/registry/
+
+ always-auth=true
+ ```
+### Setup credentials
-1. Search for the **npm Authenticate** task, and then select **Add** to add it to your pipeline.
+1. Copy the following snippet and paste it into your user-level *.npmrc* file:
- :::image type="content" source="../media/build-definition/build-definition-npm-auth-task-phase-newnav.png" alt-text="Screenshot showing the npm authenticate task added to the pipeline.":::
+ - **Collection-scoped feed**:
-1. Select your *.npmrc* file.
+ ```
+ ; begin auth token
+ ////_packaging//npm/registry/:username=DefaultCollection
+ ////_packaging//npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
+ ////_packaging//npm/registry/:email=npm requires email to be set but doesn't use the value
+ ////_packaging//npm/:username=DefaultCollection
+ ////_packaging//npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
+ ////_packaging//npm/:email=npm requires email to be set but doesn't use the value
+ ; end auth token
+ ```
- :::image type="content" source="../media/build-definition/build-definition-npm-auth-task-file.png" alt-text="Screenshot showing how to add your *.npmrc* file.":::
+ - **Project-scoped feed**:
-1. Select **Save & queue** when you're done.
+ ```
+ ; begin auth token
+ /////_packaging//npm/registry/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
+ /////_packaging//npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
+ /////_packaging//npm/registry/:email=npm requires email to be set but doesn't use the value
+ /////_packaging//npm/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
+ /////_packaging//npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
+ /////_packaging//npm/:email=npm requires email to be set but doesn't use the value
+ ; end auth token
+ ```
+
+1. Generate a [personal access token](../../organizations/accounts/use-personal-access-tokens-to-authenticate.md) with **packaging read and write** scopes.
+
+1. Run the following command in a command prompt window, and then paste your personal access token when prompted. Once done, copy the generated Base 64 encoded value.
+
+ ```
+ node -e "require('readline') .createInterface({input:process.stdin,output:process.stdout,historySize:0}) .question('PAT> ',p => { b64=Buffer.from(p.trim()).toString('base64');console.log(b64);process.exit(); })"
+ ```
+
+1. Replace the placeholders *[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]* in your user *.npmrc* file with the encoded personal access token obtained from the previous step.
+
+* * *
::: moniker-end
-::: moniker range="tfs-2018"
+::: moniker range="azure-devops-2020"
-1. Select **Build and Release**, and then select **Builds**.
+### [Windows](#tab/windows/)
+
+1. Sign in to your Azure DevOps collection, and then navigate to your project.
- :::image type="content" source="../../pipelines/media/get-started-designer/navigate-to-builds-tab-tfs-2018-2.png" alt-text="Screenshot showing how to access your builds in TFS.":::
+1. Select **Artifacts**, and then select **Connect to feed**.
+
+ :::image type="content" source="../media/server-2020-1-connect-to-feed.png" alt-text="A screenshot showing how to connect to a feed in Azure DevOps Server 2020.1.":::
-1. Select your pipeline, and then select **Edit**.
+1. Select **npm** from the left, and then follow the instructions in **Project setup** to set up your config file.
-1. Select `+` to add a task to your pipeline.
+ :::image type="content" source="../media/npm-project-setup-server-2020-1.png" alt-text="A screenshot showing how to set up your npm project in Azure DevOps Server 2020.1.":::
- :::image type="content" source="../../pipelines/media/get-started-designer/builds-tab-add-task-tfs-2018-2.png" alt-text="Screenshot showing how to add a new task to your pipeline.":::
+### [Linux/macOS](#tab/Linuxmac/)
-1. Search for the **npm Authenticate** task, and then select **Add** to add it to your pipeline.
+1. Add a *.npmrc* file in your project's directory, in the same directory as your package.json file, and paste the following snippet into it:
- :::image type="content" source="../media/build-definition/build-definition-npm-auth-task-phase.png" alt-text="Screenshot showing the npm authenticate task.":::
+ ```
+ registry=http://///_packaging/