Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Version control 管理Mercurial中的代码:如何还原单个文件;标签";并且能够维护它_Version Control_Mercurial_Branch_Release Management_Branching And Merging - Fatal编程技术网

Version control 管理Mercurial中的代码:如何还原单个文件;标签";并且能够维护它

Version control 管理Mercurial中的代码:如何还原单个文件;标签";并且能够维护它,version-control,mercurial,branch,release-management,branching-and-merging,Version Control,Mercurial,Branch,Release Management,Branching And Merging,更新:我们最终使用了一个非常类似的过程(感谢您的链接)。我们将存储库调整到一个默认值稳定的状态(并且具有与生产环境相同的代码),我们有一个开发分支,功能分支用于新内容,并使用发布分支用于发布。一切似乎都很顺利 背景故事 我们的团队最近已经从使用SVN(使用ToroiseSVN Windows客户端)切换到Mercurial(使用TortoiseHg Windows客户端)进行版本控制。我们已经成功地导出了SVN存储库并将其导入Mercurial存储库 我们现在有了一个Mercurial存储库,可

更新:我们最终使用了一个非常类似的过程(感谢您的链接)。我们将存储库调整到一个默认值稳定的状态(并且具有与生产环境相同的代码),我们有一个开发分支,功能分支用于新内容,并使用发布分支用于发布。一切似乎都很顺利

背景故事 我们的团队最近已经从使用SVN(使用ToroiseSVN Windows客户端)切换到Mercurial(使用TortoiseHg Windows客户端)进行版本控制。我们已经成功地导出了SVN存储库并将其导入Mercurial存储库

我们现在有了一个Mercurial存储库,可以在其中查看整个修订历史(Mercurial中的变更集)

我们过去是怎么做的 过去的生活比较简单;我们的开发过程并不像现在这样是多流的。主干用于保存所有代码,甚至是仍在进行中的更改(只要它没有破坏主干)。当涉及到使用SVN管理发布时,我们将签出主干(其中包含所有代码),恢复我们不希望作为发布一部分的单个更改,并为其创建一个标记

Cherry选择我们想要的SVN代码很容易。修复以前版本的Bug并确保它是主干的一部分也很简单

我们现在在做什么 在Mercurial中,我们需要能够获得“主干”的快照(Mercurial中的默认设置),并恢复单个更改。我们可以使用hg revert来实现这一点

为了对此进行快照,我们创建了一个“命名分支”——现在我们称之为Build-4.0.1

出现挑战的地方 在Build-4.0.1中发现错误时,默认情况下开发将继续正常进行。让我们假设bug在其中一个恢复的文件中。我们从Build-4.0.1的分支更改代码,创建一个新的“命名分支”(Build-4.0.2),并希望将其合并回默认值,而无需将还原的代码推到新代码的顶部。我们如何才能做到这一点

或者,是否有更好的工作流来管理Mercurial中的版本和代码?我很喜欢这个样子,尽管我不确定我们如何从现在的状态过渡到现在的状态(默认为飞行中的东西)


注意:我已经看过了,但还没有使用它-它可能是这个挑战的解决方案的一部分吗?

首先,您使用revert对我来说似乎很奇怪。通常,它用于将对工作副本所做的修改恢复到存储库的版本

将工作副本向后移动到某个点的常用方法是更新:

hg update -r 1234
从那里,您可以标记、修改、提交等

要向后合并,只需将发布分支合并到默认分支。它将像一个符咒一样工作,除非它是一个不同/旧的版本

移植工作很好,但做一些与合并不同的事情:它将变更集作为一个“差异”,并将其作为一个新的修改应用

要管理您的发布,您可以查看以下其他答案(由我提供):

我们使用的是一个clone/main分支,它拥有最稳定的版本,在某些时候发布。在这个clone:branch上,我们可以修复关键的bug(热修复)。同时,我们使用开发人员克隆/分支进行开发。热修复程序在从stable到dev完成后立即合并。当前开发完成后,我们将在stable/default上合并dev

这很好理解:)


祝你好运

委婉地说,经历所有更改并删除您不想要的更改并不是创建发行版的常见方式。SVN手册中的部分建议了一些更流行的工作流程:

  • 释放分支:从不稳定的主干创建释放分支,修复bug以稳定它,在分支处于维护模式时在它们之间修复cherry pick bug
  • 功能分支:只需合并所需的功能分支,即可保持主干稳定并准备发布
第二个可能最适合这里,因为它为您提供了一个放置实验性或风险性更改的位置,直到您对它们有信心为止-这些更改是您在旧工作流中发布之前应该恢复的更改


这两种分支模式都应该从细微到多变。如果您选择第一种方法,请注意mercurial(自2.0以来)现在有一个graft命令,您不再需要移植扩展。

可能值得一看您链接到的文章()。@adpd:是的,这个过程并没有那么原始,但方案/图像值千言万语:)享受mercurial!您使用Mercurial的方式毫无意义,下面的答案为您提供了如何使用Mercurial的良好信息。是的,这意味着学习新的开发方法,但DVCS与CVS有着根本的不同,尽快接受这一点是DVCS获得成功的关键。祝贺你放弃了CVS并利用了DVCS,你的开发故事将变得更具表现力,坚持与Mercurial的合理分支策略。Chris,我完全同意关于我们目前使用Mercurial的方式不合理的说法;因此,人们开始寻求更好的方法。neuro链接到的“模式”是我们目前正在试验的方法——它似乎满足了我们理论上的所有需求。