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

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

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

我的研究指出我’不’,但是结合git hooks和Checkstyle / 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需要更多的灵活性,那么这个问题就是为了探索这些解决方案。

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

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

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

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

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

涂抹过滤器

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

清洁过滤器

非常重要的是, smudge -> clean是无操作/再次生成原始文件。 否则,每次更改文件时,您仍将检查格式更改。

使用涂抹和清洁filter将保留git的所有function(包括git diff等)。 您可以在git help attributes找到完整的文档