如何在 IIS 上设置 Mercurial 和 hgweb?

我一直在到处找关于如何让 hgweb 在 IIS 上工作的合适说明,但是我没有找到太多有价值的东西。

Mercurial 维基上有 这个“一步一步”,但不是很好。 还有 这个这个,但是再一次,我找不到好的步骤来引导它们从哪里开始。

21621 次浏览

使用汞克隆汞存储库:

hg clone https://www.mercurial-scm.org/repo/hg/

你会在顶层找到 hgwebdir.cgi 就像其他 CGI 脚本一样。

我昨天刚刚安装了一个新的 Mercurial 实例,下面是1.7版本的更新说明:

  1. 安装 Mercurial (使用1.7测试了这些说明)
  2. 安装 Python (对于 Mercurial 1.7,必须使用 Python 2.6.6的 x86版本)
  3. 您需要从 Mercurial 源代码下载 hgweb.cgi 文件。可以通过运行 hg clone https://www.mercurial-scm.org/repo/hg/下载源代码
  4. 创建一个文件夹,该文件夹将成为您的 Web 应用程序文件夹。你需要复制三样东西到这个文件夹:

    • Cgi 文件
    • 来自“ C: Program Files Mercurial”文件夹的 Library.zip 的内容
    • “ C: Program Files Mercurial”中的模板文件夹
  5. 您需要确保在 IIS 中设置了 Python。

    • 通过以下方式启用 CGI: 控制面板-> 打开或关闭 Windows 功能-> 角色-> Web 服务器(IIS)-> 添加角色服务-> 检查 CGI
    • 在 IIS 中创建一个新网站,并确保物理路径是您在上面创建的文件夹
    • 在新网站的处理程序映射中,选择“添加脚本映射”。在请求路径中输入 * . cgi,在可执行文件中输入 C: Python 26 python.exe-u“% s”,在 Name 中输入 巨蟒
  6. 您还需要创建一个名为“ hgweb.config”的文件,其内容与下面类似。文件中的路径需要是驱动器上要存储 Mercurial 存储库的位置:

    [收集]
    C: Hg 回购协议 = c: Hg 回购协议

  7. 编辑 hgweb.cgi 文件,将 hgweb.config 的路径设置为如下所示(不管 hgweb.config 文件在哪里) :

    Config = “ C: Mercurial hgweb.config”

  8. 现在,打开浏览器并导航到 http://localhost/mercurial/hgweb.cgi(或者在 IIS 中设置的适当 URL 路径) ,您应该会看到 Mercurial Repositories 页面。

还有,看看 Jeremy Skinners 的博客文章。它有点过时,但有一些额外的好步骤,如设置网址重写更干净的网址的。

这本红皮书包含了一些比我在其他地方看到的更好的一般性说明。它们不是 IIS 特有的,但相当不错:

Http://hgbook.red-bean.com/read/collaborating-with-other-people.html#sec:collab:cgi

下面是我在 IIS6上设置 hgwebdir.cgi 之后所做的一些研究。它基于以下网站:

您需要在服务器上安装以下软件:

  • Mercurial (我使用的是版本1.5)
  • Python 2.6. Python 的版本取决于所安装的 Mercurial 的版本。 Mercurial 1.5使用 Python 2.6。

我的步骤是:

  • 为网站创建一个目录。我使用 c: inetpub wwwroot hg。
  • 在 IIS 中,右键单击 hg 的文件夹,选择 properties,选择 Home Directory 选项卡。
  • 点击创建应用程序按钮。将执行权限设置为“脚本”。
  • 仍然在“主目录”选项卡中,单击“配置”按钮。在“ ApplicationConfiguration”弹出窗口中,单击 Add 按钮添加应用程序扩展。可执行文件是 c: Python 26 python.exe-u“% s”“% s”。分机号是。CGI.将“动词”设置为“ limit to: GET,HEAD,POST”。检查脚本引擎并验证该文件是否存在。
  • 在“目录安全”选项卡中,单击“身份验证和访问控制”部分中的“编辑”按钮。取消选中所有身份验证方法,并选中“基本身份验证”方法。如果愿意,可以将默认域设置为 ActiveDirectory 域。
  • 在 IIS 中,单击左面板上的 Web 服务扩展文件夹。点击“添加新的 Web 服务扩展”链接。扩展名应该是 Python,所需的文件是 c: Python26 Python.exe-u“% s”“% s”。确保新的分机是“允许”的。

现在是测试 Python 是否工作的好时机。在新的 Hg 文件夹中创建一个名为 test.cgi 的文件。粘贴以下 Python 代码:

print 'Status: 200 OK'
print 'Content-type: text/html'
print


print '<html><head>'
print ''
print '<h1>It works!</h1>'
print ''
print ''

打开网站的浏览器,例如 http://localhost/hg/test.cgi

您应该在浏览器中看到“ It works!”。

接下来让我们让 hgwebdir 工作。

  • 删除 test.cgi
  • 将 hg repo 克隆到一个新目录: https://www.mercurial-scm.org/repo/hg/
  • 将 hgwebdir.cgi 复制到您的 Web 目录: c: inetpub wwwroot hg 从克隆的 hg repo
  • 编辑文件并修改
application = hgwebdir('hgweb.config')
wsgicgi.launch(application)

application = hgwebdir('c:\inetpub\wwwroot\hg\hgweb.config')
wsgicgi.launch(application)
  • 将 Mercurial 目录 c: Program Files Mercurial 中的 Library.zip 文件解压缩到您的 web 目录 c: inetpub wwwroot hg
  • 将模板目录从 c: Program Files Mercurial 模板复制到 c: inetpub wwwroot hg 模板
  • 在 web 目录中创建一个名为 hgweb.config 的文件。

现在是测试它的好时机

  • 编辑 hgweb.config,并粘贴以下内容:
[collections]
\\server\share$\Hg\ = \\server\share$\Hg\
[web]
allow_push = *
push_ssl = false

这些都是我的首选项,例如,我们在服务器共享 $Hg 的子目录中有我们的回购协议。Web 应用程序将在登录用户通过浏览器的权限下运行,所以他们需要共享的读/写权限。

最后一步是允许长连接,这可能发生在您第一次克隆一个回购。运行以下命令将超时时间增加到50分钟:

cd \inetpub\AdminScripts\
cscript adsutil.vbs GET /W3SVC/CGITimeout
cscript adsutil.vbs SET /W3SVC/CGITimeout 3000

似乎自从 Mercurial 1.5.2发布以来,这些教程并没有完全正确地工作。首先,hgwebdir.cgi 已被删除,现在被 hgweb.cgi 替换。

对我来说最有效的指令是 Eworlddui.net:

Http://www.eworldui.net/blog/post/2010/04/08/setting-up-mercurial-server-in-iis7-using-a-isapi-module.aspx

这些指令是针对 IIS7或更高版本的。如果你在 IIS6上设置这个,我写了一些针对 Win2k3和 IIS6.0的类似指令:

Http://partialclass.blogspot.com/2010/05/setting-up-mercurial-server-on-win2k3.html

更新: 在得到这个工作后不久,我了解到 BitBucket 改变了他们的定价方案,提供免费的,无限制的,私人主机: https://bitbucket.org/。当我最初做这个项目的时候,我会毫不犹豫地选择这个。

在过去的一周左右,我一直在为 Mercurial 1.7.2的设置而奋斗,为了让它运行起来,我不得不做一些与上面的文章略有不同的事情。

在这里发帖是因为谷歌一直把我带回这里。

完整指示 张贴在这里

我跟踪了 这些指示这些(在源头)的组合

主要的不同之处在于我必须使用 Mercurial 的“纯 Python”安装,否则它会抱怨丢失 dll,我发现对 pywin 和 isapi-wsgi 使用“ python 安装程序”很重要。(也许这对于有经验的 Python 开发人员来说是显而易见的,但是我是一个 Python 新手,所以对我来说是新闻)

希望这对某些人有所帮助,我不是在胡编乱造(就像我说的,我可能是个蟒蛇新手)

我遇到了一个“ ... ... 无法加载模块... ...”的输入错误,在一些阅读之后,我的关键是忽略 Mercurial 文件夹中的 Library.zip 文件,而是使用 C: Program Files (x86) TortoiseHg 文件夹中的文件。

我在这篇指南中找到了第6条建议:

Http://www.endswithsaurus.com/2010/05/setting-up-and-configuring-mercurial-in.html

希望这能帮到别人。

你可以试试 汞实验室。这并不完全是 hgwebdir,而是一个纯粹管理的 Mercurial 实现,带有 push 和 pull 服务器和存储库浏览器。

我知道这是一个老问题,但是我真的很难在 Server2019和 IIS10上安装 Hg。

我是这么做的:

  1. 安装 Python 2.7,在我的情况下是 python-2.7.18.amd64.msi。我假设它是安装在 C: Python 27中的。确保将 python 添加到您的路径并安装了 pip。

  2. 在命令行使用 pip 将 Mercurial 安装为模块:

    pip install mercurial
    
  3. 默认网站下添加一个名为 hg的新应用程序,并将其指向要使用的目录。

  4. 在 IIS 10.0中将 Python 配置为这个新网站的 CGI 处理程序(如果愿意,也可以配置整个 Web 服务器)。您可以手动执行此操作,或者在 web.config文件中创建/添加以下内容:

    <system.webServer>
    <handlers accessPolicy="Read, Script">
    <add name="Python 2.7" path="*.cgi" verb="*" modules="CgiModule" scriptProcessor="C:\Python27\python.exe -u &quot;%s&quot;" resourceType="File" />
    </handlers>
    </system.webServer>
    
  5. 在“ hg”应用程序文件夹中创建一个类似于下面的 hgweb.cgi:

    #!/usr/bin/env python3
    #
    # An example hgweb CGI script, edit as necessary
    # See also https://mercurial-scm.org/wiki/PublishingRepositories
    
    
    # Path to repo or hgweb config to serve (see 'hg help hgweb')
    config = "hgweb.config"
    
    
    # Uncomment and adjust if Mercurial is not installed system-wide
    # (consult "installed modules" path from 'hg debuginstall'):
    # import sys; sys.path.insert(0, "/path/to/python/lib")
    
    
    # Uncomment to send python tracebacks to the browser if an error occurs:
    #import cgitb; cgitb.enable()
    
    
    from mercurial import demandimport
    
    
    demandimport.enable()
    from mercurial.hgweb import hgweb, wsgicgi
    
    
    application = hgweb(config)
    wsgicgi.launch(application)
    
  6. 在“ hg”应用程序文件夹中创建 hgweb.config文件,并将其指向您的回购协议,如下所示:

    [collections]
    C:\Web\www\hg\repos\ = C:\Web\www\hg\repos\
    
  7. 导航到 http://localhost/hg/hgweb.cgi,并享受!