10

我正在与使用多个 IDE 的用户合作开发一个 git 来源、maven 管理的 Java 项目,该项目具有不同的代码样式偏好(注 1)。

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

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

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

User1 的结帐流程为:

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

User1 的提交工作流程是:

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

注 1:多个 IDE = Eclipse、IntelliJ、Netbeans。

注意 2:我的问题与这个问题不同,因为我想关注与 IDE 相关的解决方案,因为强制少数标准分歧用户可能是更有效的解决方案。

注 3:承认出于最佳实践原因不应该这样做。但是,如果您同意是时候从我们的 IDE 和 SCM 中获得更大的灵活性,那么这个问题旨在探索这些解决方案。

4

2 回答 2

12

首先,你真的不应该那样做。代码风格之争对任何项目都是不利的,最好选择一种每个人都必须使用的代码风格。将 IDE 配置为在每个文件保存时自动应用指定的代码样式很简单,因此开发人员不必自己编写目标代码样式的代码,他们可以让 IDE 为他们完成。诚然,这并不能解决他们必须以他们不喜欢的代码风格阅读代码的事实,但它比不可见的自动代码更改要安全得多;这是错误的主要来源。

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

同样,你不应该那样做

于 2013-05-24T01:21:37.963 回答
7

我同意 Sergiu Dumitriu 的观点,认为这不是一个好主意。但是 git 仍然提供了您正在寻找的东西。即使这仅在您的中心编码风格定义得非常明确并严格遵循时才有效。以下是它的工作原理:

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

污迹过滤器

并且您的干净过滤器将在签入时将代码转换回中央编码样式(更准确地说:当文件暂存时):

清洁过滤器

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

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

于 2013-05-24T09:09:37.543 回答