代码格式很重要。甚至缩进也很重要。一致性比微小的改进更为重要。但是,项目通常从第一天起就没有清晰,完整,可验证和强制的样式指南,并且重大改进可能会在任何一天出现。也许你发现
SELECT id, name, address
FROM persons JOIN addresses ON persons.id = addresses.person_id;
可以更好地写成/比
SELECT persons.id,
persons.name,
addresses.address
FROM persons
JOIN addresses ON persons.id = addresses.person_id;
同时在查询中添加更多列。也许这是代码中所有四个查询中最复杂的查询,或者成千上万个简单查询。无论过渡有多困难,您都认为值得。但是,如何跟踪主要格式更改中的代码更改?您可以放弃并说“这是我们再次开始的地方”,也可以重新格式化整个存储库历史记录中的所有查询。
如果您正在使用像Git这样的分布式版本控制系统,则可以还原到有史以来的第一次提交,然后从那里重新格式化为当前状态。但这是一项艰巨的工作,其他所有人都必须在工作进行期间暂停工作(或为所有合并的母亲做好准备)。有没有更好的方法可以更改历史记录,从而获得最好的结果:
- 所有提交中的样式相同
- 最少的合并工作
?
需要澄清的是,这与启动项目时的最佳实践无关,而是在大型重构被视为Good Thing™却又想获得可追溯的历史时应该怎么做?如果这是确保您的版本始终保持相同工作的唯一方法,则永远不要重写历史记录,这是伟大的,但是对于开发人员而言,全新重写的好处是什么?特别是如果您有方法(测试,语法定义或编译后的相同二进制文件)可以确保重写后的版本与原始版本完全一样?