24

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

哪些 DVCS 系统可以在 Windows 上托管其中央存储库,同时提供..

  1. 推送对存储库的访问。
  2. 基本身份验证。主要是一种允许或拒绝访问整个存储库的方法。无需细粒度的访问。
  3. 服务器进程,因此用户不需要对存储库的写入权限,从而降低了意外弄乱它的风险。

在客户端,或多或少需要像 Tortoise 这样的 GUI(对不起,Windows shell 很烂。:|)。易于安装将是一个巨大的优势,因为我们的 IT 部门已经非常缺乏资源。只要客户端能够存储凭据,使用 Windows 凭据进行身份验证将是一个优势,但不是必需的。

我(真的)快速浏览了 Git、Mercurial 和 Bazaar。

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

是否有适用于任何 DVCS 系统的 Windows 服务器进程,是否有人设法在 Windows 领域设置了一个?

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

更新

让 Mercurial 为推送目的工作!可以在下面找到所需的详细列表作为答案。

4

7 回答 7

17

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 中的 CGI 指导以了解 Mercurial 特定的步骤,以及Microsoft 的在 IIS 6 中设置 CGI 应用程序的指南以获取 IIS 方面的帮助。

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

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

allow_push = benjamin, ted, the_cow

就是这样。Mercurial 现在将允许来自可以通过 HTTP 基本身份验证进行身份验证的用户的推送,并允许从其他所有人那里拉取。

于 2009-04-28T19:10:52.167 回答
12

在 Benjamin 指出 HTTP 服务 CGI 脚本之后,我决定尝试这些并设法获得一个通过 HTTP 托管的存储库。本杰明链接的红皮书和两篇 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

Python

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. 虚拟目录需要一个用于 *.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
    • 首先确保 CGI 安装在 IIS 中。本杰明发布的 IIS 说明中并未假定这是真的。
    • 在 IIS 处理程序映射中为 *.py 创建一个新的模块映射。正确的模块是CgiModule并且可执行文件是您的 Python 可执行文件 + %s
  • 如何允许 CGI 脚本写入存储库
    • 确保脚本具有所需的一切。我不得不把它搬到library\mercurial\hgweb\hgwebdir_mod.pyc另一个地方。
    • 确保脚本有权访问它想要的任何地方。我通过为使用本地系统帐户的 CGI 脚本创建一个新的应用程序池、将虚拟目录转换为 IIS 中的应用程序并选择新的应用程序池来解决这个问题。
于 2009-04-28T22:12:41.183 回答
7

在阅读了几乎对我有用的 Mikko 的答案后,我想出了自己的安装笔记。我的设置被设计成一个“不受保护和开放”的存储库,我的团队成员可以使用它安装在 Windows 2008 Server 上。

1. 安装 Python。

我使用的 Python 版本是Python 2.6.2,我使用的是 Windows x86 MSI Installer。

  • 为所有用户安装。
  • 安装到 C:\Mercurial\Python
  • 使用默认功能选项。

2.安装MinGW。
我使用的适用于 Windows 的 Minimalist GNU 版本是MinGW 5.1.4

  • 安装 MinGW-5.1.4.exe。
  • 选择下载和安装选项。
  • 选择要安装的当前包选项。
  • 对于要安装的组件选择“最小”选项。
  • 安装到 C:\Mercurial\MinGW

3. 修改你的路径。

此时您需要在环境路径中添加位置。

  • 将“ C:\Mercurial\Python26;C:\Mercurial\MinGW\bin ”添加到路径(顺序事项。)

4. 安装 Mercurial。

我使用的 mercurial 版本是 stable 分支中的最新版本,我没有使用二进制文件,而是使用了源代码。我想自己编译 mercurial,这样它就可以与我安装的任何版本的 Python 一起工作,所以我不必担心任何兼容性问题,我发现这是其他安装方法的最大挑战。获取源代码的最简单方法是下载“zip”文件。 Mercurial 稳定版

  • 将 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 ”添加到路径(顺序事项。)

6. 创建您的配置文件。

如果要在此服务器上本地执行任何提交,则需要设置默认用户名。

  • 创建文件' "C:\Documents and Settings{username}.hgrc" '
[用户界面]  
编辑器 = 记事本  
用户名 = 你的名字

6. 测试您的安装。

打开一个新的命令窗口并使用“ hg debuginstall ”进行测试以进行验证。您应该会看到类似以下内容。

正在检查编码 (cp1252)...  
正在检查扩展...  
正在检查模板...  
正在检查补丁...  
检查提交编辑器...  
正在检查用户名...  
未检测到问题  

7. 设置网页目录。

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

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

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

  • 确保 CGI 功能在 IIS7 中可用。
  • 控制面板/程序/Windows 功能/IIS/应用程序开发功能/CGI
  • 在您希望的网站上将应用程序添加到 IIS 中。
  • 别名=Mercurial -- 物理路径=C:\Mercurial\Web
  • 在 App 上选择 HTTP Modules 并添加一个新的 Module Mapping。
    • 请求路径=*.cgi,模块=CgiModule,可执行文件=C:\Mercurial\Python26\python.exe %s,名称=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' 初始化存储库

** 如果您现在希望能够在没有 ssl 的情况下推送,请在存储库的 .hg 目录中创建一个 hgrc 文件,如下行。

[网络]
允许推送 = *
push_ssl = 假

参考:

Mercurial Wiki Windows Install
HG Book
一步一步
发布 Mercurial 存储库

于 2009-05-27T18:13:56.677 回答
2

对于从 VSS 迈出第一步的团队,我会建议使用SubVersion进行源代码控制,使用TortoiseSVNVisualSVN进行客户端。

但是,如果团队决定切换到 DVCS,那么我建议使用 Mercurial,因为它通过 TortoiseHg 更好地支持客户端上的 HTTP 和 windows

于 2009-04-28T18:27:38.697 回答
0

如果您正在寻找:

  1. 分布式开发支持
  2. 无缝运行 Windows 服务器
  3. 和一个很棒的图形用户界面

您正在准确描述塑料单片机

于 2009-04-29T07:19:36.580 回答
0

请原谅我的 necroposting 和无耻的自我推销,但我刚刚发布了HgLab的 alpha 版本,它是一个适用于 Windows 的 Mercurial Server,具有完全的推拉支持和 Active Directory 集成。

于 2012-12-06T11:37:06.497 回答
0

与 SCM 无关的(在某种程度上)具有 Repository-frontent 和管理的 Windows 解决方案今天可能是SCM-Manager(Git、Mercurial、SVN 开箱即用,只需要 JVM)

于 2012-12-06T13:58:28.030 回答