登记时SVN自动代码格式化?

时间:2009-06-19 13:26:58

标签: svn

这可能吗?如果是这样,我该怎么做?

代码在C#中,我们正在使用TortoiseSVN。

我只想在每次检查时自动格式化代码。

非常感谢

6 个答案:

答案 0 :(得分:27)

使用预提交钩子脚本,你可以这样做,是的。 但我确信你会在第一次提交后删除该脚本,因为你会遇到大问题。

如果修改提交的数据,则客户端不知道该提交的数据。因此,在您的脚本“修复”文件格式的提交之后,存储库中的文件内容与工作副本中的文件不同。但是你的工作副本仍然认为它与存储库是最新的(毕竟,它的修改刚刚提交)。

所以在下次更新时,你会陷入地狱 - 破碎的工作副本,愤怒的用户,......

当然,你可能会破坏构建 - 自动格式化有时会产生这种影响。

您当然可以实现一个钩子脚本检查以获得正确的格式,如果没有则返回错误,这非常好。

由于你使用的是TortoiseSVN,你可以尝试在client-side pre-commit hook中进行格式化。

答案 1 :(得分:17)

你在神圣的战场上感动。与人们的格式一致的是要求干草叉和火把。

我的建议:不要

更不用说,如果你正在谈论C#,而你的开发人员正在使用Visual Studio,那么VS有很多自动格式化工具。只需输入结束的大括号,VS就可以/自动格式化你的代码。

更好的解决方案可能是让所有开发人员使用相同的自动格式设置。

  

工具 - >选项,文本编辑器 - > C# - >格式化

这些设置是可导出的,因此如果您可以让团队同意在VS中使用相同的代码格式设置,您可以避免在源代码管理系统中执行它的麻烦,最好还是做它做的事情最好的。

如果你一直在努力做到这一点,就像其他人所说的那样,预先提交钩子是要走的路。如果您的SVN服务器在Windows上运行,我是否可以推荐CaptainHook来编写您的钩子脚本?可以使用任何.NET语言编写的可插入的钩子脚本。

答案 2 :(得分:6)

我认为您可以使用存储库中的a pre-commit hook来执行此操作。

编辑对于那些认为这是一个坏主意的人(我不是说它不是):组织强制执行特定的代码样式或代码格式并不罕见。有时这些规则可能非常迂腐并且严格执行,虽然它们通常是涉及此的人为操作(即在将任何内容提交到存储库之前格式化为正确的样式),但自动化过程有时可能很有用。

另一种方法可能是在提交之前自动执行验证,但即使检查失败仍然允许提交,但是只发送电子邮件或其他通知以指示某人不遵循该样式

答案 3 :(得分:6)

像这里的大多数人一样,我同意添加一个重写他们的代码的预提交挂钩是坏的,但是你可以有一个预提交钩子,拒绝没有格式化你的编码实践的代码并告知用户这样的错误

答案 4 :(得分:5)

我强烈推荐它。

使用预提交脚本或更好的方法,找到一种在IDE中自动执行的方法(预提交会将更改的文件推送到客户端)。 Eclipse可以在保存时自动格式化。

这样做的理由是,如果开发人员的格式不同,你会发现那些提交的文件,其中提交只是格式化更改而且会引起无休止的混淆。

常见的格式化模式是一个非常好的主意。这将很难介绍,但它是值得的。所有更改都将是真正的更改,而不仅仅是格式更改。根据我的经验,开发人员将看到好处并接受它。

我使用过cvs和java,并使用jalopy进行自动格式化。我们使用的是分支系统,因此它是强制性的,而且效果非常好。

答案 5 :(得分:3)

这是可能的,但也是一个非常非常糟糕的主意。

没有自动代码格式化程序是完美的,我几乎可以保证它会让人们离开。

也就是说,如果你想这样做,请考虑使用预提交钩子。

SVN服务器是在Windows或Linux系统上运行吗?您想使用什么代码格式化程序?