CodePlex now supporting native Mercurial

What is Mercurial?

Mercurial is a distributed source control management system. For new projects created on, you will be able to choose from either Team Foundation Server or Mercurial as your source control repository.

To illustrate, in the Create a Project wizard you’ll see the following:

Mercurial as a Source Control option

If you are a current project owner and wish to switch to Mercurial, please contact us at CodePlex Support with your project name, and we’ll be glad to help you out.


Adding distributed version control support to CodePlex has become a top feature request from users, as the popularity of DVCS for open source development has grown significantly. Mercurial is one of the most popular distributed version control systems and offers great support for Windows based tools as well as works very well as a hosted service.

If you are new to Distributed Source Control Systems, please read this section!

Mercurial is a Distributed Version Control System (DVCS). Unlike Team Foundation Server, DVCS has a very different model for collaborating on an open source project.

  • In DVCS, you do not check in and out changes. You check in and out the entire set of changes (aka the repository).

To get started, you first make a local copy of the repository, or clone the repository. In TFS speak, this is the equivalent of getting the entire history (source code + metadata) of each and every change set in source control. It is literally making a copy of everything you see in the CodePlex source control. Since you are copying the entire repository, there isn’t a notion of “checking out”.

  • In DVCS, you commit to the local repository, and push your changes back to CodePlex.

Since you have your own repository, you “check in” by committing to your local repository. Once you’ve committed locally, you can “check in” those changes back to CodePlex by pushing those changes. Hence the term “check in” doesn’t apply because it is overloaded in the DVCS context.

A quick recap:

  • Anyone can clone. (Create local repository, Get all change sets from repository)
  • Anyone can commit. (Check-in to their local repository)
  • Anyone can pull. (Get all change sets from repository)
  • Only team can push. (check-in of local repository to CodePlex)

See our post Using Mercurial on CodePlex for a step-by-step walkthrough.

Comments (17)
  1. Great I remebered voting for the feature (actually git).

    Any plans for Git on codeplex?

  2. Clark says:

    Why not Git?

    It’s because github beat you to it, isn’t it?

  3. While in my opinion DVCS brings little improvement for companies where the user has access via the local network having a central point of submission DVCS is great for open source projects.

    Especially because the user is able to do check-ins on projects without write access (e.g. when creating a patch for a third party tool/lib).

    Thanks a lot for this great improvement on open-source development from MS side.

    Greetz Felix

  4. Identity says:


    good question, but your guess sounds like it is a bit filled by hate…

    what does not speak for the use of git?

    so long


  5. Eric Hexter says:

    Any chance you will implement a feature where users can create a remote forked branch and enable the users to submit a patch by submitting pulling in their forked changes?  This is the feature that makes GitHub so powerful to OSS.  The ease of contributing large / non trivial features.  Doing this using patch files is not only cumbersome but actually becomes difficult when keeping everything up to date. The patch can go stale while it is waiting to be reviewed.  

    I would love to bring the source control for MvcContrib back to codeplex from but I cannot justify losing the great contribution model that comes from allowing users to fork and send remote pull requests to the project team.  Any thoughts on this?   You all are so close with Hg.

  6. Mike says:

    Congrats guys! I was waiting this!

  7. John says:


    why do you need git? mercurial is better in almost any way.

  8. Adam says:

    git is better in every way. Look at the speed comparisons and adoption rate.

  9. Joe says:

    Just to thank you for incorporate Mercurial support, I use it on several projects.

  10. Paul Kohler says:

    This is really good.

    One of the things that has been a real issue working on a codeplex project ( has been making a bunch of changes disconnected and having to juggle those checkins when you are online as a big lump.

    Having that local repository will be great – should be "upgrading" soon!  

    PK   🙂

  11. Borek says:

    Out of curiosity, why was Mercurial picked instead of git? I like Mercurial better than git but the latter  seems to be more popular in .NET community in general so I’m wondering if there were some backend issues with it or something?

    Anyway, it’s great to see distributed version control system supported on CodePlex, it was an unexpected move to me.

  12. Sylvanaar says:

    Git?!, it’d be like supporting Visual SourceSafe on Sourceforge, or asking Linus to use TFS. Git is a creation of an OS developer and has an extremely clear bias towards said OS. Mercurial does not have this problem, and ToroiseHg works great out of the box. Google uses mercurial, I think so does Mozilla.

    Anyhow, mercurial and git can read each other’s repos, and likewise both can read an svn repo. so you can use whatever you like as a client.

  13. jrummell says:

    Any chance codeplex will get native Subversion support? The bridge still doesn’t support branch/merge.

  14. Mauricio says:

    It would have been really cool if you guys had used GitSharp ( ) to add git support to codeplex. Well, you still can of course 🙂

  15. Darius says:

    Congratulations on such a superb feature!

    Poor svn support and lack of DCVS was one of the reasons to partly move out my project from CodePlex. Mercurial support is great!

  16. Clifford says:

    Nice addition! Any likelyhood of native SVN in the coming year as well?

  17. Ian Robinson says:

    I speculate that one reason Mercurial was chosen over Git because it isn’t a port from Linux. It was actually meant to run on Windows from the beginning.

Comments are closed.

Skip to main content