使用VCS时格式化代码是一件坏事吗?


24

在承诺确保正确完成之前,几乎总是格式化我的代码。我团队中的大多数人都不在乎,也不总是总是正确地格式化他们的代码(次要的事情不会影响代码,但是会在尝试维护代码时影响可读性)。

我最近安装了具有选项“保存时格式化”的VS电动工具,并对以前未格式化的文件进行了更改。开发副总裁只是来找我,并谴责我进行格式化,因为它在合并工具中显示为几乎整个文件都被更改了,而不是一两行(所以他看不到我很容易地修改了什么),并且告诉我以后禁用保存格式。尽管我了解这种担忧,但是我发现有时很难对未格式化的代码进行分类,而IMO应该始终始终对其进行正确格式化。请注意,我不仅随心所欲地重新格式化,而且在编写代码时,我将使用电动工具或按key命令设置文本格式以使其易于阅读,并且在SVN中显示为修改。

所以我问,总是格式化代码实际上是一件坏事吗?他的担忧是否比确保代码可读性更有效?


8
他是对的,所以为什么不让所有团队也使用保存时格式化工具,那么所有人都会得到格式清晰,易于阅读且易于查看提交差异的代码。
gbjbaanb

12
大多数优秀的文件比较工具都具有针对“不重要的差异”或“忽略空白”的过滤器。有些工具(例如“超越比较”)附带了预先构建的特定语言的过滤器。如果有的话,请利用它来发挥自己的优势。
Michael K

7
代码的格式与所做的更改一样重要。在团队中时,可读性必须是最高优先级之一。您的副总裁应该知道这一点并对此予以关注。
埃德加·冈萨雷斯

@埃德加:+1。副总裁太挑剔了。首先是可读性...而空格忽略选项意味着这没什么大不了的。而且这也意味着存在更大的问题,因为团队的其他成员不在乎。副总裁应对此更加关注。
quick_now 2011年

Answers:


41

首先,您的团队需要选择一种格式约定并坚持使用。您需要达成协议并让每个人都遵守它,这样您才不会有人为事情的样子而战。这不应该只是您自己做的事情。

至于你真正的问题。格式化代码不是一件坏事。不好的是在与代码更改相同的提交中进行了主要的格式更改。当您的团队就应如何格式化内容达成共识时,请遍历代码并格式化所有内容。自行检查。提交消息将使您清楚地知道更改只是空白而不起作用。然后,当您需要进行功能更改时,它们处于不同的提交中,因此可以清楚地看到它们。


如果您想比较多个修订版本之间的更改,它仍然无济于事,但是它比代码更改+格式更改要好一圈。当然,这个答案也适用于重构。
gbjbaanb

1
+1:除此之外,最好使用Stylecop之类的工具或其他可以自动设置格式并执行样式的工具。然后,在所有团队成员之间同步设置,以便每个人的格式都保持一致,并且您不必记住什么是“正确的”格式规则。
Ryan Hayes

3
如果OP因尝试格式化一个文档而受到谴责,那么有些事情告诉我他将无法建议使用StyleCop。
韦恩·莫利纳

3
@gbjbaanb:是的。这就是为什么最好一开始就做出此类决定的原因。我现在所在的项目已将Eclipse格式化程序设置检入到存储库中,因此我们知道每个人都具有相同的设置。
unholysampler 2011年

1
@quickly_now:这就是为什么我们的经理人拥有否决权的原因。如果人们不同意,他们可以做出决定。
unholysampler 2011年

29

不,格式化代码非常重要。但是,提交应分为两类:

  1. 装饰性更改 -使代码更具可读性的任何操作。
  2. 其他更改 -影响代码的其他所有内容。

使用提交消息表示仅更改了化妆品。在搜索更重要的修改时,可以轻松地跳过这些内容。


3
此外,在团队之间决定某种格式约定也是一种好习惯。不要不先讨论就格式化别人的代码。
Steven Jeuris 2011年

是的。但是您知道,有时格式化“该死的烂摊子”非常诱人。另外,如果您使用VS并自动格式化某些内容,则尝试将外观更改与功能更改区分开可能会很痛苦。哦,没有人会说您在通过查看提交历史记录来执行非常重要的任务时正在执行某些愚蠢的格式化操作
Dyppl 2011年

10

你们都有观点,但是你们都能得到想要的。首先格式化代码,仅签入该更改。接下来,进行功能更改,并在第二步中进行检查。


3
我认为这是针对您当前情况的最佳解决方案,但您应该与团队讨论。但是,您确实有一个更大的问题,那就是缺少编码标准。
Thomas Owens

2
同意 我想知道OP的环境是否是那些避免使用标准来“快速解决问题”的牛仔场所之一。
韦恩·莫利纳

4

我也正在格式化nit-picker,因此这里有一些提示:

  • 必需的第一步:让团队就一些基本的格式标准达成一致,例如制表符与空格,大括号位置,注释样式等。现在,格式更改不会让所有人感到完全惊奇,也不会在任何脚趾上。

  • 仅在您更改的代码周围清理格式。如果仅更改一项功能,则清理该功能。至少随着时间的流逝,您将获得外观更好的代码。

  • 将主要格式检修作为单独的提交执行,而无需更改其他代码。仅当您不太希望在更改之后与更改之前比较代码时,才应执行这些操作,因为在这样的差异之间进行比较可能很烦人。通常,在对该代码进行重大开发之前,我通常会先进行清理。

  • 获得一个好的差异工具,该工具可以对重大更改和非重大更改进行语言相关的标记。我最喜欢的差异也是Beyond Compare,它表示一种颜色的实际代码更改,而空白/注释仅另一种颜色的差异。

编辑更多提示:

  • 它因语言而异,但是对于大多数真正的代码更改,您应该能够在大型清理之前和之后比较编译后的二进制文件,以确保您不会对其进行处理。

只要您不在二进制文件(或构建信息)中包含VC标签即可。
Vatine 2011年

2

除非进行以下操作,否则您不应该重新设置格式并更改其他人的代码:

  • 您是试图建立团队编码标准的经理
  • 您的经理已要求您清理代码以符合团队编码标准
  • 您正在从团队中的某个开发人员那里清除代码,以遵守团队编码标准。

在所有情况下,您都会注意到我指的是团队编码标准。我坚信团队会采用合理的,商定的编码标准。如果有它们,那么原始开发人员应该回去整理他或她的代码以符合团队标准,您不应该在他们的背后这样做。如果您没有标准(应该这样做),那么您就不应该修改另一位团队成员的代码以遵守自己的理念,尤其是在背后。请记住,您是团队的一部分,虽然编码标准很重要,但团队成员之间的信任和尊重也很重要。


“背后”:这可以追溯到代码所有权(或开发草皮战争)的心理问题。
rwong 2011年

2
“其他人的代码”是一种有趣的说法。我根据公司拥有的代码(由我和我的团队成员共同努力)来编译公司产品。在进行开发时,以任何方式将其固定为标准都不为过。但是,我同意理想的解决方案是使原始开发人员将其清理到标准。
Caleb Huitt-cjhuitt 2011年

@Caleb:如果他们只是拒绝垃圾,那就很难。
quick_now 2011年

我所说的“其他人的代码”不是所有权,而是他们写的东西,并相信他们仍然有责任提供支持。在没有编码标准的情况下,如果我用1,000行代码实现一个类,而您更改了2行以纠正某些行为并重新格式化整个文件,那么打开文件时,我会感到非常惊讶。作为团队的成员,我们不应该相互做到这一点。如果您以完全重新格式化的格式检入该文件,甚至不给我提神,那不是团队友好。
cdkMoose 2011年

在OP的原始讨论中,我读到要成为一个没有编码标准(或执行得不好)的环境,这就是为什么我这样回答。在这种环境下,一个开发人员不应将自己的标准强加给其他开发人员。
cdkMoose 2011年
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.