我刚刚从svn切换到mercurial并阅读了一些关于它的教程
我还有一些困惑,希望你能帮助我理清。
我想知道我是否理解了mercurial repo中的文件夹结构
在svn repo中,我通常有这些文件夹:
的svn:
branches (branches/chat, branches/new_login etc)
tags (version1.0, version2.0 etc)
sandbox
trunk
分支实际上应该是mercurial中原始/中央仓库的另一个克隆吗? 当我阅读手册时,似乎就是这样。
标签只是一个命名标识符,但是你想在创建标签时克隆原始/中央仓库?
沙箱怎么样?那应该是另一个克隆吗?
所以基本上你只需要在回购中拥有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)
这是正确的吗?
答案 0 :(得分:4)
我不完全确定我理解你的所有问题,我认为你只是对某些术语感到困惑,但我会对它们进行一些刺激。
分支实际上应该是mercurial中原始/中央仓库的另一个克隆吗?
是的,分支只是一个从特定版本开始的克隆。如果您在一个克隆中进行不同的更改,那么基本上它与“克隆”相比变为“分支”。
标签只是一个命名标识符,但是你想在创建标签时克隆原始/中央仓库?
标记只是一种更人性化的方式来记住特定修订版本,即存储库历史记录中的某个点。您可以将某些内容标记为“版本0.8”,这样您就不必记住在版本427中发布了0.8版本。没有理由将克隆作为其中的一部分,除非您需要一个分支(例如,集成一个分支)运行版本0.8的人的错误修复,也没有向他们发布主干代码)。如果有必要,您可以随后从标记中创建克隆,在创建时不必执行此操作。
沙箱怎么样?那应该是另一个克隆吗?
假设“沙盒”只是“让我玩的地方”,那只是一个分支。所以最初,它是一个克隆,是的。
所以基本上你只需要在回购中拥有trunk文件夹中的所有文件夹/文件?
是的,分支的所有其他概念,“沙盒”等都是由Mercurial的功能处理的,而不是像你在subversion中使用的那样的文件。
您是否阅读过The Mercurial Book?我发现它非常有助于理解这些概念。
答案 1 :(得分:4)
要记住的主要事情是分支不再是像Mercurial(或Git)这样的DVCS中的目录。
Mercurial提供4个分支模型(此SO question和this article中的详细信息):
ConvertExtension默认使用名为branch(但您可以选择使用克隆或标记的分支)
尝试一些SVN to Mercurial Conversion cases,看看哪种情况最适合你的情况 一旦在一个 Mercurial仓库中导入了SVN仓库(其中包含了命名分支),您仍然可以在单独的仓库中克隆您需要的任何分支:
hg clone -r <branch-head-rev> <repo> <new-repo>
答案 2 :(得分:1)
mercurial有四种分支模式:匿名,克隆,命名和(带扩展名)书签。
根据您要执行的操作(启动并行功能开发,在沙箱中进行试验等),您可以选择其中一个。 Mercurial本身不会强加任何一种方法或工作流程,只提供您可供选择的机制。
这article解释得更好。它让我更清楚。