带有Windows中央存储库的DVCS

我们目前正在使用VSS进行版本控制。 我们很less有开发人员对分布式模型感兴趣(并想摆脱VSS)。 我们的networking充满了Windows机器,虽然我们的IT部门有维护Linux机器的经验,但是他们不希望这样做。

什么DVCS系统可以托pipe他们的中央库在Windows上,同时提供..

  1. 将访问权限推送到存储库。
  2. 基本authentication。 大多数情况下只是一种方法来允许或拒绝访问整个存储库。 不需要细粒度访问。
  3. 服务器进程,因此用户不需要对存储库进行写入操作,从而降低了意外混淆的风险。

在客户端,像Tortoise这样的graphics用户界面可能会成为一个需求(对不起,Windows shell很糟糕:|)。 由于我们的IT部门的资源已经相当的不足了,所以安装简便。 只要客户端能够存储凭据,使用Windows凭据进行身份validation将是一个优势,但不是一个要求。

我有一个(真的)快看Git,Mercurial和Bazaar。

  • Git似乎使用ssh或简单的WebDAV进行存储库访问,需要用户的写入权限。
  • Mercurial有一个内置的http服务器,但这似乎只是为了拉目的。 更新: Mercurial也支持推送。
  • Bazaar似乎使用sftp进行存储库访问,同样需要用户的写入权限。

是否有任何DVCS系统的Windows服务器进程,并有人设法在Windows的土地?

如果这是一个重复的问题,并表示歉意。 我找不到一个。

更新

得到了Mercurial为推挤目的工作! 详细的清单所需的东西可以在下面find答案。

几乎可以肯定,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红皮书中针对Mercurial特定步骤的CGI指导 ,以及Microsoft在IIS 6中设置CGI应用程序的指导,以获得IIS方面的帮助。

接下来,你需要设置一些基本的认证。 IIS提供了即开即用的HTTP Basic,作为奖励,它可以直接对您的域进行身份验证,从而将管理开销降至最低。

最后,您需要通过指定逗号分隔的用户名列表来将allow_push行更改为仅支持特定的用户。 例如:

 allow_push = benjamin, ted, the_cow 

而已。 Mercurial现在允许来自可以通过HTTP基本认证进行认证的用户进行推送,并允许其他人进行推送。

在Benjamin指出HTTP服务CGI脚本之后,我决定试试这些脚本,并设法通过HTTP托管一个存储库。 Benjamin链接的红皮书和两篇Mercurial wiki文章都有很大的帮助。 一个描述一般的Mercurial发布 ,另一个包含一步一步的设置HgWebDir CGI脚本的说明。

这些说明并不完全是万无一失的,所以我不得不捅了一下。 最有可能的是我运行64位Vista。 以下说明记录了我所做的事情。 现在,我已经做了一次,我可能会以另一种顺序做的事情,所以不要考虑这些一步一步的指示。

水银

首先,我从http://mercurial.berkwood.com/获取Mercurial二进制文件,该文件已安装到d:\dev\Mercurial 。 我使用hg initd:\dev\testRepo存储库下创建了一个测试存储库。 d:\dev\Mercurial\library.zip包含CGI脚本所需的Mercurial库文件,所以它们被提取到d:\dev\Mercurial\library 。 起初让我感到困惑的是,当我打开zip文件时,收到一条错误消息,但没有看到任何内容。 只是提取文件到一个目录工作。

对于web脚本,我下载了包含hgwebdir.cgi的Mercurial 源代码 ,它被移动并重命名为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并查看存储库。

所以现在读访问正在工作。 当我尝试推送到存储库时,收到奇怪的错误消息,告诉我这不是真正的存储库。

经过一个小时的调试,我最终在webroot下拷贝了整个D:\dev\Mercurial\library\mercurial tree,这样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东西到存储库hg push http://localhost/hg/hgwebdir.cgi/test正在工作!

问题和解决方案

  • 在哪里可以找到库文件。
    • 他们在Mercurial安装文件夹下的library.dll中。 即使我的解压缩程序拒绝查看它的内容,我也只能提取它们。
  • 如何让Python脚本运行
    • 下载正确的Python版本的x86架构,因为脚本使用了一些x86库。 正确的Python版本取决于Mercurial版本。 对于1.2.1,它是Python 2.5 x86。
    • 另外,你也可以尝试从你想要的任何Python版本的源代码构建Mercurial,但是在我的情况下,当构建扩展时失败了。
  • 如何在IIS中设置CGI
    • 首先确保CGI安装在IIS中。 Benjamin在IIS的说明中并没有假设这是真实的。
    • 在IIS处理程序映射中为* .py创建一个新的模块映射。 正确的模块是Cgimodulee ,可执行文件是你的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”文件。 水银稳定释放

  • 将Zip文件解压到C:\ Mercurial \ 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 {用户名} .hgrc” '
  [UI]  
编辑=记事本  
用户名= your_name 

6.测试你的安装。

打开一个新的命令窗口并用' hg debuginstall '进行测试来验证。 你应该看到像下面这样的东西。

正在检查编码(cp1252)...  
检查扩展名...  
检查模板...  
检查补丁...  
检查提交编辑器...  
检查用户名...  
没有发现问题  

7.安装Web目录。

  • 创建目录' C:\ Mercurial \ Web '
  • 将hgwebdir.cgi文件从“ C:\ Mercurial \ Source ”复制到“ C:\ Mercurial \ Web

8.为集中存储库配置IIS7。

我使用的是使用.Net 2.0,Pipeline = Integrated,Identity = ApplicationPoolIdentity的DefaultAppPool。

  • 确保CGI功能在IIS7中可用。
  • 控制面板/程序/ Windows功能/ IIS /应用程序开发功能/ CGI
  • 将应用程序添加到您希望的网站上的IIS。
  • 别名= Mercurial – 物理路径= C:\ Mercurial \ Web
  • 在应用程序中选择HTTP模块并添加一个新的模块映射。
    • 请求路径= * .cgi,modulee = Cgimodulee,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重写模块1.1扩展。

  • 在IIS管理器中的Mercurial IIS应用程序中查看选择URL重写组件并安装新的规则。
  • 选择“添加规则”,然后选择“带重写图的规则”。 规则操作=重写,指定重写映射= Mercurial
  • 添加一个映射条目。 OriginalValue ='/ Mercurial / Repo',新值='/ Mercurial / hgwebdir.cgi'

11.创建Mercurial存储库

您现在可以创建一个测试存储库。

  • 创建目录C:\ Mercurial \ Repository,并确保IUSR帐户有权写入目录。 (如果在域帐户更像IUSR_ {ComputerName}。
  • 创建文件C:\ Mercurial \ Web \ hgweb.config列出存储库。
  [路径]
 / = C:\ Mercurial \ Repository \ ** 
  • 添加一个目录C:\ Mercurial \ Repository \ Test并用'hg init'初始化存储库

**如果现在希望能够在存储库的.hg目录下无ssl地创建一个hgrc文件,则可以执行以下命令。

  [网络]
 allow_push = *
 push_ssl = false 

参考文献:

Mercurial Wiki Windows安装
HG书
一步步
发布Mercurial仓库

对于从VSS开始的第一步,我会建议使用SubVersion进行源代码管理,并为客户端提供TortoiseSVN或VisualSVN 。

但是,如果团队已经决定切换到DVCS,那么我会建议Mercurial,因为它更好地支持通过TortoiseHg在客户端上的HTTP和窗口 。

如果你正在寻找:

  1. 分布式开发支持
  2. 无缝运行Windows服务器
  3. 和一个伟大的GUI

你正在描述塑料SCM

请原谅我的坏脾气和无耻的自我推销,但我刚刚发布了一个alpha版本的HgLab ,这是一个Mercurial服务器的Windows与全推拉式支持和Active Directory集成。

SCM-agnostic(在某种程度上)具有Repository-frontent和管理功能的Windows解决方案可能是SCM-Manager (Git,Mercurial,SVN,具有JVM单一需求的盒子)