Differences between revisions 1 and 171 (spanning 170 versions)
Revision 1 as of 2005-08-31 07:26:25
Size: 3893
Comment:
Revision 171 as of 2013-08-30 17:24:40
Size: 725
Editor: Tracie293
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
== Publishing Mercurial repositories ==

The easiest way to share changes with other people using Mercurial is to publish them on the Web. Mercurial lets people pull changes using HTTP.

There are four (!) ways to publish a repository over HTTP, of which the first two below are most worth considering:

 * Use the `hgweb.cgi` CGI script. This is a simply way to quickly publish a single repository.
 * Use the `hgwebdir.cgi` CGI script. This lets you publish multiple repositories easily, but initial setup can be a bit of work.
 * Make the plain repository available. This uses a much slower, less reliable protocol, called `old-http`. We won't cover it here.
 * Use the {{{hg serve}}} command. This is single threaded. Not recommended except for temporary situations.

== Publishing a single repository ==

The `hgweb.cgi` CGI script is simple to use. You will find it in the root of your Mercurial tree. Copy it to a directory that your web server will handle CGI scripts in, rename it to `index.cgi` if you want, then edit its contents, and you're done.

While you could use this mechanism to publish multiple repositories, it requires a little work to configure each copy of the script to have slightly different paths.

== Publishing multiple repositories ==

The `hgwebdir.cgi` CGI script takes some work to initially set up, but once it's working, it lets you publish new repositories easily and cheaply. Its advantage is that to publish a repository, you simply place a clone in a particular directory, then add one line to a config file to tell the CGI script that it is allowed to publish that repository.

I will describe the setup that BryanOSullivan (me) and ThomasAH use. To mimic our configurations, you will need the following:

 * Control over the web server you use.
 * (Optional) control over the DNS domain you use.

=== Is virtual hosting necessary? ===

Using virtual hosting is entirely optional, and not worth it in the majority of cases. It simply makes URLs a little tidier.

For example, I can serve repositories at http://hg.serpentine.com/mercurial/hg instead of http://www.serpentine.com/hg/hgwebdir.cgi/mercurial/hg.

To do this, I simply have {{{hg.serpentine.com}}} CNAMEd to my web server.

=== Setting up the CGI script ===

Choose a directory you want to publish from. On my systems, I use {{{/home/bos/hg/share}}}, which you will see below.

Copy `hgwebdir.cgi` in there. Read and edit it, then create a file called `hgweb.config`.

=== Setting up the hgweb.config file ===

Here are the contents of my `hgweb.config` file:

{{{
[paths]
mercurial/bos = mercurial/bos
mercurial/hg = mercurial/hg
mercurial/crew = mercurial/crew
mercurial/tah = mercurial/tah
}}}

The duplication above looks a little silly, but it's telling the CGI script which repositories it is allowed to publish.

=== Configuring Apache ===

Here's the Apache config I use. Description below.

{{{
<VirtualHost *:80>
  ServerName hg.serpentine.com

  ServerAdmin webmaster@serpentine.com
  CustomLog logs/access_log.serpentine combined
  ErrorLog logs/error_log.serpentine

  RewriteEngine on
  RewriteRule (.*) /home/bos/hg/share/hgwebdir.cgi$1

  <Directory "/home/bos/hg/share/">
    Order allow,deny
    Allow from all
    AllowOverride All
    Options ExecCGI
    AddHandler cgi-script .cgi
  </Directory>
</VirtualHost>
}}}

The {{{ServerName}}} directive matches the hostname I configured earlier.

The next section is just administrative cruft.

The rewrite-related directives tell Apache to turn URIs like {{{/mercurial/hg}}} into {{{/home/bos/hg/share/hgwebdir.cgi/mercurial/hg}}}. This causes Apache to fire up the CGI script, giving it the remainder of the URI as an argument.

Finally, the {{{Directory}}} section lets Apache know that we have a CGI script to look at.
Hello. Let me start the author. His name is Abram and he ultimately digs that brand. One of specific very best it in the sphere for him will be golf and so santa would never give away it up. His job is a fx broker but soon your man's wife and him will start their own business. For years he's were living in Delaware and he is in love with every day live there. Check out his website here: [[http://www.ulsmedia.com/|new era snapbacks]]<<BR>>
from:<<BR>>
[[http://www.kontessaban.com/modules.php?name=Your_Account&op=userinfo&username=ShaylaHad|http://www.realkobe.com/parfaitamour/bbs/aska.cgi]]<<BR>>
<<BR>>
[[http://www.lacefront-wig.com/index.php/member/153449/|http://kankim.net/index.php?do=/profile-20501/info/]]

Hello. Let me start the author. His name is Abram and he ultimately digs that brand. One of specific very best it in the sphere for him will be golf and so santa would never give away it up. His job is a fx broker but soon your man's wife and him will start their own business. For years he's were living in Delaware and he is in love with every day live there. Check out his website here: new era snapbacks
from:
http://www.realkobe.com/parfaitamour/bbs/aska.cgi

http://kankim.net/index.php?do=/profile-20501/info/

PublishingRepositories (last edited 2020-12-06 23:19:24 by PaulBoddie)