我是Subversion的用户,我想我现在已经全身心投入其中。所以当然现在我们正在考虑转向Mercurial,我需要重新开始。
在我们的单一存储库中,我们有典型的branches
,tags
,trunk
布局。当我想创建一个功能分支时我:
trunk
复制到branches/Features/[FeatureName]
。branches/Features/[FeatureName]
签出新的工作副本。trunk
,解决冲突并提交。trunk
,然后将功能分支“重新整合”为主干。(请注意,此过程已简化,因为它没有考虑发布候选分支等)。
所以我对Mercurial中如何满足相同要求(即功能分支而不是在主干上工作)有疑问:
答案 0 :(得分:9)
答案 1 :(得分:7)
在Mercurial,仍然是一个分支 存储库,还是全新的 本地存储库?
颠覆工作方式的等价物是mercurial中multiple heads的存储库。然而,这不是惯用的做事方式。通常,在给定的存储库中只有一个头,因此每个分支都有单独的存储库。
如果我们每个人都有一份整体的副本 存储库,这是否意味着我们都有 彼此的各种功能的副本 分支(这是很多数据 转移)?
是的,如果您查看本地存储库头部的历史记录,那么您将能够看到所有已合并的功能分支。但是,mercurial存储库非常节省空间。例如,我已经完成了hg clone https://www.mercurial-scm.org/repo/hg
以获取mercurial本身的源,并且在NTFS文件系统上只有34.3 MB(与source code download相比,这是1.8 MB)。如果您的文件系统支持硬链接,Mercurial也会使用硬链接,因此如果您将存储库克隆到同一磁盘上的另一个位置,则几乎没有开销。
我知道Mercurial是DCVS,但确实如此 这意味着我们推动/拉动变化 彼此直接,而不是通过 服务器上的对等存储库?
一种工作方式确实是让每个开发人员公开一个公共存储库,在其中推送自己的更改。然后所有其他开发人员都可以获得他们想要的东西。
但是,通常您将拥有一个或多个“祝福”存储库,其中集成了所有更改。然后,所有开发人员只需要从受祝福的存储库中提取。即使你没有明确拥有这样一个受祝福的存储库,我想人们会自动组织这样的自己,例如所有人都是从首席开发人员处获取的。
答案 2 :(得分:5)
史蒂夫·罗什(Steve Losh)关于在上面关联的mercurial分支的文章太棒了。我还讨论了分支以及DAG如何在a presentation I gave a couple of months ago on mercurial that's out on slideshare中工作。相关幻灯片从幻灯片#43开始。
我认为理解所有提交到同一存储库的提交存储在DAG(有向无环图)中,并带有一些简单的规则,这有助于揭开正在发生的事情的神秘面纱。
命名分支实际上只是提交中的元数据标签,但实际上与将某些elses工作合并到存储库时发生的匿名分支没有任何不同,或者如果您返回到早期版本然后进行提交有一个新的头(你可以稍后合并)。