2010-04-08 41 views
2

幾天前剛剛開始與Mercurial合作,有些事我不明白。Mercurial中的廉價克隆/本地分支

我有一個我想做的實驗性事情,所以正常的事情是克隆我的存儲庫,在克隆上工作,如果最終我想保留這些更改,我會將它們推送到我的主存儲庫。

問題是克隆我的存儲庫需要很多時間(我們有很多代碼),只編譯克隆的副本將花費一個小時。
所以我需要以某種方式工作在不同的存儲庫,但仍然在我原來的工作副本。

輸入local branches

問題只是創建一個本地分支需要永遠,並與他們一起工作也不是那麼有趣。因爲當在本地分支之間移動時不會「恢復」到目標分支狀態時,我必須發出hg purge(用於刪除從分支移動過來的文件),然後是hg update -c(用於恢復從分支移動過來的已修改文件)。 (注意:我嘗試了PK11本地分支擴展分支,它是一個簡單的本地分支創建崩潰的例外)

在一天結束時,這太複雜了。我有什麼選擇?

回答

5

沒有與當地的分支機構工作的幾種方式,除了克隆

  • 書籤
  • 命名分支
  • 匿名分支

你可能有興趣在閱讀一個非常有見地guide to branching in Mercurial。我認爲書籤擴展名是您描述的上下文中最合適的分支方式。

+0

它確實看起來像書籤是要走的路,但是如果我決定我的實驗性東西不好?它現在在我的資源庫中 – Zack 2010-04-08 12:41:45

+2

@Zack你可以啓用** mq **擴展並運行'hg strip'命令來擺脫你不再需要的未發佈的分支。 – 2010-04-08 12:48:00

+0

我不確定任何這些解決問題,因爲它聽起來像更新和重建工作副本是需要很長時間,而不是真的克隆 – 2010-04-08 13:38:49

0

克隆本地回購需要多長時間?

這聽起來像你建立過程可能是我的薄弱環節 - 也許你需要像ccache?這樣您就可以快速克隆和構建

+0

克隆它需要大約5-10分鐘,問題是編譯它並設置其他必要的東西。用incredibuild編譯,總功率達到50ghz需要大約45分鐘。不幸的是'ccache'不適用於視覺工作室 – Zack 2010-04-08 12:51:17

+0

我無法從網絡上知道incredibuild是否有緩存構建的能力,如果它花費那麼長時間我會認爲沒有(也許檢查它的文檔?)。作爲一項工作,你可能會在克隆時複製obj和bin dirs。 – 2010-04-08 13:34:26

+0

就我所知incredibuild無法緩存構建,但我認爲你略有漏洞。複製工作副本對我來說太麻煩了。即使我的構建不需要那麼長時間,還有一些其他需要配置的東西,然後才能開始使用完全不同的工作副本。因此在庫之間共享工作副本的概念以及來回移動的簡單方式似乎是最不痛苦的解決方案。 – Zack 2010-04-08 15:11:22

0

您不能在現有克隆上進行實驗,並且想要對主線進行一些更改時,請在開始實驗前返回並更新到最後一個修訂版?

1

可能不是您想要聽到的答案,但我會說,也許您應該考慮將您的存儲庫分割成更易於管理的區塊:)。例如。那些文檔和那些設計文件是否真的需要包含在同一個存儲庫中,該編輯器工具是否不配有它自己的存儲庫等等。

因爲克隆創建硬鏈接,它幾乎已經儘可能快地獲取;如果克隆已經需要5-10分鐘,則製作文件系統的副本必須更糟糕。 (提示:記住hg clone -U如果你不需要一個工作副本,它會快得多。)

否則,是的,匿名分支書籤是通常的做就地切換的方式。

+0

實際上,我們幾乎沒有存儲庫中的文檔,它主要是我們的源代碼和第三方。我們可以將第三方移動到另一個存儲庫,但mercurial中的subrepos支持是一個正在進行的atm工作,所以我不確定它是否是一個好主意。 – Zack 2010-04-12 17:53:53

+0

據我所知,subrepos功能是一個正在進行的工作,因爲它尚未與Mercurial中的所有命令和擴展完全集成(如果我記得它在哪裏閱讀,我會給你一個報價)。但是,該功能在兼容性方面很穩定。 – 2010-04-13 18:49:07

+0

發現它 - http://stackoverflow.com/questions/2213709/is-the-subprepos-feature-in-mercurial-1-4-x-ready-for-production-use – 2010-04-13 18:50:03