2012-01-14 63 views
0

我一直試圖按照窯爐的回答this question中的說明操作。在osx上設置mercurial/kiln subrepos

我希望能夠安排的事情如下:

  • /somepath/thirdparty映射到窯庫「第三方」,包含配套代碼
  • /somepath/common映射到窯庫「普通」,並含有共享代碼我寫

  • /somepath/project1映射到窯庫 「PROJECT1」
  • /somepath/project1/thirdparty映射到第三方的分支以上
  • /somepath/project1/common映射到的公共分支以上

  • /somepath/project2映射到窯庫 「PROJECT1」
  • /somepath/project2/thirdparty映射到第三方以上的另一分支
  • /somepath/project2/common映射到的共同另一支以上

我發現,當我創建的.hgsub文件的指示,並添加/它推到窯,我再也無法查看窯內網絡文件瀏覽器窯文件 - 它顯示了關於窯「過熱」的模糊信息:-)另外,雖然它自動在正確的位置創建了子文件夾,但它們沒有填充文件(可能是因爲拉出失敗)。

以前有沒有人試過類似的東西,用窯?

由於我打算使用公共代碼開發許多應用程序(並有可能最終將庫作爲開源版本發佈),因此我希望在離散存儲庫中進行管理。由於有些項目是面向最終客戶的,我需要能夠爲他們提供一個包含上述內容的存儲庫。

+0

@馬丁蓋斯勒 - 感謝編輯,現在閱讀起來更容易! – unsynchronized 2012-01-14 08:51:57

+0

沒問題,我很高興整理一下! :) – 2012-01-14 08:54:03

回答

2

currently not support subrepos that use nested URLs on the server。這意味着,你不能有以下兩個網址的工作:

http://server/kiln/somepath/project1 
http://server/kiln/somepath/project1/thirdparty 

所以你應該設置窯,讓你在服務器上庫:

http://server/kiln/somepath/project1 
http://server/kiln/somepath/project2 
http://server/kiln/somepath/thirdparty 
http://server/kiln/somepath/common 

這很簡單 - 只是四個標準庫。然後克隆「項目」,創建.hgsub文件有:

thirdparty = http://server/kiln/somepath/thirdparty 
common = http://server/kiln/somepath/common 

當你把那回窯,它會發現,爲subrepositories顯示鏈接。但是,子目錄不會最終被嵌套在服務器上。所以那裏不會有任何project1/thirdparty路徑在服務器上。

這也是很不清楚,你會想要的。當你有幾個合作並使用一些通用代碼庫的項目時,你需要「project1」和「project2」來獲取對方對這個通用代碼庫的更改。所以這兩個項目中的common subrepo推送和從http://server/kiln/somepath/common拉動非常有用。

在Mercurial中,我們normally recommend您在.hgsub文件中使用common = common格式的路徑。這意味着服務器必須支持嵌套的存儲庫。當窯不支持嵌套回購時,您可以使用完整路徑。

當您最初設置子庫時,請記住您需要手動更新它們。因此,通過上述網址,您可以通過運行設置「project1」:

$ hg clone http://server/kiln/somepath/project1 
$ echo "common =  http://server/kiln/somepath/common" > .hgsub 
$ echo "thirdparty = http://server/kiln/somepath/thirdparty" > .hgsub 
$ hg commit -m "Created subrepos" 

這會創建初始的空子庫。他們是空的,因爲你沒有告訴Mercurial你需要哪些變化。這在.hgsubstate跟蹤,你會發現:

0000000000000000000000000000000000000000 common 
0000000000000000000000000000000000000000 thirdparty 

要填充subrepositories你做

$ cd common 
$ hg pull --update 
$ cd ../thirdparty 
$ hg pull --update 
$ cd .. 
$ hg commit -m "Updated subrepos" 

這將更新000....hgsubstate與兩個subrepos當前提示變更標識。未來的「project1」克隆將會注意到.hgsubstate文件,並確保將subrepos更新爲此處提及的修訂版。

+0

嗯,這似乎是我如何設置和它失敗(我沒有嵌套在服務器上的回購站,但只在本地)。我會仔細觀察,看看我的方法與你的答案有何不同,以及可能導致錯誤的原因。謝謝。 – unsynchronized 2012-01-14 09:02:23

+0

據我可以告訴一切設置相同,除了它使用https://而不是http://(我的[auth]部分我的home文件夾中的.hgrc文件具有窯登錄的相應登錄憑據) 。我的實際路徑有我不想在這裏發佈的有意義的名稱,但除此之外,它在語義上是相同的。 – unsynchronized 2012-01-14 09:34:52

+0

好吧,奇怪。當你「克隆」這個項目時,Mercurial會簡單地「克隆」這個子目錄。所以試着手工克隆'server/kiln/common'。如果這不起作用,那麼窯的回購有些問題。我想你知道這一點,但subrepo並不特別 - 它只是服務器上的正常回購。其他回購可以在'.hgsub'文件中引用它,但subrepo不會「知道」這一點。 – 2012-01-14 09:52:27