2009-05-28 88 views
58

我有一個Mercurial存儲庫,其中包含一些相關的項目。我只想分支其中的一個項目在其他地方開展工作。如何在Mercurial中克隆存儲庫的子文件夾?

克隆只是可能的存儲庫的一部分,而且是否正確實現這一目標?

+0

從我聽說的,這是不把幾個項目放在一個回購中的原因之一。 – 2009-07-06 12:30:32

回答

51

你想要的是一個narrow or partial clone,但不幸的是這還不支持。

如果你已經有了一個很大的倉庫,你知道,這將是有意義的分割成數個較小的存儲庫,那麼你可以使用convert extension水銀含汞轉換。請注意,這將創建一個新的存儲庫foo,您無法在your-big-repofoo之間推/拉。

convert extension默認不啓用,因此以下內容添加到您的回購的hgrc文件或您mercurial.ini文件:

[extensions] 
hgext.convert= 

然後創建一個map.txt文件,

include "libs/foo" 
rename "libs/foo" . 

(注意,您可以使用即使在Windows上也是正斜線)並運行

$ hg convert --filemap map.txt your-big-repo foo 

這將使foo存儲庫具有your-big-repolibs/foo文件夾的完整歷史記錄。

如果要從your-big-repo中刪除foo的所有證據,可以使用exclude libs/foo來刪除目錄中的其他轉換。

當你有幾個這樣的存儲庫,並且你想將它們作爲一個整體使用時,那麼你應該看看subrepositories。此功能可讓您在結帳中包含其他存儲庫 - 與svn:externals的工作方式類似。請按照該wiki頁上的recommendations

+0

謝謝 - 我找到了一個解決方法,我需要做的事情。有趣的是看到涉及的問題。 – 2009-05-28 16:26:53

+27

你能想出什麼解決方法? – 2010-03-10 17:20:13

+20

唉! 「我發現了一個非常奇妙的證據,這個邊緣太窄而無法容納。」 – Matt 2013-02-08 17:42:21

3

這是不可能的,hg clone將克隆整個存儲庫。

您可以看一下子存儲庫擴展,它允許您在存儲庫中擁有存儲庫,這可能會滿足您的需求。

11

而不是做一個部分克隆,您可以使用Convert Extension將您的回購分區拆分爲多個回收子庫。

具體請參見第Converting from Mercurial

這也是篩選的Mercurial庫得到一個現有的子集是有用的。例如,要改變一個倉庫FOO的子目錄subfoo到存儲庫中有自己的生活(同時保持其完整的歷史記錄),請執行下列操作:

$ echo include subfoo > /tmp/myfilemap 
$ echo rename subfoo . >> /tmp/myfilemap 
$ hg convert --filemap /tmp/myfilemap /path/to/repo/foo /tmp/mysubfoo-repo 
2

這是直接與Convert extension前進。

+0

這是一個非常有效的解決方案,它爲什麼投了-1? – cheenu 2011-07-19 19:39:20

+1

我的猜測是,這是因爲解決方案並沒有真正讓你從存儲庫中克隆一個子目錄。相反,它讓你將現有的存儲庫轉換成一個新的,更小的存儲庫,然後你可以克隆。 – 2012-01-20 08:33:18

+5

1)如上所述,您不會回答提出的原始問題。 2)你不解釋原始問題是不可能的。你只是提供不同的東西。 3)你給一個鏈接,而不是實際解釋。 – 2012-06-10 18:35:39

6

我迷迷糊糊翻過這一問題,並發現做這件事:使用符號鏈接(僅適用於Linux不幸)

例如,如果你只需要/project在倉庫中,在您的計算機克隆在另一個回購文件夾,然後使用ln -s /repo/location/ project。 Mercurial將會處理它

1

(2016年末)Mainline Mercurial仍然不支持「狹義克隆」,但有第三方擴展以不同方式解決問題。

如果你可以只用一個狹窄結賬(又名「疏結賬」或「按文件路徑部分結賬」),那麼Facebook的從hg-experimental repositorysparse.py擴展(看hgext3rd/目錄內)應付可能是可行的。在這種情況下,您仍然克隆完整的歷史記錄(因此.hg目錄不會更小),但您的工作目錄僅在完整存儲庫的子集上顯示/操作。

或者Google已經創建了一個縮小的NarrowHG extension克隆(又名「通過文件路徑進行部分克隆」)。您將需要控制服務器,客戶端並願意使用實驗性功能,但它確實將克隆的.hg複製歷史記錄限制爲原始存儲庫中的子集。

相關問題