我一直在寻找关于如何让 hgweb 在 IIS 上工作的体面说明,但我没有发现太多的价值。
Mercurial wiki上有这个“一步一步”,但不是很好。还有this和this,但同样,我找不到好的步骤来引导那些开始的地方。
昨天我只需要安装一个新的 Mercurial 实例,这里是 1.7 的更新说明:
hg clone https://www.mercurial-scm.org/repo/hg/
创建一个文件夹作为您的 Web 应用程序文件夹。您需要将三件事复制到此文件夹中:
您需要确保在 IIS 中设置了 Python。
您还需要创建一个名为“hgweb.config”的文件,其内容类似于下面。文件中的路径必须是驱动器上要存储 Mercurial 存储库的位置:
[集合]
c:\Mercurial\repos = c:\Mercurial\repos
编辑 hgweb.cgi 文件并将设置 hgweb.config 路径的行更改为如下所示(无论 hgweb.config 文件在哪里):
配置 = "C:\Mercurial\hgweb.config"
另外,请查看Jeremy Skinners 博客文章。它有点过时,但有一些额外的好步骤,比如为更干净的 URL 设置 URL 重写。
似乎自从 Mercurial 1.5.2 发布以来,这些教程并不完全正确。一方面,hgwebdir.cgi 已被删除,现在替换为 hgweb.cgi。
最适合我的说明位于eworldui.net:
这些说明适用于 IIS 7 或更高版本。如果您在 IIS 6 上进行设置,我编写了针对 Win2k3 和 IIS 6.0 的类似说明:
http://partialclass.blogspot.com/2010/05/setting-up-mercurial-server-on-win2k3.html
更新: 在完成这项工作后不久,我了解到 BitBucket 更改了他们的定价方案以提供免费、无限制的私人托管:https ://bitbucket.org/ 。当我最初从事这个项目时,我会立即选择它。
我发现Vampire Basic上的博客文章是一个好的开始,但它并没有详细说明我所追求的。
我写了一篇由 4 部分组成的博客文章,让你从头开始使用 IIS,包括 Active Directory 集成、设置推/拉的安全权限、自定义模板,我会在这里复制它,但它相当长篇大论,Mercurial 真的被设计为托管在 Linux/Apache 上:
http://www.endswithsaurus.com/2010/05/setting-up-and-configuring-mercurial-in.html
这里有一个相当不错和全面的教程:http: //vampirebasic.blogspot.com/2009/06/running-mercurial-on-windows.html
以下是我在进行大量研究以在 IIS6 上设置 hgwebdir.cgi 后所做的工作。它基于以下站点:
您需要在服务器上安装以下内容:
我的步骤是:
现在是测试 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
您应该看到“它有效!” 在浏览器中。
接下来让我们让 hgwebdir 工作。
https://www.mercurial-scm.org/repo/hg/
application = hgwebdir('hgweb.config') wsgicgi.launch(application)
至
application = hgwebdir('c:\inetpub\wwwroot\hg\hgweb.config') wsgicgi.launch(application)
现在是测试它的好时机。在浏览器中访问以下 URL,http://localhost/hg/hgwebdir.cgi
[collections] \\server\share$\Hg\ = \\server\share$\Hg\ [web] allow_push = * push_ssl = false
这些都是我的偏好,例如我们在 \\server\share$\Hg 的子目录中有我们的存储库。Web 应用程序将通过浏览器在登录用户的权限下运行,因此他们需要对共享的读/写权限。
最后一步是允许长连接,这在您第一次克隆存储库时可能发生。运行以下命令将超时时间增加到 50 分钟:
cd \inetpub\AdminScripts\
cscript adsutil.vbs GET /W3SVC/CGITimeout
cscript adsutil.vbs SET /W3SVC/CGITimeout 3000
使用 mercurial 克隆 mercurial 存储库:
hg clone https://www.mercurial-scm.org/repo/hg/
您会在顶层找到 hgwebdir.cgi。它应该像任何其他 cgi 脚本一样安装。
在过去一周左右的时间里,我一直在为 mercurial 1.7.2 设置这个设置,为了让它工作,我不得不做一些与上述文章不同的事情。
在这里发帖是因为谷歌一直把我带回这里....
此处发布的完整说明
我遵循了这些说明和这些说明的组合(在源代码中)
主要区别在于我必须执行mercurial 的“纯 python”安装,否则它会抱怨缺少 dll,我发现对 pywin 和 isapi-wsgi 使用“python 安装程序”很重要。(也许这对有经验的 python 开发人员来说是显而易见的,但我是 python 新手,所以这对我来说是个新闻)
希望这对某人有所帮助,而且我不仅仅是在编造东西(我可能是,就像我说的,python 新手)
hg 红皮书包含一些比我在其他地方看到的更好的一般说明。它们不是特定于 IIS 的,但它们非常好:
http://hgbook.red-bean.com/read/collaborating-with-other-people.html#sec:collab:cgi
我遇到了“...无法加载模块...”类型错误,经过一番阅读,我的关键是忽略 Mercurial 文件夹中的 Library.zip 文件,而是使用 C:\程序文件 (x86)\TortoiseHg 文件夹。
我在本指南中找到的 #6 提示:
http://www.endswithsaurus.com/2010/05/setting-up-and-configuring-mercurial-in.html
希望这可以帮助某人...
我知道这是一个老问题,但我真的很难在 Server 2019 和 IIS 10 上安装 Hg。这是我为使其正常工作所做的工作:
安装Python 2.7,在我的例子中是python-2.7.18.amd64.msi。我假设它安装在 C:\Python27 中。确保将 python 添加到您的路径并安装了 pip。
在命令行使用 pip 将 Mercurial 作为模块安装:
pip install mercurial
在默认网站下添加一个名为“hg”的新应用程序并将其指向您要使用的目录。
将 Python 配置为 IIS 10.0 中的 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 "%s"" resourceType="File" />
</handlers>
</system.webServer>
#!/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)
[collections]
C:\Web\www\hg\repos\ = C:\Web\www\hg\repos\
你可以试试HgLab。这不完全是 hgwebdir;相反,它是一个纯托管的 Mercurial 实现,带有推拉服务器和存储库浏览器。