有沒有辦法克隆subrepos附帶的回購,但沒有Mercurial拉動所有subrepos?Mercurial`hg clone`但忽略所有subrepos?
看起來雖然hg clone -U
可以用來獲得回購的空克隆,但沒有什麼能夠說服hg update
避免通過拉動所有的subrepos開始。
我應該指出,創建這樣一個克隆後,保留輕鬆同步到頭版本的能力至關重要。
有沒有辦法克隆subrepos附帶的回購,但沒有Mercurial拉動所有subrepos?Mercurial`hg clone`但忽略所有subrepos?
看起來雖然hg clone -U
可以用來獲得回購的空克隆,但沒有什麼能夠說服hg update
避免通過拉動所有的subrepos開始。
我應該指出,創建這樣一個克隆後,保留輕鬆同步到頭版本的能力至關重要。
這個答案可能會增加比所需更多的問題,但提供與水銀的工作,當你無法更新做不好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
應該這樣做。
如果你有一個subrepo,工作目錄必須包括該subrepo的一些版本。如果指定,該版本可能是固定的舊版本,如果沒有,則可能是提示。
如果沒有獲取subrepos,則無法更新您的回購;如果你有一個完整的工作目錄沒有他們,你不應該使用subrepos - 而是使用真正的外部回購。
如果您的subrepos與某個遠程版本掛鉤,則第一個更新後的更新不會觸發subrepo更新 - 它們已經是最新的。但是對於工作目錄的初始創建,您將不得不進行遠程拉取。
您可以通過掃描hgsubstate
文件來欺騙Mercurial。但是,真的,你的模型和概念模型是不同的,所以如果這是一個問題,你可能不適合subrepos。
編輯:如果您發現自己克隆然後多次更新到提示,請嘗試使用本地分支或mq
。這樣你只需要做一次初始化克隆。
大多數時候他們看起來都很好。只是subrepos很大,與我發現的官方「服務器」相比較的最佳方式是保持清潔的本地結帳。 subrepos爲這種方法增加了大量的開銷。 – 2010-08-09 00:09:17
@romkyns:如果你只是想跟蹤你已經改變了什麼,使用'hg out'(或'hg diff'來進行未提交的更改)。或者你可以創建一個「乾淨的」克隆,並偶爾使用'hg pull -u'來保持它最新... – Borealid 2010-08-09 00:30:48
謝謝,我想我只能容忍一堆額外的副本這些巨大的subrepos。我發現'hg diff'對於審查代碼並不理想,而是使用基於外部GUI的diff。 – 2010-08-09 01:17:43
找到了一個哈克的方式。它仍然要求所有subrepos被檢出一次,但之後可以刪除。
hg remove .hgsub
我試過subrepos克隆之前說服水銀來hg remove .hgsub
,但我得到了最好的是not removing .hgsub: file is untracked
。
這是一個恥辱。 – 2010-12-08 10:31:22
如果由於某種原因無法訪問外部subrepo,則此解決方案實際上無效。關於忽略subrepos的一些討論[here](http://mercurial.selenic.com/bts/issue2520)。 – 2011-11-19 16:25:45
這應該做你想要什麼:
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%
第3步之後,「hg status」仍將所有文件顯示爲待處理添加。運行'hg debugrebuildstate -r tip'修復了這個問題。 – 2016-03-26 21:42:36