使用Mercurial,通常的做法是在同一个项目中创建2或3个克隆作为备用?

使用Mercurial,通常的做法是在同一个项目中创建2或3个克隆作为备用?,mercurial,dvcs,Mercurial,Dvcs,我听说,如果我们正在开发一个功能,然后我们需要快速修复一些东西,我们可以制作一个临时克隆,然后修复错误,然后推到中央回购 首先,临时回购协议是从中央回购协议克隆而来,还是从我们的本地回购协议克隆而来 另外,将2个或3个repo从中央repo克隆到硬盘驱动器是否好,因此,如果我们正在使用本地repo 1开发功能,并且需要快速修复错误,那么我们可以转到本地repo 2,执行hg pull,hg up,并修复错误,和hg push,并在不影响本地回购1的情况下修复bug 因此,我们将始终保留本地rep

我听说,如果我们正在开发一个功能,然后我们需要快速修复一些东西,我们可以制作一个临时克隆,然后修复错误,然后推到中央回购

首先,临时回购协议是从中央回购协议克隆而来,还是从我们的本地回购协议克隆而来

另外,将2个或3个repo从中央repo克隆到硬盘驱动器是否好,因此,如果我们正在使用本地repo 1开发功能,并且需要快速修复错误,那么我们可以转到本地repo 2,执行
hg pull
hg up
,并修复错误,和
hg push
,并在不影响本地回购1的情况下修复bug

因此,我们将始终保留本地repo 1、2、3,以便将它们作为备用,而无需每次创建一个新的临时克隆,这可能会非常耗时


更新:我认为答案中建议的做法是:仅从中央回购克隆到本地回购一次(并将此本地回购称为“主回购”),然后“按需”从本地回购克隆,修复tmp回购中的紧急错误,并直接从tmp回购推回到中央远程回购?然而,不是说在开发过程中,我们应该经常提交(甚至在功能完全完成并且没有bug之前),所以如果我们从本地repo克隆到tmp repo,克隆不也会包括那些提交的文件吗?如果紧急修复需要修改本地repo中处于“中间”状态(在开发过程中)的文件,该怎么办?

我的做法是对中央存储库进行“主”克隆,然后针对我正在处理的每个功能或错误修复,克隆“主”。当我完成一个功能时,我会把它推回“主”,然后当我有信心时,我会推回中央reo


以下是一些

我的做法是对中央存储库进行“主”克隆,然后针对我正在处理的每个功能或错误修复,我克隆“主”版本。当我完成一个功能时,我会把它推回“主”,然后当我有信心时,我会推回中央reo


以下是一些

答案实际上取决于将变更集推送到主回购的成本

如果您的主回购很少(或没有)质量门,那么推动变更集对您和整个团队来说都很便宜。在这种情况下,您可以选择动态克隆主repo,执行快速修复并将其向上推,以便尽快将其传递给团队的其他成员和您的自动构建(假设您有CI集)


如果您的主回购有一套复杂的质量关卡(预推伙伴测试/验证、自动集成回归、日常构建和自动化等),那么对主回购进行任何更改对您和您的团队来说都是非常昂贵的。在这种情况下,您应该考虑克隆您的主要本地回购,进行修复,并将其推回到您的其他更改中,以便在返还主回购之前批量完成您的工作。

< P>答案实际上取决于将变更集推到主回购的代价有多大。< /P> 如果您的主回购很少(或没有)质量门,那么推动变更集对您和整个团队来说都很便宜。在这种情况下,您可以选择动态克隆主repo,执行快速修复并将其向上推,以便尽快将其传递给团队的其他成员和您的自动构建(假设您有CI集)


如果您的主回购有一套复杂的质量关卡(预推伙伴测试/验证、自动集成回归、日常构建和自动化等),那么对主回购进行任何更改对您和您的团队来说都是非常昂贵的。在这种情况下,您应该考虑克隆您的主要本地回购,进行修复,并将其推回与其他更改合并,以便在返还主回购之前批量完成您的工作。

< P>我会疯狂地试图跟踪多个本地克隆的状态。按需克隆是一条道路。如果克隆速度非常慢,您有两种选择:

  • 如果速度慢是由于网络连接造成的,则可以设置一个本地克隆,该克隆自动镜像远程repo,并在远程repo获得更改集时立即更新

  • 如果这种缓慢是Mercurial固有的,那么也许您应该重新考虑Mercurial是否在版本控制系统中提供了您所需要的


如果我想跟踪多个本地克隆的状态,我会发疯的。按需克隆是一条道路。如果克隆速度非常慢,您有两种选择:

  • 如果速度慢是由于网络连接造成的,则可以设置一个本地克隆,该克隆自动镜像远程repo,并在远程repo获得更改集时立即更新

  • 如果这种缓慢是Mercurial固有的,那么也许您应该重新考虑Mercurial是否在版本控制系统中提供了您所需要的


只能从主回购中克隆一次。然后在启动新功能时按需本地克隆。将克隆的克隆直接推回到中央回购。从本质上说,我的工作流程就像一个圆圈

远程主机--(克隆/拉)-->本地从未修改过的克隆--(克隆/拉)-->本地修改过的克隆--(推)-->远程主机

这里的优点是,克隆您自己的本地克隆应该几乎是即时的。在现代文件系统中,mercurial对存储库文件使用硬链接,并且仅在发生更改时才断开它们,因此第二个repo克隆(来自本地源)只占用工作文件的空间

当从远程主机创建我的本地从未修改过的克隆时,我使用
clone-U
来避免创建工作副本,因此我不想在那里工作。创建新的本地克隆
@ (under development)
|
| @ (fixed a bug)
|/
|
o (last good commit)
|