Edit

4. Monitor the migration

Azure DevOps Services

The initial sync can take several hours or even days to complete, depending on the size of your repository. After the initial synchronization finishes, ELM continues to perform periodic syncs for up to 21 days to capture ongoing updates. During this 21-day window, you must run the cutover to finalize the migration.

To see which repositories are in each phase, run az devops migrations list and filter by the stage field. Errors surface in the migration status output so you can identify and fix issues before you continue.

Important

Concurrency limit: Each enterprise can have up to 30 active migrations in progress at once, including a maximum of 20 initial migrations. To free capacity for another migration, complete the cutover for an existing migration.

Track migration status

List all migrations for your organization:

az devops migrations list --org https://dev.azure.com/<org>

Migration stages

Stage Description
Queued Migration accepted; work hasn't started yet.
Validation Running pre-migration checks.
Synchronization Copying and syncing repository content.
Cutover Running the final sync and transitioning to GitHub.
ReviewForCutover Cutover reached the scheduled time with unresolved failures and is waiting for cutover approve (or rescheduling).
ReadyForCutover Approved and waiting for the next ELM job to perform the final cutover.
Migrated Migration complete. GitHub is the system of record.

Migration statuses

Status Meaning
Active Migration is running.
Succeeded Current phase completed successfully.
Completed Migration reached the terminal Migrated stage.
Failed An error occurred. You can resume after you fix the issue.
Suspended Manually paused. You can resume.

What to watch for

  • Last successful sync time — confirm syncs are running on schedule.
  • Sync state — identify whether the migration is progressing or stalled.
  • Error conditions — ELM retries transient failures automatically. Persistent errors require investigation.

Resume after a sync error

If sync errors occur, investigate the error details and fix the underlying issue. Then, let ELM resume automatically, or use one of the following methods.

az devops migrations resume --org https://dev.azure.com/<org>
                            --repository-id <repo-guid>

Pause and resume the migration

If you need to temporarily stop a migration and restart it in the same mode:

To pause the migration, run:

az devops migrations pause --org https://dev.azure.com/<org>
                           --repository-id <repo-guid>

To resume the migration, run:

az devops migrations resume --org https://dev.azure.com/<org>
                            --repository-id <repo-guid>

Note

You can pause a migration for any length of time, but the 21-day cutover window still applies.

Cancel the migration

At any point during syncing, you can stop and delete a migration. This action permanently deletes the migration record.

Run the following command. You're prompted to confirm.

az devops migrations abandon --org https://dev.azure.com/<org>
                             --repository-id <repo-guid>

After cutover, the Azure DevOps repository is set to read-only. If you want to resume writing to it, add --remove-read-only to restore write access. This flag only applies after cutover.

az devops migrations abandon --org https://dev.azure.com/<org>
                             --repository-id <repo-guid>
                             --remove-read-only

To skip the interactive confirmation prompt (for scripted cleanup), add --yes.

After you abandon a migration:

  • Source repository: Your Azure DevOps repository is unchanged and fully writable. No cleanup is required.
  • Audit trail: The migration record isn't retained, but an audit event is written to record that the migration was abandoned. For more information, see Audit.
  • Starting a new migration: You can create a new migration for the same source repository, but a short cooldown applies before the new migration can start. If you want to reuse the same target GitHub repository name, first delete the existing GitHub repository. You must have Delete repository permission in GitHub to do this.

Next step