Version control 软件重构的版本控制

Version control 软件重构的版本控制,version-control,refactoring,Version Control,Refactoring,对大规模重构进行版本控制的最佳方法是什么 我典型的编程风格(实际上也是编写文档的风格)是尽可能快地获得一些东西,然后对其进行重构。通常,重构在添加其他功能的同时进行。除了类和函数的标准重构外,函数可能会从一个文件移动到另一个文件,文件会被拆分和合并,或者只是重新排序 目前,我作为一个单独的用户使用版本控制,因此在这个阶段不存在与其他开发人员交互的问题。不过,版本控制给了我两个方面: 备份和恢复到良好版本的能力“以防万一” 回顾历史告诉我项目的进展和思想的流动 我在windows上使用mercur

对大规模重构进行版本控制的最佳方法是什么

我典型的编程风格(实际上也是编写文档的风格)是尽可能快地获得一些东西,然后对其进行重构。通常,重构在添加其他功能的同时进行。除了类和函数的标准重构外,函数可能会从一个文件移动到另一个文件,文件会被拆分和合并,或者只是重新排序

目前,我作为一个单独的用户使用版本控制,因此在这个阶段不存在与其他开发人员交互的问题。不过,版本控制给了我两个方面:

  • 备份和恢复到良好版本的能力“以防万一”
  • 回顾历史告诉我项目的进展和思想的流动
  • 我在windows上使用mercurial,它使用的是Ortoisehg,可以选择帅哥来提交。我提到这一点的原因是,我希望得到关于重构中提交粒度的建议。我是否应该将重构从总是在提交中添加的功能中分离出来


    我已经看过的答案,但它没有回答我的问题。这个问题的重点是与团队的协作。这篇文章的重点是要有一个将来可以理解的历史(假设我没有像某些风投所允许的那样重写历史)。

    我建议将重构与添加功能分开。也许通过交替签入。这是我发现uncrustify后的经历,我会重新格式化源文件,同时修改代码。很难从一次改革中找出真正的变化。现在uncrustify有了自己的专用提交。

    在处理了非常复杂的重构和相当广泛的更改所带来的影响/bug/副作用后,我可以非常强烈地建议您在版本控制中尽可能地将两者分开

    如果存在任何问题,您可以很容易地从与每个阶段相关的标记/标签/版本重新构建代码,并验证这两个阶段中的哪一个引入了问题

    此外,尝试在尽可能小的逻辑完整块中进行重构,并将其作为单独的检查点提交。同样,这简化了对什么原因/什么时候发生故障的调查

    我是否应该将重构从总是在提交中添加的功能中分离出来

    我倾向于经常办理登机手续;每次签入都是重构或新功能。这是一个循环:

  • 重构现有代码(不改变其功能),使其准备好接受新代码
  • 添加新代码(实现附加功能)

  • 我想对你的问题没有一刀切的答案:)
    就个人而言,我更喜欢在我的提交中保持更精细的合理粒度:在您的情况下,我会将操作分为两个阶段:每个阶段独立:

  • 重构(以及提交之后)
  • 新功能(和提交) 最好的做法是单独添加和提交每个项:分解本地化更改中的重构,并逐个提交,然后逐个添加功能,一路上提交


    这会增加一点开销,但通过这种方式,当您回去寻找差异时,很明显,重构和添加新功能都改变了什么。只回滚一个特定的有问题的添加也更容易。

    到目前为止,每个答案都建议您将重构与添加功能分开,我将它们全部删除。您应该独立于源代码管理来执行此操作。马丁·福勒(Martin Fowler)写了一整本书,阐述了不能在功能改变的同时进行重构的概念。您想知道,对于任何更改,代码在更改前是否应该和更改后是否工作相同。正如@Amardeph所指出的,如果通过格式化或重构更改隐藏了功能更改,则很难看到您所做的功能更改,因此很难追踪功能更改引入的bug。我的意思不是阻止你重构,或者推迟重构。一定要经常做。但要与功能变化分开进行。微提交是一条路。

    • 小步走。进行最小的有用更改,测试、提交并重复

    • 一次一种变化。不要在任何时候重构和更改行为 同时

    • 经常提交。带有清晰、详细描述的小改动是非常宝贵的

    • 确保您的自动化测试是安全、可靠和有用的。如果您可以信任您的测试,那么您可以轻松快速地完成上述操作

    • 确保您的测试始终通过


    通常,我会开始研究新功能或bug修复或其他东西,以发现如果我只是这样重构东西,新功能将更容易添加。通常我会放弃(或保存到其他地方)到目前为止所做的更改,重构/测试/提交,然后继续使用新功能。理想情况下,我会花90%的时间进行重构,而每个新功能、错误修复、性能改进等都是简单的单行更改。

    谢谢。这或多或少是我目前的工作方式。知道只有一行或几行的微提交是一种良好的行为是令人放心的。由于您使用的是Mercurial,因此有时为一系列相关的微小提交创建一个新分支,然后将它们合并回父分支是有意义的。2.如果你和一个团队一起工作,你想让他们尽快得到你的改变,反之亦然。良好的测试和微小的承诺有助于实现这一点。