2012-12-06 81 views
5

使用subrepositories我subrepository結構如下在TortoiseHg:與到位桶和ToritoiseHg

/MainFolder/ 
/MainFolder/SubFolder1 
/MainFolder/SubFolder2 

MainFolder是到位桶 私人倉庫SubFolder1是到位桶 私人倉庫SubFolder2是到位桶

私人倉庫

內MainFolder文件.hgsub看起來是這樣的:

SubFolder1 = SubFolder1 
SubFolder2 = SubFolder2 

MainFolder中的文件.hgsubstat也具有有效的GUID和子庫名稱。

的問題是每當我試圖推到位桶的MainFolder,首先它推動MainFolder,然後SubFolder1,但是當它到達SubFolder2,TortoiseHg拋出錯誤「中止:倉庫是不相關的。」

當我在bitbucket上檢查我的MainFolder存儲庫時,它實際上具有SubFolder1的內容(它應該作爲subrepository列出)。

我該如何解決這個問題,以便MainFolder能夠作爲父庫正確上傳,並且SubFolder1和SubFolder2被列爲其在bitbucket上的子庫?

+1

我也嘗試使用[子路徑]截至[鏈接]所示例子爲subrepository在(https://bitbucket.org/kiilerix/subrepodemo/)。我在.hgsub文件末尾添加了以下內容: (https://(?:[^ @] + @)?bitbucket \ .org/[^ /] +/[^ /] +)/(。* )= \ 1- \ 2 由於替換的用戶界面不存在存儲庫,因此這不起作用。有沒有其他方法可以做到這一點,而無需重新命名我的所有存儲庫以匹配正則表達式。 此外,由於這是私人存儲庫bitbucket將用戶名添加到格式化的鏈接,並且其他用戶失敗。 – samirjaiswal

回答

6

在bitbucket文檔中顯示的example需要重命名存儲庫,以便所有存儲庫都被命名爲MainRepository-SubRepository。我不想重命名所有存儲庫,因此修改了正則表達式,如下面的示例所示,現在它可以正常工作。此版本不需要存儲庫名稱中的破折號分隔符,主存儲庫和子存儲庫可以獨立命名。示例.hgsub看起來像這樣:

SubFolder1 = SubFolder1 
SubFolder2 = SubFolder2 
[subpaths] 
(https://(?:[^@][email protected])?bitbucket\.org/[^/]+)(/[^/]+)/(.*) = \1/\3 
1

Bitbucket不在原位進行subrepos。因此,Mercurial試圖將您的每個存儲庫推送到同一位置,並在嘗試將repo SubFolder2推送到SubFolder1回購的遠程副本時發出抱怨。

子庫是表面上是多個項目之間共享的庫,因此不生活在任何一個主要回購站下,而是在他們自己的空間中。因此,您必須創建單獨的遠程存儲庫來存放每個子庫(庫),並在.hgsub文件中引用單獨的遠程路徑。

例如,您的示例項目可能有三個到位桶託管庫

https://bitbucket.org/bitbucketname/main_project 
https://bitbucket.org/bitbucketname/library1 
https://bitbucket.org/bitbucketname/library2 

您希望您的本地克隆的文件空間看起來像這樣:

/MainFolder/ 
/MainFolder/SubFolder1 
/MainFolder/SubFolder2 

在main_project的本地克隆(MainFolder ),設置父庫的默認路徑https://bitbucket.org/bitbucketname/main_project

/MainFolder/.hg/hgrc包含

[paths] 
default = https://bitbucket.org/bitbucketname/main_project 

現在,在.hgsub文件中指出子庫/庫的遠程路徑。一般的格式。hgsub條目是:

local/path/to/subrepo = remote/path/to/matching/library 

所以你.hgsub可能包含相對本地和遠程路徑(相對於主回購的位置在本地或遠程,視情況而定):

SubFolder1 = ../library1 
SubFolder2 = ../library2 

SubFolder1 = https://bitbucket.org/bitbucketname/library1 
SubFolder2 = https://bitbucket.org/bitbucketname/library2 

或絕對路徑的一切:

使用絕對路徑,以每個圖書館的遠程回購相對本地路徑
/MainFolder/SubFolder1 = https://bitbucket.org/bitbucketname/library1 
/MainFolder/SubFolder2 = https://bitbucket.org/bitbucketname/library2 

現在,當您從本地主項目中推送時,Mercurial知道到哪裏可以找到所有子庫(本地)以及將每個庫所做的更改推送到何處(遠程)。

另外,假設您想將其他人的庫添加到您的項目中。然後你.hgsub可能是這個樣子:

SubFolder1 = ../library1 
SubFolder2 = ../library2 
another_library = https://bitbucket.org/honkaboy/honkaboys_excellent_library