2009-04-28 83 views
24

我們正在使用VSS進行版本控制。我們很少有開發人員對分佈式模型感興趣(並且想要擺脫VSS)。我們的網絡充滿了Windows機器,雖然我們的IT部門有維護Linux機器的經驗,但他們不希望這樣做。帶有Windows中央存儲庫的DVCS

什麼DVCS系統可在Windows主機的中央資料庫,同時提供..

  1. 推訪問存儲庫。
  2. 基本認證。大多數情況下只是一種允許或拒絕訪問整個存儲庫的方法。不需要細粒度訪問。
  3. 服務器進程,因此用戶不需要向存儲庫寫入權限,從而降低了意外地與其混淆的風險。

在客戶端,像Tortoise這樣的GUI將會或多或少地成爲一個需求(對不起,Windows shell很糟糕。:|)。由於我們的IT部門資源已經非常不足,因此易於安裝將是一個巨大的優勢。只要客戶端能夠存儲憑據,使用Windows憑據進行身份驗證將是一個優勢,但不是一個要求。

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

  • 的Git似乎使用ssh或簡單的通過WebDAV倉庫的訪問,需要爲用戶的寫入權限。
  • Mercurial有一個內置的http服務器,但這似乎只是爲了拉取目的。 更新: Mercurial支持推送。
  • Bazaar似乎將sftp用於存儲庫訪問,同樣需要用戶的寫入權限。

是否有Windows服務器進程的任何DVCS系統,並有任何人設法在Windows的土地之一?

並且道歉,如果這是一個重複的問題。我找不到一個。

更新

了水銀爲推動工作的目的!詳細清單所需內容可以在下面找到答案。

+0

您可能要現在更新問題,你已經看到「hg serve」如何能夠接受推送。 – 2009-05-29 20:47:04

+0

太棒了。感謝您的詳細說明! – mmacaulay 2010-04-26 18:16:57

回答

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版本都支持這兩種版本。您可以參考the CGI directions in the Mercurial Redbook進行Mercurial特定步驟,並且Microsoft's guide to setting up CGI applications in IIS 6可以獲得IIS方面的幫助。

接下來,您需要設置一些基本身份驗證。 IIS提供了即開即用的HTTP Basic,作爲獎勵,它可以直接對您的域進行身份驗證,從而將管理開銷降到最低。

最後,您需要將allow_push行更改爲僅支持特定用戶,方法是指定逗號分隔的用戶名列表。例如:

allow_push = benjamin, ted, the_cow 

就是這樣。 Mercurial現在允許來自可以通過HTTP基本身份驗證進行身份驗證的用戶推送,並允許其他人拉取。

+0

目前嘗試此操作。目前遇到一些困難,但看起來很有希望!不知道Mercurial提供了用於Web服務的CGI腳本。 – 2009-04-28 19:45:21

+0

我想我快到了。 CGI腳本在shell中執行,但IIS上有錯誤。 – 2009-04-28 20:05:26

+0

得到它的工作! – 2009-04-28 20:15:59

2

對於第一步遠離VSS的團隊,我會建議使用SubVersion進行源代碼管理,併爲客戶端使用TortoiseSVNVisualSVN

但是如果團隊已經決定切換到DVCS,那麼我會建議Mercurial,因爲它是better support for HTTP and windows on the client via TortoiseHg

+0

我相信我們大多數開發人員都熟悉Subversion等非VSS源代碼控制。其中最大的要求是Subversion不支持的本地提交。基於其他DVCS在這裏的答案我的結論是,Mercurial可能是最好的選擇,但我找不到一個方法來主持快速谷歌搜索中央存儲庫。雖然感謝您的意見! – 2009-04-28 18:36:51

12

在Benjamin指出HTTP服務CGI腳本之後,我決定試一試,並設法通過HTTP託管一個存儲庫。 Benjamin鏈接的The Redbook對兩篇Mercurial wiki文章有很大的幫助。其中一個描述Mercurial publishing一般,另一個包含step by step設置HgWebDir CGI腳本的說明。

這些說明並非完全萬無一失,儘管如此,我不得不捅一下。最有可能的是我運行64位Vista。下面的說明記錄了我所做的。現在,我已經完成了一次,我可能會以另一種順序做事情,所以不要考慮這些一步一步的指示。

水銀

首先,我所獲得的水銀二進制從中得到安裝到d:\dev\Mercurialhttp://mercurial.berkwood.com/。我使用hg init創建了一個存儲庫,用於d:\dev\testRepo存儲庫下的測試。 d:\dev\Mercurial\library.zip包含CGI腳本所需的Mercurial庫文件,因此它們被提取到d:\dev\Mercurial\library。起初令我困惑的是,當我打開zip文件時,收到一條錯誤消息,但沒有看到任何內容。只是提取文件到一個目錄工作。

對於網頁腳本,我下載了包含hgwebdir.cgi的Mercurial source,它已被移動並重命名爲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。虛擬目錄需要一個CGI處理程序來處理* .py文件,這些文件可以從Handler Mappings中添加。該可執行文件是D:\dev\SDKs\Python25_x86\Python.exe %s。一旦IIS有權訪問webroot目錄,我可以導航到http://localhost/hg/hgwebdir.py/test並查看存儲庫。

所以現在讀訪問正在工作。當我嘗試推送到存儲庫時,收到奇怪的錯誤消息,告訴我它不是真正的存儲庫。

經過一個小時的調試,我最終複製了webroot下的整個D:\dev\Mercurial\library\mercurial樹,以便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的腳本來運行
    • 下載正確的Python版本的x86架構的腳本使用一些86庫。正確的Python版本取決於Mercurial版本。對於1.2.1,它是Python 2.5 x86。
    • 另外,你可以嘗試從你想要的任何Python版本的源碼構建Mercurial,但在我的情況下,當構建擴展時失敗。
  • 如何設置CGI在IIS
    • 首先確保CGI安裝在IIS。 Benjamin發佈的IIS說明中並沒有假設這是真的。
    • 在IIS處理程序映射中爲* .py創建一個新的模塊映射。正確的模塊是CgiModule和可執行是你的Python可執行+%S
  • 如何讓CGI腳本寫入倉庫
    • 確保腳本有它需要的一切。我不得不將library\mercurial\hgweb\hgwebdir_mod.pyc移到另一個地方。
    • 確保腳本擁有它想要的位置的權限。我通過爲使用本地系統帳戶的CGI腳本創建新的應用程序池,將虛擬目錄轉換爲IIS中的應用程序並選擇新的應用程序池來解決此問題。
0

如果你正在尋找:

  1. 分佈式開發的支持
  2. 運行Windows服務器無縫
  3. 而一個偉大的GUI

你正好說明Plastic SCM

7

在閱讀了幾乎爲我工作的Mikko's Answer之後,我想出了自己的安裝注意事項。我的設置旨在成爲我的團隊成員可以在Windows 2008 Server上安裝的「非保護和開放」存儲庫。

1.安裝Python。

我使用的Python版本是Python 2.6.2,我使用的是Windows x86 MSI安裝程序。

  • 爲所有用戶安裝。安裝到C:\ Mercurial \ Python
  • 使用默認功能選項。

2.安裝MinGW。
極簡GNU爲Windows我所用的版本是MinGW 5.1.4

  • 安裝的MinGW-5.1.4.exe。
  • 選擇下載和安裝選項。
  • 選擇要安裝的當前包選項。
  • 要安裝的組件選擇「最小」選項。
  • 安裝到C:\水銀\ MinGW的

3.修改你的路徑。

此時您需要在位置上添加環境路徑。

  • 添加 'C:\水銀\ Python26; C:\水銀\ MinGW的\ BIN'(訂單事項)的路徑

4.安裝水銀。

我使用的mercurial版本是穩定分支中的最新版本,我沒有使用二進制文件,而是使用了源代碼。我想自己編譯mercurial,以便它可以與我安裝的任何版本的Python一起工作,所以我不必擔心任何兼容性問題,我發現這是與其他安裝方法相比最大的挑戰。獲取源代碼的簡單方法是下載「zip」文件。 Mercurial Stable Release

  • 將Zip文件解壓縮到C:\ Mercurial \ Source。
  • 在命令提示符下構建源代碼。
 
python setup.py build --force -c mingw32 
python setup.py install --force --skip-build

5.修改你的路徑。

您需要將'hg'命令的另一個位置插入到您的環境路徑中。

  • 添加 'C:\水銀\ Python26 \ Scripts中; C:\水銀\ Python26; C:\水銀\ MinGW的\ BIN' 的路徑(訂購事宜)

6.創建您的配置文件。

如果您打算在本地服務器上進行任何提交,您需要設置默認用戶名。

  • 創建文件 '「C:\ Documents和Settings {用戶名} .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.設置網頁目錄。

  • 創建目錄 'C:\水銀\ WEB'
  • 複製從該hgwebdir.cgi文件 'C:\水銀\來源' 到'C:\水銀\ WEB '

8.爲集中存儲庫配置IIS7。

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

  • 確保CGI功能在IIS7中可用。
  • 控制面板/程序/ Windows功能/ IIS /應用程序開發功能/ CGI
  • 將應用程序添加到您希望的網站的IIS中。
  • 別名= Mercurial - 物理路徑= C:\ Mercurial \ Web
  • 在App上選擇HTTP模塊並添加一個新的模塊映射。
    • 請求路徑= *。cgi,Module = CgiModule,Executable = C:\ Mercurial \ Python26 \ python.exe%s,Name = Mercurial。
    • 當提示添加條目到ISAPI和CGI限制列表時說是。

9.測試Web安裝。

您現在應該可以瀏覽http://localhost/Mercurial/hgwebdir.cgi並查看並清空存儲庫列表。

10.配置IIS7爲友好的URL

我不喜歡有不友好的URL,這一步可以讓我們的URL重新映射到一些更友好。安裝用於IIS的URL Rewrite Moduel 1.1擴展。

  • 在IIS管理器中的Mercurial IIS應用程序中查看選擇URL重寫組件並安裝新規則。
  • 選擇添加規則,然後選擇模板'帶重寫圖的規則'。規則操作=重寫,指定重寫映射= Mercurial
  • 添加映射條目。 OriginalValue = '/水銀/回購',新價值= '/水銀/ hgwebdir.cgi'

11.創建Mercurial庫

現在,您可以創建一個測試庫。

  • 創建目錄C:\ Mercurial \ Repository,並確保IUSR帳戶有權寫入目錄。 (如果在域帳戶上更像IUSR_ {ComputerName}。
  • 創建文件C:\ Mercurial \ Web \ hgweb.config以列出存儲庫。
[paths] 
/= C:\Mercurial\Repository\**
  • 添加目錄C:\水銀\庫\測試,並與初始化庫 '汞的init'

**如果你現在希望能夠推不使用SSL在存儲庫的.hg目錄中創建一個hgrc文件以下行。

[web] 
allow_push = * 
push_ssl = false

參考文獻:

Mercurial Wiki Windows Install
HG Book
Step by Step
Publishing Mercurial Repositories

0

原諒我necroposting和無恥的自我推銷,但我剛剛發佈的HgLab一個alpha版本,這是一個適用於Windows的Mercurial Server推拉式支持和Active Directory集成。

0

SCM無關的(在某種程度上)Windows的解決方案與信息庫 - frontent和日常管理可能是SCM-Manager(GIT,水銀,SVN回購了一個盒子與JVM的一個要求)

相關問題