如何适应多种编码风格?(git与IDE)

JJ *_*kar 9 java eclipse git coding-style intellij-idea

我正在使用git-sourced,maven管理的Java项目进行合作,该项目使用多个IDE的用户具有不同的代码样式首选项(注释1).

是否有工具或IDE配置允许使用样式1查看和编辑代码,但是使用样式2提交给SCM ?

我的研究指出我'不',但结合git hooksCheckstyle/jrefactory的解决方案可能是可能的.

因此,如果上面的"否",是否有一个工具/流程将执行下面的TBD流程操作?

User1的结帐流程将是:

  1. git pull
  2. TBD进程将代码格式化为User1 style-1
  3. User1使用样式1设置在其首选IDE中工作

User1的提交工作流程将是:

  1. User1准备提交/推送代码
  2. TBD过程将代码格式化为标准格式样式标准
  3. git push

注1:多个IDE = Eclipse,IntelliJ,Netbeans.

注2:我的问题与这个问题的不同之处在于我想关注与IDE相关的解决方案,因为迫使少数标准不同的用户可能是一种更有效的解决方案.

注3:承认不应该出于最佳实践原因这样做.但是,如果您认为我们的IDE和SCM需要更多的灵活性,那么这个问题就是为了探索这些解决方案.

Ser*_*riu 12

首先,你真的不应该这样做.Codestyle战争对任何项目都不利,最好决定每个人必须使用的一种代码风格.配置IDE以在每个文件夹中自动应用指定的代码样式很简单,因此开发人员不必自己编写目标代码样式的代码,他们可以让IDE为它们执行此操作.确实,这并没有解决他们必须以他们还不喜欢的代码风格读取代码这一事实,但它比隐形自动代码更改更安全; 这是bug的主要来源.

也许您可以从命令行使用Eclipse的代码格式化程序来应用不同的代码样式.你必须设置git钩子,确保每个人都有Eclipse可用,并为他们喜欢的代码样式提供正确的配置文件.你需要钩子用于post-checkout和pre-commit,一个用于设置用户的codestyle,另一个用于中央codestyle.更进一步,您可以使用索引添加格式化代码,以便它不包括样式差异git diff(尽管它们将显示在中git diff --staged).

再说一次,你不应该这样做.


Chr*_*ial 8

我同意Sergiu Dumitriu这不是一个好主意.但仍然git提供你正在寻找的东西.即使这只有在您的中央编码风格定义得非常严格并且严格遵循时才会起作用.以下是它的工作原理:

Git提供涂抹/清洁过滤器.它们允许您在结帐时通过所谓的"涂抹"过滤器传递所有代码,并在将代码添加到暂存区域时使用"干净"过滤器将其反转.设置了这些过滤器.gitattributes,并且可以使用该文件的存储库本地版本.git/info/attributes.因此,您将涂抹过滤器设置为一个工具,可在结帐时将代码更改为您的个人编码样式:

涂抹过滤器

并且您的干净过滤器会将代码转换回checkin上的中央编码样式(更确切地说:当文件被暂存时):

清洁过滤器

非常重要的是,这smudge -> clean是一个no-op /再次生成原始文件.否则,每次更改文件时,您仍将检查格式更改.

使用涂抹和清洁过滤器将保留git的所有功能(包括git diff等).您可以在中找到完整的文档git help attributes