代码之家  ›  专栏  ›  技术社区  ›  Mikko Rantanen

带有Windows中央存储库的DVCS

  •  24
  • Mikko Rantanen  · 技术社区  · 17 年前

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

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

    1. 基本身份验证。通常只是一种允许或拒绝访问整个存储库的方法。不需要细粒度的访问。
    2. 服务器进程,因此用户不需要对存储库进行写操作,从而降低了意外破坏存储库的风险。

    在客户端,像乌龟这样的GUI或多或少是一种要求(对不起,Windowsshell太差劲了。|)。易于安装将是一个巨大的优势,因为我们的IT部门已经非常缺乏资源。使用windows凭据进行身份验证将是一种优势,但只要客户端能够存储凭据,就不是必需的。

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

    • 似乎使用ssh或简单WebDAV访问存储库,需要用户的写权限。
    • 汞的 更新: Mercurial也支持推送。
    • 集市

    是否有适用于任何DVCS系统的windows server进程,是否有人设法在windows平台上设置了一个?

    如果这是一个重复的问题,我道歉。我找不到。

    使现代化

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

    7 回复  |  直到 17 年前
        1
  •  17
  •   Benjamin Pollack Stefan Rusek    17 年前

    Mercurial几乎可以肯定是Windows上最简单的选项。

    hg serve 允许推。为此,只需将以下内容添加到 .hg/hgrc 要提供服务的存储库中的文件:

    [web]
    allow_push = *
    push_ssl = false
    

    第一行表示任何人都可以推送到这个存储库。第二个命令告诉Mercurial允许在没有SSL的情况下进行推送,因为 汞发球 当前本机不支持HTTPS。此时,用户可以推送到您的存储库,而无需在任何地方拥有帐户。如果您只是一个小商店,那可能没问题——特别是因为您可以使用Mercurial的变更集签名功能来保证比HTTP Basic提供的可验证性更高的级别。

    the CGI directions in the Mercurial Redbook 对于Mercurial的特定步骤,以及 Microsoft's guide to setting up CGI applications in IIS 6 有关IIS方面的帮助。

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

    最后,您需要更改 allow_push

    allow_push = benjamin, ted, the_cow
    

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

        2
  •  12
  •   Mikko Rantanen    17 年前

    The Redbook Mercurial publishing 一般而言,另一个包含 step by step 有关设置HgWebDir CGI脚本的说明。

    但这些说明并不是绝对可靠的,所以我不得不四处看看。很可能是因为我运行的是64位Vista。下面的说明记录了我所做的事情。现在我已经做过一次了,我可能会按照另一个顺序做事情,所以不要考虑这些循序渐进的指导。

    汞的

    首先,我从 http://mercurial.berkwood.com/ 安装在 d:\dev\Mercurial . 我创建了一个用于测试的存储库 d:\dev\testRepo 使用存储库 hg init . 这个 d:\dev\Mercurial\library.zip 包含CGI脚本所需的Mercurial库文件,以便将它们提取到 d:\dev\Mercurial\library . 一开始让我困惑的是,当我打开zip文件时,我收到了一条错误消息,没有看到任何内容。不过,只需将文件解压缩到一个目录就行了。

    source d:\dev\Mercurial\webroot\hgwebdir.py . 这篇分步的文章包含了修改hgwebdir Windows脚本的良好说明。它们还包含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相同的版本。最后,在尝试了Python2.6x64、Python2.4、Python2.5x64之后,我让它在Python2.5x86上工作。

    我错过了两件必须安装的事情:CGI支持和基本身份验证。这两个都是通过控制面板、程序和功能安装的。完成安装后,我在IIS中创建了一个指向的虚拟目录(后来我将其更改为应用程序) D:\dev\Mercurial\webroot . 虚拟目录需要用于*.py文件的CGI处理程序,该文件可以从处理程序映射中添加。可执行文件是 D:\dev\SDKs\Python25_x86\Python.exe %s http://localhost/hg/hgwebdir.py/test

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

    经过一个小时的调试,我最终复制了整个系统 D:\dev\Mercurial\library\mercurial 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 他在工作!

    问题和解决办法

    • 在哪里可以找到库文件。
    • 如何让Python脚本运行
      • 下载适用于x86体系结构的正确Python版本,因为脚本使用一些x86库。正确的Python版本取决于Mercurial版本。对于1.2.1,它是Python2.5x86。
      • 或者,您可以尝试从源代码中构建Mercurial,使用您想要的任何Python版本,但在我的例子中,在构建扩展时这失败了。
    • 如何在IIS中设置CGI
      • 首先确保在IIS中安装了CGI。本杰明发布的IIS说明中没有假设这是真的。
      • 在IIS处理程序映射中为*.py创建新的模块映射。正确的模块是 CgiModule 可执行文件是Python可执行文件+%s
    • 如何允许CGI脚本写入存储库
      • 确保脚本具有所需的所有内容。我不得不搬家 library\mercurial\hgweb\hgwebdir_mod.pyc 去另一个地方。
      • 确保脚本具有访问其所需任何位置的权限。我通过为使用本地系统帐户的CGI脚本创建一个新的应用程序池、将虚拟目录转换为IIS中的应用程序并选择新的应用程序池来解决这个问题。
        3
  •  7
  •   degnome    17 年前

    我使用的Python版本是 Python 2.6.2 我使用了Windowsx86MSI安装程序。

    • 使用默认功能选项。

    2.安装MinGW。
    MinGW 5.1.4

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

    3.修改您的路径。

    此时,您需要将位置添加到环境路径中。

    • 添加' C:\Mercurial\Python26;C:\Mercurial\MinGW\bin '到路径(顺序很重要。)

    4.安装Mercurial。

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

    • 将Zip文件解压缩到C:\Mercurial\Source。
    • 在命令提示下生成源代码。
    python setup.py build --force -c mingw32
    python setup.py install --force --skip-build

    您需要为“hg”命令在环境路径中插入另一个位置。

    • 添加' '到路径(顺序很重要。)

    6.创建配置文件。

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

    • “C:\Documents and Settings{username}.hgrc”
    [ui]  
    editor = Notepad  
    username = your_name 

    6.测试您的安装。

    打开一个新的命令窗口,并使用' hg调试安装

    Checking encoding (cp1252)...  
    Checking extensions...  
    Checking templates...  
    Checking patch...  
    Checking commit editor...  
    Checking username...  
    No problems detected  
    

    7.设置Web目录。

    • Mercurial\Web:\ '
    • 将hgwebdir.cgi文件从 “到” '

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

    我使用了DefaultAppPool,它使用.NET2.0,Pipeline=Integrated,Identity=ApplicationPoolIdentity。

    • 确保IIS7中有CGI功能。
    • 控制面板/程序/Windows功能/IIS/应用程序开发功能/CGI
    • 在应用程序上选择HTTP模块并添加新的模块映射。
      • 请求路径=*.cgi,模块=CgiModule,可执行文件=C:\Mercurial\Python26\python.exe%s,名称=Mercurial。

    9测试您的Web设置。

    您现在应该可以浏览 http://localhost/Mercurial/hgwebdir.cgi 并查看和清空存储库列表。

    我不喜欢不友好的URL,这一步允许我们将URL重新映射到更友好的URL。安装 URL Rewrite Moduel 1.1 IIS的扩展。

    • 选择添加规则,然后选择模板“带有重写映射的规则”。规则操作=重写,指定重写映射=Mercurial
    • 添加映射条目。原始值='/Mercurial/Repo',新值='/Mercurial/hgwebdir.cgi'

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

    • 创建目录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 Install
    HG Book
    Step by Step
    Publishing Mercurial Repositories

        4
  •  2
  •   Sijin    17 年前

    SubVersion 对于源代码管理和 TortoiseSVN VisualSVN

    但如果团队决定改用DVCS,那么我会建议Mercurial,因为它是 better support for HTTP and windows on the client via TortoiseHg .

        5
  •  0
  •   pablo    17 年前

    1. 分布式开发支持
    2. 还有一个很棒的GUI

    Plastic SCM

        6
  •  0
  •   Anton Gogolev    13 年前

    请原谅我的发帖和无耻的自我推销,我刚刚发布了一个alpha版本的 HgLab ,这是一个Mercurial Windows服务器,具有完全的拉-推支持和Active Directory集成。

        7
  •  0
  •   Lazy Badger    13 年前

    如今,具有存储库前台和管理功能的与SCM无关(在某种程度上)的Windows解决方案可能是可行的 SCM-Manager