我是一名前SVN用户,试图找出在hg中进行分支开发的最佳方法。我的项目相当新,目前没有分支机构。我的一个朋友建议制作一个本地克隆的回购。然后在那里工作比使用命名分支更好。
因此,如果我使用此模型,工作流程是:
我需要帮助确定此工作流程是否正确以及[]括号中两个步骤的确切命令。
非常感谢任何能提供帮助的人, 佛瑞德
答案 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可以解决后一点)。
这就是我在我工作的代码中使用分支的方法:
好的,这就是我的流程可能如下所示:(我已经排除了拉/推/合并 - 他们的步骤)。
我认为最好的办法是忘记SVN中的分支如何工作。他们根本不喜欢命名的分支,任何说不然的人都会抓住他们都有“名字”而不是更多的事实。 Hg中的每个分支都是“命名分支”的一部分(即,具有与之关联的名称,无论是“默认”还是“工作台”或其他)。但是除了组织之外没关系:分支是分支如果它指的是匿名分支的“提示”或者无关紧要命名分支中唯一的头部(实际上是匿名分支本身)的提示。
尝试一些事情,使用最有效的方法:)
答案 2 :(得分:1)
制作回购的本地克隆。然后在那里工作比使用命名分支更好。
过于戏剧性和雄心勃勃的共同声明。当您按功能克隆时,每个repo只有一个分支(名为分支),但仅此而已(实际上,简要说来)。
功能完成后,您必须“推送到父级”|“从克隆拉”才能返回更改。在这个阶段,如果在克隆之后在父回购中完成了一些工作,将出现匿名分支(+1头)并且合并是必须(与在一个回购中的命名brach中的工作相同),但是,它命名为brach可以稍后告诉 fast (你使用好名字,不是吗?),匿名分支几乎没有任何其他技巧(书签,fe)。我的回购下面的一部分作为克隆中的工作的例子,中间拉动和必须合并后拉/(抱歉,俄罗斯提交消息)和甚至我不记得现在,为什么我有克隆回购社论 - 也许我只是玩Clones-Workflow