Migrating Azure DevOps Projects - Part 1: Repos and Wikis

2 minute read

Migrating Azure DevOps - illustration showing Azure Boards, Azure Repos, Azure Pipelines, Azure Test Plans, and Azure Artifacts

Migrating Azure DevOps projects between organizations (hopefully) isn’t something you do every day, but when the need arises—whether due to a merger, reorganization, or other reasons—it can be a challenging process.

Breaking the work down, you’re mostly dealing with Boards/Work Items, Repos, Wikis, Pipelines, Test Plans, and Artifacts.

You’d expect Microsoft to provide a seamless way to handle this, but unfortunately, no single tool does it all. Instead, you’ll need a mix of different tools and approaches to get the job done.

So, let’s start with something fairly simple:

📂 Repos

Since you’re hopefully using Git by now, migrating Repos is fairly straightforward using the following steps:

# Mirror the Existing Repository
git clone --mirror https://dev.azure.com/old-org/old-project/_git/repo-name

# Push to new Repository (must be created beforehand)
cd repo-name.git
git push --mirror https://[username]:[password]@dev.azure.com/new-org/new-project/_git/repo-name

Using --mirror ensures that all branches, tags, and Git refs are cloned and pushed, fully replicating the repository.

If you’re moving between organizations with different credentials, it’s often easiest to use Git Credentials directly in the command line ([username]:[password]). You can generate these credentials from the Clone Repository panel by clicking Generate Git Credentials:

Azure DevOps Clone Repository dialog showing HTTPS command line URL and Generate Git Credentials button

⚠️ Important: While links from work items to commits should continue to work, the reverse—links from Git commit logs to work items—won’t. This happens because work items get new IDs during migration. I’ll cover how to handle this later in an advanced part 🤓.

❌ Disabling the Repository

After migrating the repo, it’s a good practice to disable access to the old repository. This will prevent any accidental usage while keeping the repository discoverable with a warning.

This can be done from Manage Repository -> [Repository] -> Settings -> Disable Repository

Azure DevOps disabled repository page showing 'Repository Target project is disabled' message with UFO illustration

📖 Wikis

With the repository successfully migrated, Wikis are fairly simple to move since they are also stored as Git repositories. The only difficulty can be locating the repo URL, which can be found under the Clone wiki menu item on the Wiki page:

Azure DevOps Wiki page showing the Clone wiki option highlighted in the dropdown menu

⚠️ Important: As with commit messages, links to work items (#12345) won’t work after migration. This happens because work items get new IDs during migration. I’ll cover how to handle this later in an advanced part 🤓.


That concludes Part 1 of this series! ✅ Stay tuned for Part 2, where we’ll dive into migrating Boards and Work Items, and in future parts, we’ll explore migrating Test Plans, Pipelines, and more. 🚀


🔹 Azure DevOps Migration Series 🔹

🚀 Part 1: Migrating Repos & Wikis | 🔗LinkedIn

📊 Part 2: Migrating Boards & Work Items | 🔗LinkedIn

🧪 Part 3: (Coming soon!)