Version control 代码格式和源代码管理差异

Version control 代码格式和源代码管理差异,version-control,Version Control,在计算签入版本之间的差异时,哪些源代码管理产品具有忽略空白、大括号等的“差异”功能?我似乎记得Clearcase的diff做到了这一点,但VisualSourceSafe(或者至少是我使用的版本)没有做到 我问的原因可能很典型。团队中四个完全合理的开发人员有四种完全不同的代码格式化方式。签出其他人上次更改的代码后,每个人都会立即运行某种程序或编辑器宏,以自己喜欢的方式格式化内容。他们进行实际的代码更改。他们签入更改。他们去度假。两天后,这个运行了两年的计划失败了。分配给bug的开发人员在不同版本

在计算签入版本之间的差异时,哪些源代码管理产品具有忽略空白、大括号等的“差异”功能?我似乎记得Clearcase的diff做到了这一点,但VisualSourceSafe(或者至少是我使用的版本)没有做到

我问的原因可能很典型。团队中四个完全合理的开发人员有四种完全不同的代码格式化方式。签出其他人上次更改的代码后,每个人都会立即运行某种程序或编辑器宏,以自己喜欢的方式格式化内容。他们进行实际的代码更改。他们签入更改。他们去度假。两天后,这个运行了两年的计划失败了。分配给bug的开发人员在不同版本之间进行了一次差异分析,发现了204个差异,其中只有3个差异是有意义的,因为差异算法是蹩脚的

是的,你可以有编码标准。大多数人都觉得他们很可怕。一个人人都可以吃蛋糕的解决方案似乎更可取

=========

编辑:感谢大家提出的一些好建议

我从中得到的是:

(1) 最好是带有插入式diff的源控制系统

(2) 找到具有合适选项的差异

(3) 使用一个好的源代码格式化程序,并确定一个签入标准


听起来像个计划。再次感谢。

也许您应该选择一种格式,在签入之前运行一些缩进工具,这样每个人都可以签出,根据自己的喜好重新格式化,进行更改,重新格式化为官方标准,然后签入

有几个额外的步骤,但他们在工作时已经使用了缩进工具。可能是一个触发的签入脚本

编辑:这可能也会解决支架问题


(我自己没有尝试过这个解决方案,因此出现了“可能”和“可能”,但我在项目中遇到过同样的问题,尝试通过数百个不相关的更改来解决差异是一件痛苦的事情,这些更改不仅限于空格,还包括格式本身。)

Subversion显然支持这一点,无论是最新版本的本机版本,还是使用Gnu diff之类的替代diff。

Git都有以下选项:

  • --忽略下线处的空格

    忽略EOL中空格的更改

  • -b,--忽略空格更改

    忽略空白量的更改。这将忽略行尾的空白,并考虑一个或多个字符的所有其他序列 空格字符必须相等

  • -w,--忽略所有空格

    比较行时忽略空白。这会忽略差异,即使一行有空格,而另一行有空格 没有

我不确定是否可以使用Git的diff忽略大括号更改

如果是C/C++代码,则可以定义规则,然后使用将源代码的大括号样式转换为所需的大括号样式。然后,
git diff
将产生正常的输出。

超越比较可以做到这一点(以及更多),您可以将其集成到Subversion或Sourcesafe中作为外部diff工具。

如中所述,更重要的是将正确的diff工具与您最喜欢的VCS相关联,而不是依赖正确的VCS选项(即使Git确实有一些关于空格的选项,如中提到的,它也不会像人们希望的那样完整)

在这些“忽略”选项上更完整,因为它不仅可以忽略空格,还可以忽略基于给定文件中使用的编程语言的其他“变体”。

选择一个(可怕的)编码标准,把它写在一些官方的编码标准文档中,然后继续你的生活,处理空白不是一项有成效的工作

请记住,您是一名专业开发人员,完成项目是您的工作,因为个人风格偏好而更改代码中的任何内容都会损害项目-这不仅会使差异化变得更加困难,如果您的源格式化程序或编译器有bug,还可能导致难以发现的问题(当两个同事开始为套管争吵时,你那别致的diff工具也救不了你)


如果有人不同意使用所选的风格,只要提醒他(或她)编程是一种职业,而不是一种爱好,请参见

否,让您的团队保持一致。Clearcase确实可以选择忽略空白差异。