Search code examples
mercurialrepositorybitbuckethgrc

How do I move a private Mercurial repository to a central server?


I’m just getting started with Mercurial, and I’ve read Joel Spolsky’s Hg Init tutorial, which I liked.

I’m wondering: let’s say I have a private repository and I work on it for about a month. Then I decide I want to centralize it or make it public, like on bitbucket.org. I want to retain all the history.

The intuitive thing would be to use hg clone, but according to the docs:

The location of the source is added to the new repository's .hg/hgrc file, as the default to be used for future pulls.

I don’t think this is what I’d want, since the source is my local, private repository, and the destination is the public server. I don’t want the public server trying to pull from my private repository in the future thinking it’s the central one. I hope this makes sense.

Do I have to tweak the .hg/hgrc file on the server manually? Am I approaching this correctly?


Solution

  • BitBucket's help says it's as easy as making an empty repo on BitBucket, then pushing to it:

    ... create a new empty repository via the "Create repository" page. We will assume that this repository is named blonk and is to be found on http://bitbucket.org/jespern/blonk.

    Now, just push to it:

      $ cd ~/Work/blonk # our existing hg repository
      $ hg push http://bitbucket.org/jespern/blonk
      ...
    

    Done!

    You can edit .hg/hgrc in your repository to include the default path to Bitbucket:

      $ cat .hg/hgrc
      [paths]
      default = http://bitbucket.org/jespern/blonk
    

    Now you can simply enter hg push and hg pull without having to specify the full URL.