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

时间:2013-05-20 17:41:17

标签: java eclipse git coding-style intellij-idea

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

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

我的研究指出我'不',但可能有一个结合git hooksCheckstyle / jrefactory的解决方案。

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

User1的结帐流程将是:

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

    User1的提交工作流程为:

    1. User1已准备好提交/推送代码
    2. 待办事项将代码格式化为标准格式样式标准
    3. git push
    4. 注1:多个IDE = Eclipse,IntelliJ,Netbeans。

      注2:我的问题与this question的不同之处在于我希望专注于与IDE相关的解决方案,因为迫使少数标准差异的用户可能是一种更有效的解决方案。

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

2 个答案:

答案 0 :(得分:12)

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

也许you can use Eclipse's code formatter from the command line应用不同的代码风格。你必须设置git钩子,确保每个人都有Eclipse可用,并为他们喜欢的代码样式提供正确的配置文件。你需要钩子用于post-checkout和pre-commit,一个用于设置用户的codestyle,另一个用于中央codestyle。为了更进一步,您可以使用索引来添加格式化代码,使其不包含git diff中的样式差异(尽管它们将显示在git diff --staged中)。

同样,你不应该这样做

答案 1 :(得分:8)

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

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

smudge filter

你的干净过滤器会将代码转换回checkin上的中央编码风格(更准确地说:当文件被暂存时):

clean filter

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

使用涂抹和清洁过滤器将保留git的所有功能(包括git diff等)。您可以在git help attributes

中找到完整的文档