2010-04-16 168 views
4

我剛剛從svn切換到mercurial,並閱讀了一些關於它的教程。
我仍然有一些混淆,我希望你能幫我理清。
我不知道我是否理解了mercurial repo右側的文件夾結構。
在svn的我通常有這些文件夾:mercurial repo中的文件夾結構?

的svn:

branches (branches/chat, branches/new_login etc) 
tags (version1.0, version2.0 etc) 
sandbox 
trunk 

如果一個分支實際上是善變的原/中央回購的另一個克隆?
看來,當我閱讀手冊。

而且標籤只是一個有名稱的標識符,但是您應該在創建標籤時克隆原始/中央回購?

沙盒怎麼樣?應該是另一個克隆嗎?

所以基本上你只是在回購所有的文件夾/文件,你會在中繼文件夾中?

善變:

central repo: projects folders/files (not in any parentfolder) 
tag repo: cloned from central repo at a given moment for release 
    (version1.0, version2.0 etc) 
branch repo: cloned from central repo for adding features (chat, new_login etc) 
sandbox repo: experimental repo (could be pushed to central repo, or just deleted) 

這是正確的?

回答

4

要記住的主要問題是分支不再是像Mercurial(或Git)這樣的DVCS中的目錄。

水銀提供4種分支型號(細節在此SO questionthis article):

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

ConvertExtension使用由默認命名分支(但您可以選擇使用克隆或t agd分支)

嘗試一些SVN to Mercurial Conversion cases,看看什麼對你的情況最好。
一旦SVN回購已進口的一個水銀回購(與它命名分支),你仍然可以克隆你在一個單獨的回購需要的任何分支:

hg clone -r <branch-head-rev> <repo> <new-repo> 
4

我並不完全確定自己正在理解您的所有問題,我認爲您只是對某些術語感到困惑,但我會對他們進行刺探。

一個分支實際上應該是另一個原生/中央回購的克隆嗎?

是的,分支只是一個克隆,開始於一個特定的版本。如果您在一個克隆中做出不同的更改,那麼基本上與「克隆」相比,它變成了「分支」。

而標籤只是一個命名的標識符,但是您應該在任何時候想要創建標籤時克隆原始/中央回購?

標籤只是一種更加人性化的方式來記住特定的版本,這是版本庫歷史中某個特定的版本。您可以將某些內容標記爲「0.8版本」,以便您不必記住您在修訂版本427中發佈了0.8版本。除非需要分支(例如,將集成對於運行0.8版的用戶來說,修補程序並不會釋放你的中繼代碼)。如果有必要,您可以隨時從標籤中創建克隆,您在創建時不必這樣做。

沙盒怎麼樣?應該是另一個克隆嗎?

假設「沙箱」只是「某處我玩耍」,那只是一個分支。所以最初,這是一個克隆,是的。

所以基本上你只是在回購所有的文件夾/文件,你會在中繼文件夾中?

是的,所有這些其他的分支,「沙箱」等概念都由Mercurial的功能處理,而不是像你必須在顛覆中使用的文件。

您是否看過The Mercurial Book?我發現它非常有助於理解概念。

+0

是的,我已經很快瀏覽過它。他們談到了很多關於我覺得很有幫助的不同命令,但是我傾向於使用GUI來處理合並,克隆等等。現在我使用Netbeans和Bitbucket,它的工作原理非常棒! – 2010-04-17 10:23:54

1

中有分支的四種模式mercurial:匿名,克隆,命名和(帶擴展名)書籤。

根據你想要做什麼(開始並行功能開發,在沙箱中試驗等),你會選擇一個或另一個。 Mercurial本身並不強加任何一種方法或工作流程,只是提供了供您選擇的機制。

這個article說明它好多了。它使我更清楚。