重写的版本控制实践


29

我们用语言X开发了产品(原型)P_OLD,现在我们正从头开始用语言Y将其重写为P_NEW。

由于P_NEW和P_OLD是同一产品:

P_NEW应该只是旧的P_OLD分支还是应该是它自己的存储库?

从版本控制角度来看,处理如此大的更改的通常方法是什么?



@gnat感谢您的链接。这很有趣,但主要区别在于对我们来说,它是同一产品,只是经过完全重新设计。旧项目基本上是一个(丑陋的)原型。
2015年

Answers:


46

几乎可以肯定,您需要一个新的存储库。

存储库的目的是:

  • 跟踪历史和更改,以便您可以轻松比较它们
  • 管理分支和合并,而不仅仅是通过电子邮件发送补丁文件并将其手动应用于工作目录

如果您要完全从头重写项目,那么将重写放在同一存储库中是没有意义的。您将无法应用以旧语言编写的补丁程序进行重写。切换回购协议不会使旧的回购协议中的历史消失,而且如果您进行切换,您将不会有任何奇怪的过渡阶段,在回购协议中您会遇到两种语言。

我什至会考虑在更改语言时保留资源库的唯一原因是:a)语言是如此相似,以至于代码通常可以在不进行任何更改的情况下从一种复制粘贴到另一种,或者b)您有一个项目,其中版本控制中的大多数功能内容都类似于模板,保留的模板语言,而您要更改的核心语言则逐行翻译为另一种语言(即使如此,前提是您知道您将需要在迁移期间继续迭代模板)。


2
根据过渡的时间长短,可以将以前的版本保持活动状态并方便地进行比较很有用。您甚至可能在旧系统中引入测试用例,以帮助您验证结果是否与新系统匹配。
埃里克

16

我总是自己重写新的存储库。这样,构建,测试和部署都可以独立完成。

当您用另一种语言重写项目时,在诸如构建,运行测试和部署之类的任何任务中,通常很少有相似之处。如果将它们隔离在自己的存储库中,则可以避免痛苦。然后,您只需要担心如何管理用户以及从旧系统到新系统的数据转换的痛苦。那总是一件有趣的事。:)


5

如果您的系统具有足够的模块化和链接兼容性,则可以从单个存储库和构建中受益。例如,如果用C ++重写C系统,则C ++代码可以调用现有功能并逐步替换它。

但是,即使在这种情况下,也可能有人主张启动一个新的回购协议,在该回购协议中按要求提取相关的旧代码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.