确保在git提交时遵循编码风格

10

在我的公司中,我建立了一个持续集成测试,并且当有人将代码推到服务器上时运行这些测试。

现在我想检查代码是否符合我们的基本编码规则,第一条规则是“在你的代码上运行mogrify!”

是否有什么东西可以自动进行此项检查?分析的输出可以保存在文件或其他地方。

谢谢


我相信你可以使用git钩子来做一些事情,但我不知道足够的知识来提供答案。或者,您可以使用像EditorConfig这样的实用程序强制执行编码风格,它可以插入许多代码编辑器中,并且非常简单易用:http://editorconfig.org/ - Darragh Enright
phpcs 可以帮助您检查“基本编码规则”,如果您使用标准支持,例如:MySource、PEAR、PHPCS、PSR1、PSR2、Squiz 和 Zend。 - Fwolf
3个回答

6
在进行git提交时,您可以要求用户设置一个pre-commit钩子来运行测试并阻止提交。
但是,您无法保证用户实际遵循该策略(或使用git commit --no-verify绕过它)。
因此,您应该在中央仓库(所有开发人员都在推送的仓库)中放置一个pre-receive钩子,以便在检测到工具未正确运行时拒绝推送。
请参见Git Hooks
关于工具,uncrustify 可以被设置为 pre-commit hook,但可能会有点慢。 但是它以前已经 被这样使用过
替代方案在 此线程中列出,但似乎相当过时。

您的想法在服务器端应用可能有效,作为 pre-receive 钩子(意味着如果您检测到推送的代码与接收到的代码之间存在差异并且未格式化,则会拒绝推送)。


谢谢,我知道Git钩子,我使用一个钩子来构建和运行我的单元测试。我正在寻找一种工具来验证代码是否符合我们的规则。我的第一个想法是在源代码上运行uncrustify,并将结果与原始文件进行比较,如果有差异,则意味着开发人员在提交之前没有运行uncrustify。 - TheObjCGuy
@TheObjCGuy 你想检查哪种语言?Objective-C吗? - VonC
@TheObjCGuy 我已经编辑了我的回答。 - VonC

1
我建议使用类似lint的工具,例如对于ObjectC,您可以使用oclint,但基本上任何能够输出到文本文件或stdout的编码规范验证工具 - 随后您可以使用python脚本(因为python是钩子的默认语言之一),或几乎任何可以解析该输出的东西,并与给定的基准进行比较,如果代码不比以前差,则返回0,否则返回1。

然后,这可以用作钩子,可以在本地pre-commit或服务器上pre-receive使用,甚至两者都可以。

或者,如果您担心开发人员实际运行了给定的工具,您总是可以在工具周围放置一个包装器,保存提交代码的一部分,例如MD5哈希值表示工具上一次运行时的代码点,然后编写pre-commit/receive钩子来检查该文件的MD5/哈希值是否与提交的代码相匹配。


哇!OCLint太棒了!我以前怎么没有用过这个工具呢? :) 这正是我一直在寻找的。谢谢! - TheObjCGuy
1
@TheObjCGuy,你是如何在git hook中运行OCLint的?我现在知道git pre-commit hook的工作原理,也知道OCLint的作用。但是你能否帮助我了解如何从git pre-commit hook中运行OCLint?非常感谢您的帮助。 - Smit Yash

0
我建议设置一个带有适当插件的Jenkins服务器。这个CI服务器将在所有提交到Git上运行任何你喜欢的测试;模块测试、编码风格强制器、系统测试等等。
对于代码风格检查器,你可以使用: 对于C# - http://joel.fjorden.se/static.php?page=CodeStyleEnforcer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接