我们目前正在使用VSS进行版本控制.我们的开发人员中很少有人对分布式模型感兴趣(并希望摆脱VSS).我们的网络充满了Windows机器,而我们的IT部门拥有维护Linux机器的经验,他们不愿意这样做.
什么DVCS系统可以在Windows上托管其中央存储库,同时提供..
推送对存储库的访问权限.
基本认证.通常只是一种允许或拒绝访问整个存储库的方法.无需细粒度访问.
服务器进程使用户不需要对存储库进行写权,从而降低了意外搞乱的风险.
在客户端,像Tortoise这样的GUI或多或少都是一个要求(抱歉,Windows shell很糟糕.:|).易于安装将是一个巨大的优势,因为我们的IT部门已经非常低的资源.只要客户端能够存储凭据,使用Windows凭据进行身份验证将是一个优势,但不是必需的.
我有一个(真的)快速看看Git,Mercurial和Bazaar.
Git似乎使用ssh或简单的WebDAV进行存储库访问,需要用户的写权限.
Mercurial有一个内置的http服务器,但这似乎只是为了拉动目的.更新: Mercurial也支持推送.
Bazaar似乎使用sftp进行存储库访问,同样需要用户的写入权限.
是否有任何DVCS系统的Windows服务器进程,谁有人设法在Windows的土地上设置一个?
如果这是一个重复的问题,请道歉.我找不到一个.
更新
Mercurial为推动目的而工作!详细列表所需的内容可以在下面找到答案.
Mercurial几乎可以肯定是Windows上最简单的选择.
如果你不关心身份验证,你实际上可以轻松地允许hg serve
推送.为此,您只需将以下内容添加到.hg/hgrc
要提供的存储库中的文件中:
[web] allow_push = * push_ssl = false
第一行说任何人都可以推送到这个存储库.第二个告诉Mercurial允许在没有SSL的情况下推送,因为hg serve
目前本身不支持HTTPS.此时,用户无需在任何地方拥有帐户即可推送到您的存储库.如果你只是一个小商店,这可能很好 - 特别是因为你可以使用Mercurial签署变更集的能力,以保证比HTTP Basic提供的更高级别的可验证性,无论如何.
然而,对于一个更大的商店来说,你至少想要一个简单的承诺障碍是完全正确的.为此,您需要进行两项更改.首先,您需要将Mercurial置于具有反向代理支持或CGI支持的Web服务器之后.值得庆幸的是,最新版本的IIS支持这两种版本 您可以参考Mercurial Redbook中针对Mercurial特定步骤的CGI指导,以及Microsoft在IIS 6中设置CGI应用程序以获取IIS方面帮助的指南.
接下来,您需要设置一些基本身份验证.IIS提供了开箱即用的HTTP Basic,作为奖励,它可以直接针对您的域进行身份验证,从而将管理开销降至最低.
最后,您需要allow_push
通过指定以逗号分隔的用户名列表来更改该行以仅支持特定用户.例如:
allow_push = benjamin, ted, the_cow
而已.Mercurial现在允许来自可以通过HTTP Basic身份验证进行身份验证的用户进行推送,并允许来自其他所有人.
在Benjamin指出HTTP服务CGI脚本之后,我决定尝试这些并设法获得通过HTTP托管的存储库.Benjamin链接的红皮书和Mercurial wiki的两篇文章有很大的帮助.一般描述Mercurial发布,另一个包含设置HgWebDir CGI脚本的分步说明.
这些说明并非完全万无一失,所以我不得不捅一下.最有可能的是,我正在运行64位Vista.下面的说明记录了我的所作所为.既然我已经完成了一次,我可能会按照其他顺序做事,所以不要考虑这些一步一步的说明.
水银
首先,我从http://mercurial.berkwood.com/获得了安装的Mercurial二进制文件d:\dev\Mercurial
.我创建了一个存储库,用于在d:\dev\testRepo
存储库下使用hg init
.该d:\dev\Mercurial\library.zip
包含由CGI脚本所需的Mercurial库文件,以便他们提取到d:\dev\Mercurial\library
.最让我困惑的是,当我打开zip文件时,我收到了一条错误消息,没有看到任何内容.只是将文件解压缩到一个目录.
对于Web脚本,我下载了Mercurial 源代码,其中包含已移动并重命名为的hgwebdir.cgi d:\dev\Mercurial\webroot\hgwebdir.py
.一步一步的文章包含有关修改Windows的hgwebdir脚本的良好说明.它们还包含hgweb.config的说明,在我的情况下最终看起来像这样:
[paths] /hg/hgwebdir.py/test = D:\dev\Mercurial\testRepo
此外,存储库需要以下配置,因此我可以在没有SSL的情况下推送.注意我正在使用基本身份验证来验证用户当前.我必须创建配置D:\dev\Mercurial\testRepo\.hg\hgrc
并添加以下行:
[web] allow_push = * push_ssl = false
蟒蛇
CGI脚本是一个Python脚本,因此它需要Python.Python版本执行它似乎很挑剔.其中一篇文章提到运行它需要用于构建Mercurial的相同版本.最后,我尝试使用Python 2.6 x64,Python 2.4,Python 2.5 x64后,使用Python 2.5 x86.
IIS
我错过并且必须安装的两件事是CGI支持和基本身份验证.这两个都是通过控制面板,程序和功能安装的.完成安装后,我在IIS中创建了一个虚拟目录(我后来改为应用程序)D:\dev\Mercurial\webroot
.虚拟目录需要一个可以从Handler Mappings添加的*.py文件的CGI处理程序.可执行文件是D:\dev\SDKs\Python25_x86\Python.exe %s
.一旦IIS拥有webroot目录的权限,我就可以导航到http://localhost/hg/hgwebdir.py/test并查看存储库.
所以现在读访问工作正常.当我尝试推送到存储库时,我收到了奇怪的错误消息,告诉我它不是真正的存储库.
经过一个小时的调试后,我最终D:\dev\Mercurial\library\mercurial
在webroot下复制整个树,以便Python可以找到D:\dev\Mercurial\webroot\mercurial\hgweb\hgwebdir_mod.pyc
.在此Wireshark报告堆栈跟踪中的访问被拒绝错误之后.不知道真正的原因是什么,但是将虚拟目录更改为IIS中的应用程序并将其移动到使用本地系统帐户运行的应用程序池之上,拒绝访问的错误消失了.
此外,在某些时候,我给了HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters
注册表项更多权限,因此IIS可以访问它.怀疑在使用本地系统帐户后需要这些.
一旦这些完成,使用hg push http://localhost/hg/hgwebdir.cgi/test
工作将东西推送到存储库!
问题和解决方案
在哪里可以找到库文件.
它们位于Mercurial安装文件夹下的library.dll中.即使我的解压缩程序拒绝查看其内容,我也必须提取它们.
如何让Python脚本运行
下载适用于x86体系结构的正确Python版本,因为该脚本使用了一些x86库.正确的Python版本取决于Mercurial版本.对于1.2.1,它是Python 2.5 x86.
或者你可以尝试从你想要的任何Python版本的源代码构建Mercurial,但在我的情况下,这在构建扩展时失败了.
如何在IIS中设置CGI
首先确保在IIS中安装了CGI.在本杰明发布的IIS指令中,这并不是真的.
在IIS处理程序映射中为*.py创建新的模块映射.正确的模块是CgiModule
,可执行文件是您的Python可执行文件+%s
如何允许CGI脚本写入存储库
确保脚本具有所需的一切.我不得不搬到library\mercurial\hgweb\hgwebdir_mod.pyc
另一个地方.
确保脚本具有所需的任何位置的权限.我通过为使用本地系统帐户的CGI脚本创建新的应用程序池,将虚拟目录转换为IIS中的应用程序并选择新的应用程序池来解决此问题.
在阅读了几乎对我有用的Mikko的答案后,我想出了自己的安装说明.我的设置被设计为一个"非保护和开放"的存储库,我的团队成员可以使用它安装在Windows 2008 Server上.
1.安装Python.
我使用的Python版本是Python 2.6.2,我使用的是Windows x86 MSI安装程序.
为所有用户安装.
安装到C:\ Mercurial\Python
使用默认功能选项.
2.安装MinGW.
我使用的Minimalist GNU for Windows版本是MinGW 5.1.4
安装MinGW-5.1.4.exe.
选择下载和安装选项.
选择要安装的当前包选项.
对于要安装的组件选择"最小"选项.
安装到C:\ Mercurial\MinGW
3.修改您的路径.
此时,您需要在环境路径中添加位置.
将' C:\ Mercurial\Python26; C:\ Mercurial\MinGW\bin '添加到路径(Order Matters.)
4.安装Mercurial.
我使用的mercurial版本是stable分支中的最新版本,我没有使用二进制文件,但使用了源代码.我想自己编译mercurial,以便它可以与我安装的任何版本的Python一起工作,所以我不必担心任何兼容性问题,我发现这是其他安装方法的最大挑战.获取源代码的简单方法是下载"zip"文件. Mercurial Stable Release
将Zip文件解压缩到C:\ Mercurial\Source.
在命令提示符下构建Source.
python setup.py build --force -c mingw32 python setup.py install --force --skip-build
5.修改你的路径.
您需要在环境路径中插入"hg"命令的另一个位置.
将' C:\ Mercurial\Python26\Scripts; C:\ Mercurial\Python26; C:\ Mercurial\MinGW\bin '添加到路径中(Order Matters.)
6.创建配置文件.
如果要在此服务器上进行本地提交,则需要设置默认用户名.
创建文件' "C:\ Documents and Settings {username} .hgrc" '
[ui] editor = Notepad username = your_name
6.测试您的安装.
打开一个新的命令窗口并使用' hg debuginstall '进行测试以进行验证.您应该看到类似以下的内容.
Checking encoding (cp1252)... Checking extensions... Checking templates... Checking patch... Checking commit editor... Checking username... No problems detected
7.设置Web目录.
创建目录' C:\ Mercurial\Web '
将hgwebdir.cgi文件从' C:\ Mercurial\Source ' 复制到' C:\ Mercurial\Web '
8.为集中存储库配置IIS7.
我使用的是DefaultAppPool,它使用.Net 2.0,Pipeline = Integrated,Identity = ApplicationPoolIdentity.
确保IIS7中提供了CGI功能.
控制面板/程序/ Windows功能/ IIS /应用程序开发功能/ CGI
将应用程序添加到您希望的网站上的IIS中.
Alias = Mercurial - 物理路径= C:\ Mercurial\Web
在App上选择HTTP模块并添加新的模块映射.
Request Path =*.cgi,Module = CgiModule,Executable = C:\ Mercurial\Python26\python.exe%s,Name = Mercurial.
当提示将条目添加到ISAPI和CGI限制列表时,请说"是".
9.测试Web设置.
您现在应该可以浏览http://localhost/Mercurial/hgwebdir.cgi并查看并清空存储库列表.
10.为友好URL配置IIS7
我不喜欢拥有不友好的URL,这一步允许我们将URL重新映射到更友好的地方.为IIS 安装URL Rewrite Moduel 1.1 Extension.
在IIS管理器中的Mercurial IIS应用程序中查看选择URL重写组件并安装新规则.
选择添加规则,然后选择带有重写映射的模板'规则.规则操作=重写,指定重写映射= Mercurial
添加映射条目.OriginalValue ='/ Mercurial/Repo',New Value ='/ Mercurial/hgwebdir.cgi'
11.创建Mercurial存储库
您现在可以创建一个测试存储库.
创建目录C:\ Mercurial\Repository并确保IUSR帐户具有写入目录的权限.(如果在域帐户上更像是IUSR_ {ComputerName}.
创建文件C:\ Mercurial\Web\hgweb.config以列出存储库.
[paths] / = C:\Mercurial\Repository\**
添加目录C:\ Mercurial\Repository\Test并使用'hg init'初始化存储库
**如果你现在想要能够在没有ssl的情况下在存储库的.hg目录中创建一个hgrc文件以下行.
[web] allow_push = * push_ssl = false
参考文献:
Mercurial Wiki Windows安装
HG Book
逐步
发布Mercurial存储库