2011-04-13 56 views
2

有幾個類似的問題,但我找不到足夠接近不要提出一個新問題。Mercurial回購與來自SVN回購一個子文件夾 - 可能嗎?

我們有一個由mercurial控制的vs2010解決方案,其中包含40多個項目。
我們還有一個承包商在一個項目的一部分遠程工作,一個Labview FPGA + RT + DotNetAssembly。

我最好喜歡把他的代碼放到我們的Mercurial回購的「ContractorsSVNRepo」(見下文)中,當我想要更新時,我下載他的svn回購,如果我滿意,那麼承諾我們的mercurial回購。

我有權訪問他的svn回購項目的部分,但他沒有權限訪問我們的Mercurial回購安全/ IP原因。因爲我不熟悉mercurial,我甚至不知道是否有可能讓他訪問只有一個回購文件夾,所以這就是我想出的。

這項工作?可以做到嗎?我只是在目標文件夾中創建一個svn repo,下載它,然後只將我想要的文件添加到我們的repo中?這兩個scc系統會在一起變得好嗎?我只會嘗試一下,看看會發生什麼,但即時通訊並不熟悉mercurial,並且不想冒險破壞我們的mercurial repo,也無法迅速恢復。

OurAppsMercurialRepo 
    Proj1 
    Proj2 
    Proj3 
    Proj3Folder1  
    Proj3Folder2 
    Proj3Folder3 
    ContractorsSVNRepo 
    ... 
    Proj40 

編輯1:
我不認爲我做這個權利,從另一臺機器拉變化只拉.hgsub文件,它不拉的svn回購(或從我可以告訴,甚至嘗試因爲尚未被要求或添加任何登錄細節)。

我這樣做我的機器上:
HG的init ContractorsSVNRepo
它與 「ContractorsSVNRepo = [SVN] https://ContractorsRepo.com/svn/trunk」 創建.hgsub
HG添加.hgsub
SVN共同https://ContractorsRepo.com/svn/trunk ContractorsSVNRepo
HG狀態
HG提交-m「Subrepositories補充說:」

然而,當我拉另一臺機器所做的只是拉.hgsub文件上。 該文檔鏈接表明,拉回主回購將拉動回購,但其唯一拉扯mercurial的一個?我是否錯過了這些步驟?

EDIT2:

內部OurAppsMercurialRepo:
SVN共同http://svn.contractor.com/svn/proj4other/trunk Proj3/ContractorsSVNRepo

將.hgsub文件直接內部OurAppsMercurialRepo內執行以下操作:
Proj3/ContractorsSVNRepo = [SVN] HTTP:/ /svn.contractor。COM/SVN/proj4other /後備箱

從現在開始,當您提交OurAppsMercurialRepo,顛覆結賬處的提交將存儲在善變

感謝您的答覆時間修訂然而,這沒有改變任何東西即時通訊恐怕,它仍然沒有下載/更新svn源拉動主回購和我現在得到一個錯誤,我的路徑名稱
「中止:路徑包含非法組件:」。
我懷疑這是因爲我們的路徑名稱中有「.」,所以即時放棄並創建一個單獨的svn repo,並手動將我想要的文件複製到mercurial中。它不會失敗,它不會導致其他開發人員頭痛,我不會浪費任何時間在這個。

+0

可以複製你的善變回購在一個單獨的地方,並與SVN subprepos嘗試它。這樣你就不用擔心殘骸。 – tamizhgeek 2011-04-13 16:07:10

回答

6

是可以的。見善變Subrepos - > https://www.mercurial-scm.org/wiki/Subrepository

+1

另請參閱我的指南:http://mercurial.aragost。com/kick-start/en/subrepositories /#subversion-subrepositories – 2011-04-13 19:36:57

+0

一個快速補充,因爲其他回購是一個承包商回購,他們不會讓這個回購在他們的工作完成後永遠持續下去,是否容易脫離他們回購並將該子倉庫轉換爲原始主倉庫中的普通文件夾? 我只是拿一份副本,刪除subrepo並重新添加正常或有一個特殊的過程呢? – Matma 2011-04-14 07:51:10

+0

+1指出subrepos現在是相當有用:)我沒有檢查/試用了很長一段時間。 – 2011-04-14 10:54:54

2

OurAppsMercurialRepo

svn co http://svn.contractor.com/svn/proj4other/trunk Proj3/ContractorsSVNRepo 

把下面的內部.hgsub文件裏面直接OurAppsMercurialRepo

Proj3/ContractorsSVNRepo = [svn]http://svn.contractor.com/svn/proj4other/trunk 

從現在開始,當您提交OurAppsMercurialRepo,的修訂提交時的顛覆簽出存儲在mercurial中。例如。您本地使用的ContractorsSVNRepo而不是被迫成爲他們的最新版本。

如果您擔心他們在一段時間後移除了Subversion存儲庫,您可以先製作一個cron /計劃任務,每天晚上/每小時/ 5分鐘將其轉換爲svn repo。這裏的奇妙之處是HgSubversion,它可以轉換Subversion存儲庫中的一個水銀版本保持中間的映射。然後你使用Mercurial庫作爲subrepo如上:

安裝HgSubversion後,顛覆存儲庫轉換爲水銀之一:

hg clone -U http://svn.contractor.com/svn/proj4other proj4otherconverted 

(我在最後取出trunk一部分HgSubversion也可以轉換分支和標籤)

然後proj4otherconverted目錄內安排此命令:

hg pull 

裏面OurAppsMercurialRepo化妝目錄Proj3則:

hg clone http://hg.yourcompany.com/hg/proj4otherconverted Proj3/ContractorsSVNRepo 

把裏面.hgsub文件直接如下內OurAppsMercurialRepo

Proj3/ContractorsSVNRepo = http://hg.yourcompany.com/hg/proj4otherconverted 
+0

請參閱操作上的Edit2,但無論如何感謝。 – Matma 2011-04-14 12:57:24

+0

@Matma:你是否嘗試過答案的第二部分?它可能會解決你的問題。併爲您的承包商帶來歷史/可追溯性。 – shellholic 2011-04-14 13:14:45

+0

不,我看着它,並決定我不想在所有開發機器上這樣做。太多的工作太少的回報。最後,我在mercurial結構的文件夾中創建了svn repo,將其檢出,並將這些文件添加到mercurial repo並提交/推送。任務完成。更簡單,其他開發人員不需要擔心任何事情,只需定期進行。這意味着當承包商進行更改時,不得不合作svn回購,但這並不是什麼大問題,我可以控制源代碼樹中的結果。 – Matma 2011-04-14 15:55:36