Version control 代码格式和源代码管理差异
在计算签入版本之间的差异时,哪些源代码管理产品具有忽略空白、大括号等的“差异”功能?我似乎记得Clearcase的diff做到了这一点,但VisualSourceSafe(或者至少是我使用的版本)没有做到 我问的原因可能很典型。团队中四个完全合理的开发人员有四种完全不同的代码格式化方式。签出其他人上次更改的代码后,每个人都会立即运行某种程序或编辑器宏,以自己喜欢的方式格式化内容。他们进行实际的代码更改。他们签入更改。他们去度假。两天后,这个运行了两年的计划失败了。分配给bug的开发人员在不同版本之间进行了一次差异分析,发现了204个差异,其中只有3个差异是有意义的,因为差异算法是蹩脚的 是的,你可以有编码标准。大多数人都觉得他们很可怕。一个人人都可以吃蛋糕的解决方案似乎更可取 ========= 编辑:感谢大家提出的一些好建议 我从中得到的是: (1) 最好是带有插入式diff的源控制系统 (2) 找到具有合适选项的差异 (3) 使用一个好的源代码格式化程序,并确定一个签入标准Version control 代码格式和源代码管理差异,version-control,Version Control,在计算签入版本之间的差异时,哪些源代码管理产品具有忽略空白、大括号等的“差异”功能?我似乎记得Clearcase的diff做到了这一点,但VisualSourceSafe(或者至少是我使用的版本)没有做到 我问的原因可能很典型。团队中四个完全合理的开发人员有四种完全不同的代码格式化方式。签出其他人上次更改的代码后,每个人都会立即运行某种程序或编辑器宏,以自己喜欢的方式格式化内容。他们进行实际的代码更改。他们签入更改。他们去度假。两天后,这个运行了两年的计划失败了。分配给bug的开发人员在不同版本
听起来像个计划。再次感谢。也许您应该选择一种格式,在签入之前运行一些缩进工具,这样每个人都可以签出,根据自己的喜好重新格式化,进行更改,重新格式化为官方标准,然后签入 有几个额外的步骤,但他们在工作时已经使用了缩进工具。可能是一个触发的签入脚本 编辑:这可能也会解决支架问题
(我自己没有尝试过这个解决方案,因此出现了“可能”和“可能”,但我在项目中遇到过同样的问题,尝试通过数百个不相关的更改来解决差异是一件痛苦的事情,这些更改不仅限于空格,还包括格式本身。)Subversion显然支持这一点,无论是最新版本的本机版本,还是使用Gnu diff之类的替代diff。Git都有以下选项:
忽略EOL中空格的更改--忽略下线处的空格
忽略空白量的更改。这将忽略行尾的空白,并考虑一个或多个字符的所有其他序列 空格字符必须相等-b,--忽略空格更改
比较行时忽略空白。这会忽略差异,即使一行有空格,而另一行有空格 没有-w,--忽略所有空格
git diff
将产生正常的输出。超越比较可以做到这一点(以及更多),您可以将其集成到Subversion或Sourcesafe中作为外部diff工具。如中所述,更重要的是将正确的diff工具与您最喜欢的VCS相关联,而不是依赖正确的VCS选项(即使Git确实有一些关于空格的选项,如中提到的,它也不会像人们希望的那样完整)
在这些“忽略”选项上更完整,因为它不仅可以忽略空格,还可以忽略基于给定文件中使用的编程语言的其他“变体”。选择一个(可怕的)编码标准,把它写在一些官方的编码标准文档中,然后继续你的生活,处理空白不是一项有成效的工作
请记住,您是一名专业开发人员,完成项目是您的工作,因为个人风格偏好而更改代码中的任何内容都会损害项目-这不仅会使差异化变得更加困难,如果您的源格式化程序或编译器有bug,还可能导致难以发现的问题(当两个同事开始为套管争吵时,你那别致的diff工具也救不了你)
如果有人不同意使用所选的风格,只要提醒他(或她)编程是一种职业,而不是一种爱好,请参见否,让您的团队保持一致。Clearcase确实可以选择忽略空白差异。