我有一個Mercurial存儲庫,其中包含一些相關的項目。我只想分支其中的一個項目在其他地方開展工作。如何在Mercurial中克隆存儲庫的子文件夾?
克隆只是可能的存儲庫的一部分,而且是否正確實現這一目標?
我有一個Mercurial存儲庫,其中包含一些相關的項目。我只想分支其中的一個項目在其他地方開展工作。如何在Mercurial中克隆存儲庫的子文件夾?
克隆只是可能的存儲庫的一部分,而且是否正確實現這一目標?
你想要的是一個narrow or partial clone,但不幸的是這還不支持。
如果你已經有了一個很大的倉庫,你知道,這將是有意義的分割成數個較小的存儲庫,那麼你可以使用convert extension做水銀含汞轉換。請注意,這將創建一個新的存儲庫foo
,您無法在your-big-repo
和foo
之間推/拉。
的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-repo
的libs/foo
文件夾的完整歷史記錄。
如果要從your-big-repo
中刪除foo
的所有證據,可以使用exclude libs/foo
來刪除目錄中的其他轉換。
當你有幾個這樣的存儲庫,並且你想將它們作爲一個整體使用時,那麼你應該看看subrepositories。此功能可讓您在結帳中包含其他存儲庫 - 與svn:externals
的工作方式類似。請按照該wiki頁上的recommendations。
謝謝 - 我找到了一個解決方法,我需要做的事情。有趣的是看到涉及的問題。 – 2009-05-28 16:26:53
你能想出什麼解決方法? – 2010-03-10 17:20:13
唉! 「我發現了一個非常奇妙的證據,這個邊緣太窄而無法容納。」 – Matt 2013-02-08 17:42:21
這是不可能的,hg clone
將克隆整個存儲庫。
您可以看一下子存儲庫擴展,它允許您在存儲庫中擁有存儲庫,這可能會滿足您的需求。
而不是做一個部分克隆,您可以使用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
這是直接與Convert extension前進。
這是一個非常有效的解決方案,它爲什麼投了-1? – cheenu 2011-07-19 19:39:20
我的猜測是,這是因爲解決方案並沒有真正讓你從存儲庫中克隆一個子目錄。相反,它讓你將現有的存儲庫轉換成一個新的,更小的存儲庫,然後你可以克隆。 – 2012-01-20 08:33:18
1)如上所述,您不會回答提出的原始問題。 2)你不解釋原始問題是不可能的。你只是提供不同的東西。 3)你給一個鏈接,而不是實際解釋。 – 2012-06-10 18:35:39
我迷迷糊糊翻過這一問題,並發現做這件事:使用符號鏈接(僅適用於Linux不幸)
例如,如果你只需要/project
在倉庫中,在您的計算機克隆在另一個回購文件夾,然後使用ln -s /repo/location/ project
。 Mercurial將會處理它
(2016年末)Mainline Mercurial仍然不支持「狹義克隆」,但有第三方擴展以不同方式解決問題。
如果你可以只用一個狹窄結賬(又名「疏結賬」或「按文件路徑部分結賬」),那麼Facebook的從hg-experimental repositorysparse.py
擴展(看hgext3rd/
目錄內)應付可能是可行的。在這種情況下,您仍然克隆完整的歷史記錄(因此.hg目錄不會更小),但您的工作目錄僅在完整存儲庫的子集上顯示/操作。
或者Google已經創建了一個縮小的NarrowHG extension克隆(又名「通過文件路徑進行部分克隆」)。您將需要控制服務器,客戶端並願意使用實驗性功能,但它確實將克隆的.hg複製歷史記錄限制爲原始存儲庫中的子集。
從我聽說的,這是不把幾個項目放在一個回購中的原因之一。 – 2009-07-06 12:30:32