在使用mercurial的功能实现期间重构

时间:2012-03-01 08:52:20

标签: git mercurial legacy-code

在处理遗留代码时,我需要使用mercurial对我的开发过程提出建议。

当我为遗留项目开发新功能时,我经常需要在功能实现期间重构现有代码的一部分。我的意思是,我没有预料到重构,我需要在进行功能实现之前这样做,因为我将使用重构的代码。

由于我认为即使未实现该功能,重构也很有价值,我希望它本身就是一个变更集,而不是“功能”变更集的一部分。此外,由于我处理遗留代码,因此未经过单元测试,因此我只需要(手动)测试重构,而不需要开发特征代码。

因此,我在处理遗留代码时的当前流程如下:

  1. 处理该功能
  2. 哎呀,我需要重构一些东西,所以
  3. 从我的工作副本的当前状态中提取补丁
  4. 还原更改
  5. 进行重构和测试!
  6. 将变更集提交到mercurial存储库
  7. 重新导入补丁并手动处理冲突
  8. 回到1。
  9. 我的过程中有什么可以用mercurial改进的吗?有没有办法暂时保存工作副本,并在将工作副本中的已保存更改放回时,对冲突进行处理?

    如果没有,git是否比mercurial更能解决这个用例?

4 个答案:

答案 0 :(得分:2)

shelve扩展程序为您执行步骤3,4和7。可以找到详细信息here

如果您正在使用TortoiseHg,它将内置于Repository菜单中的工作台。

答案 1 :(得分:2)

我的小偏差

  • 我无法想象没有MQ的自己的认真发展,所以

3 - 将当前工作保存为MQ-patch

4 - qpop it

...

6 - 在单独的分支中提交

7 - qpush在重构分支之上,解决冲突,qpop

7a - 将重构 - 分支合并到功能分支

7b - qpush in feature-branch,解决冲突

7c - qfinish

答案 2 :(得分:1)

我没有提取补丁,而是提交代码:

  1. 处理该功能
  2. 发现你需要重构一些东西
  3. 提交正在进行的工作
  4. 在提交之前更新修订
  5. 进行重构,测试
  6. 提交重构代码
  7. 与之前提交的正在进行的工作合并
  8. 继续,冲洗,重复
  9. 如果您在步骤3中提交的工作正在运行,则奖励积分:),因为破解代码是重构后恢复工作的不良起点。

答案 3 :(得分:0)

当我遇到这种情况时,我会在一个大块中做所有事情,当我准备好提交时,我会使用qrecord或手动(使用Emacs)分开修补补丁)。