使用Mercurial本地克隆进行分支开发?

时间:2011-12-17 20:42:02

标签: mercurial branch clone local

我是一名前SVN用户,试图找出在hg中进行分支开发的最佳方法。我的项目相当新,目前没有分支机构。我的一个朋友建议制作一个本地克隆的回购。然后在那里工作比使用命名分支更好。

因此,如果我使用此模型,工作流程是:

  • [说原始项目已被克隆到c:\ projects \ sk \ tracker]
  • hg clone https:[repos url] tracker_featurex [将从c:\ projects \ sk发布]
  • 更改为subdir tracker_featurex
  • 按正常情况检查和推送
  • [可选,如何从主回购中提取更改。进入这个?]
  • [最后一步,如何从此克隆中更改回主干线?]

我需要帮助确定此工作流程是否正确以及[]括号中两个步骤的确切命令。

非常感谢任何能提供帮助的人, 佛瑞德

3 个答案:

答案 0 :(得分:3)

我建议你看一下Steve Losh关于Mercurial分支的帖子:http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/

他遍历各种类型的分支(克隆,书签,命名分支,匿名分支)以及为每个分支运行的命令。所有人都有利弊。如果您是唯一的开发人员,则本地克隆是可以的,但是在多个开发人员需要在分支上工作的工作流程中,它们不是很有用。克隆人普遍比命名分支更好的说法是一个神话。您应该找到适合您工作流程的分支模型。

更新

如果您确实想要进行本地克隆,可以使用hg push从新工作区移动更改(假设您有一个Projects文件夹和一个名为test的仓库):

Projects> hg clone test test-new-feature
Projects> cd test-new-feature
Projects/test-new-feature> <do some work>
Projects/test-new-feature> hg commit -m "Work is done."
Projects/test> <Might need a pull/merge here>
Projects/test-new-feature> hg push

如果test回购中有变化,您需要在推送之前拉/合并它们。

您还可以从原始工作区hg pull开始:

Projects> hg clone test test-new-feature
Projects> cd test-new-feature
Projects/test-new-feature> <do some work>
Projects/test-new-feature> hg commit -m "Work is done."
Projects/test-new-feature> cd ../test
Projects/test> hg pull ../test-new-feature

这可能会在test仓库中创建多个头,您需要合并/提交。

Projects/test> hg merge
Projects/test> hg commit -m "Merged in new-feature."

两者都是不错的选择。我可能会建议拉而不是推。与我的主要区别在于合并步骤的位置。我认为从功能回购中拉出来会使历史更具可读性。

答案 1 :(得分:1)

我刚刚向Hg起步,所以请谨慎对待我说的话: - )

指定了分支,但非常明智地使用它们!我在下面使用的方法有一些缺点,但它适用于我当前的环境,这是一个小商店。我不介意永远保存历史,我不关心减少提交次数(但是Mq / record / etc可以解决后一点)。

这就是我在我工作的代码中使用分支的方法:

  1. 默认分支。
    • 这是在构建服务器上构建的。
    • 这应该只有一个头。
    • 这应该始终编译。
    • 这应该始终是完成错误/功能的“尽力而为”。
  2. “Workbench”分支。
    • 这可以有多个头。
    • 鼓励匿名分支。用于“命名”活动匿名分支的共享书签。
    • 状态应该几乎总是可编辑的,但这不是必需的。
    • 代表“正在进行的工作”。
  3. 好的,这就是我的流程可能如下所示:(我已经排除了拉/推/合并 - 他们的步骤)。

    1. 我收到了错误报告。
    2. 我切换到“workbench”提示(或任何适当的修订)。
    3. 我修复了这个bug,可能会多次提交。 (我真的应该学会使用队列或记录等)。
    4. (如果我在上述过程中被打断,例如必须处理不同的错误,或者我在旁边跟踪,我会在#2之上创建一个新的头,或者在适当的时候。我可以给出当前的匿名分支提示带有书签的名称,或者我可能不会。)
    5. 完成后,我将相关的分支/更改合并为“默认”,希望构建服务器仍然爱我: - )
    6. 我认为最好的办法是忘记SVN中的分支如何工作。他们根本不喜欢命名的分支,任何说不然的人都会抓住他们都有“名字”而不是更多的事实。 Hg中的每个分支都是“命名分支”的一部分(即,具有与之关联的名称,无论是“默认”还是“工作台”或其他)。但是除了组织之外没关系:分支是分支如果它指的是匿名分支的“提示”或者无关紧要命名分支中唯一的头部(实际上是匿名分支本身)的提示。

      尝试一些事情,使用最有效的方法:)

答案 2 :(得分:1)

  

制作回购的本地克隆。然后在那里工作比使用命名分支更好。

过于戏剧性和雄心勃勃的共同声明。当您按功能克隆时,每个repo只有一个分支(名为分支),但仅此而已(实际上,简要说来)。

功能完成后,您必须“推送到父级”|“从克隆拉”才能返回更改。在这个阶段,如果在克隆之后在父回购中完成了一些工作,将出现匿名分支(+1头)并且合并是必须(与在一个回购中的命名brach中的工作相同),但是,它命名为brach可以稍后告诉 fast (你使用好名字,不是吗?),匿名分支几乎没有任何其他技巧(书签,fe)。我的回购下面的一部分作为克隆中的工作的例子,中间拉动和必须合并后拉/(抱歉,俄罗斯提交消息)和甚至我不记得现在,为什么我有克隆回购社论 - 也许我只是玩Clones-Workflow

Cloned repos in action