2010-08-08 74 views
18

有沒有辦法克隆subrepos附帶的回購,但沒有Mercurial拉動所有subrepos?Mercurial`hg clone`但忽略所有subrepos?

看起來雖然hg clone -U可以用來獲得回購的空克隆,但沒有什麼能夠說服hg update避免通過拉動所有的subrepos開始。

我應該指出,創建這樣一個克隆後,保留輕鬆同步到頭版本的能力至關重要。

回答

5

這個答案可能會增加比所需更多的問題,但提供與水銀的工作,當你無法更新做不好subrepository路徑或一些有價值的筆記修訂。

第1步:克隆庫中沒有任何更新

hg clone --noupdate source_repository destination_repository 

第2步:使用還原得到正確的文件

hg revert --all --rev revision_number --exclude subrepo_1 --exclude subrepo_2 ... 

在這一點上,你有一個新的變更;您可能需要確保父版本是正確的。當我這樣做時,我的新變更集的父變更集爲0.要解決此問題,我必須設置父變更集AND開關分支(因爲我的變更集位於不同的分支上)。

第3步:改變當前的父母改變

hg debugsetparents revision_number 
hg branch branch_name 

應該這樣做。

+2

第3步之後,「hg status」仍將所有文件顯示爲待處理添加。運行'hg debugrebuildstate -r tip'修復了這個問題。 – 2016-03-26 21:42:36

3

如果你有一個subrepo,工作目錄必須包括該subrepo的一些版本。如果指定,該版本可能是固定的舊版本,如果沒有,則可能是提示。

如果沒有獲取subrepos,則無法更新您的回購;如果你有一個完整的工作目錄沒有他們,你不應該使用subrepos - 而是使用真正的外部回購。

如果您的subrepos與某個遠程版本掛鉤,則第一個更新後的更新不會觸發subrepo更新 - 它們已經是最新的。但是對於工作目錄的初始創建,您將不得不進行遠程拉取。

您可以通過掃描hgsubstate文件來欺騙Mercurial。但是,真的,你的模型和概念模型是不同的,所以如果這是一個問題,你可能不適合subrepos。

編輯:如果您發現自己克隆然後多次更新到提示,請嘗試使用本地分支或mq。這樣你只需要做一次初始化克隆。

+0

大多數時候他們看起來都很好。只是subrepos很大,與我發現的官方「服務器」相比較的最佳方式是保持清潔的本地結帳。 subrepos爲這種方法增加了大量的開銷。 – 2010-08-09 00:09:17

+0

@romkyns:如果你只是想跟蹤你已經改變了什麼,使用'hg out'(或'hg diff'來進行未提交的更改)。或者你可以創建一個「乾淨的」克隆,並偶爾使用'hg pull -u'來保持它最新... – Borealid 2010-08-09 00:30:48

+0

謝謝,我想我只能容忍一堆額外的副本這些巨大的subrepos。我發現'hg diff'對於審查代碼並不理想,而是使用基於外部GUI的diff。 – 2010-08-09 01:17:43

4

找到了一個哈克的方式。它仍然要求所有subrepos被檢出一次,但之後可以刪除。

  1. 克隆整個地段,包括subrepos。沒有辦法繞過這個。
  2. 刪除subrepos
  3. hg remove .hgsub

我試過subrepos克隆之前說服水銀來hg remove .hgsub,但我得到了最好的是not removing .hgsub: file is untracked

+6

這是一個恥辱。 – 2010-12-08 10:31:22

+6

如果由於某種原因無法訪問外部subrepo,則此解決方案實際上無效。關於忽略subrepos的一些討論[here](http://mercurial.selenic.com/bts/issue2520)。 – 2011-11-19 16:25:45

13

這應該做你想要什麼:

REM Take a new clone, but do not update working directory 
hg clone --noupdate %REPO_PATH% %DESTINATION% 

REM Update working directory but exclude the certain subprojects 
hg revert --all --rev %BRANCH% --exclude %SUBREPO_PATH_1% --exclude %SUBREPO_PATH_2%