.idea 文件夹中的 gitignore 是啥?

Posted

技术标签:

【中文标题】.idea 文件夹中的 gitignore 是啥?【英文标题】:What to gitignore from the .idea folder?.idea 文件夹中的 gitignore 是什么? 【发布时间】:2012-08-11 16:51:56 【问题描述】:

可能重复:Intellij Idea 9/10, what folders to check into (or not check into) source control?

我开始使用 WebStorm 进行 Web 开发,但不确定要从我们的 Git 存储库中添加什么以及排除什么。很明显,.idea 文件夹中的一些文件应该像外部库设置 (jsLibraryMappings.xml) 一样受到版本控制,但其他文件可能会经常更改并且是特定于开发人员的(例如,workspace.xml)。

WebStorm / IntelliJ IDEA 推荐的 .gitignore 模式是什么?

附:对此已有疑问,但通常只关注是否包含整个 .idea 文件夹或是否完全排除它。我认为.idea 文件夹中的一些文件应该受版本控制,而其他文件不应该受版本控制,我正在尝试找出哪些文件。

【问题讨论】:

我认为,将 IDE 文件放入版本控制系统是个坏主意。您的项目将更多地与特定的 IDE 相关联,您可能会给其他 IDE 的用户带来问题。我在 VCS 中有几个带有 IDE 文件的项目,但我遇到了复杂情况。现在我在 VCS 中只有 maven 文件,IDEA 生成项目文件,一切都很好。 @chalimartines 我更喜欢将构建所需的一切都放在存储库中。由于我们不使用 Maven 并且也使用单个 IDE,因此在 VCS 中没有 .idea 文件会很复杂。 Intellij Idea 9/10, what folders to check into (or not check into) source control?的可能重复 【参考方案1】:

The official support page 应该回答你的问题。

因此,在您的.gitignore 中,您可能会忽略以.iws 结尾的文件,以及workspace.xmltasks.xml 文件。

【讨论】:

该文档建议“共享所有 .iml 模块文件”,因此具有以下两行的 .gitignore 应该没问题: .idea/workspace.xml .idea/tasks.xml 正确的语法好像是*/.idea/workspace.xml */.idea/tasks.xml 更好的语法是**/.idea/workspace.xml **/.idea/tasks.xml 为什么**/*/ 好? @Vanquish46 :更具体地说,** 在所有子文件夹中递归,因此在子文件夹中也将忽略符合条件的文件。【参考方案2】:

我只想介绍一个更新的替代方案。有一个在线工具可以根据您可能使用的操作系统、IDE 和编程语言生成.gitignore 文件。

gitignore.io


编辑免责声明:不要复制此文件,而是复制网站生成的文件,他们在保持更新方面做得很好。这只是一个例子。

IntelliJ 生成的文件包含以下内容

# Created by https://www.gitignore.io/api/intellij

### Intellij ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, phpStorm, AppCode, PyCharm, CLion, android Studio and Webstorm
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839

# User-specific stuff:
.idea/workspace.xml
.idea/tasks.xml
.idea/dictionaries
.idea/vcs.xml
.idea/jsLibraryMappings.xml

# Sensitive or high-churn files:
.idea/dataSources.ids
.idea/dataSources.xml
.idea/dataSources.local.xml
.idea/sqlDataSources.xml
.idea/dynamic.xml
.idea/uiDesigner.xml

# Gradle:
.idea/gradle.xml
.idea/libraries

# Mongo Explorer plugin:
.idea/mongoSettings.xml

## File-based project format:
*.iws

## Plugin-specific files:

# IntelliJ
/out/

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

### Intellij Patch ###
# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721

# *.iml
# modules.xml

【讨论】:

"默认情况下,他们建议您忽略来自.idea/ 的所有内容-不再是。当前生成的 .gitignore 没有 .idea/ 条目。 你为什么要直接忽略.idea/dictionaries @Rhymoid 我不知道具体原因,因为我不是提出.gitignore 的人。我只是展示了执行此操作的工具。我的猜测是它是一个个人文件。您可以在字典中添加可能对其他人无效的内容。特别是当您清理 LINT 消息时。我相信,如果您在您的队友中达成一致,您可以将其添加到您的 git 存储库中。 我打算使用通用的“你”,抱歉。但是由于它与 linting 的相似之处,将它们放在源代码库中是完全有意义的,因为这些条目实际上适用于每个人:字典特定于项目的内容!例如,在为 C 开发解析器时,每个人都会遇到“标点符号”这个词被错误地标记为拼写错误的问题......除非你共享字典。 @user824425 IntelliJ 说要小心用户字典文件夹(以避免其他开发人员同名时发生冲突) - 请参阅 intellij-support.jetbrains.com/hc/en-us/articles/…【参考方案3】:

https://www.gitignore.io/api/jetbrains

由https://www.gitignore.io/api/jetbrains创建

### JetBrains ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839

# User-specific stuff:
.idea/workspace.xml
.idea/tasks.xml
.idea/dictionaries
.idea/vcs.xml
.idea/jsLibraryMappings.xml

# Sensitive or high-churn files:
.idea/dataSources.ids
.idea/dataSources.xml
.idea/dataSources.local.xml
.idea/sqlDataSources.xml
.idea/dynamic.xml
.idea/uiDesigner.xml

# Gradle:
.idea/gradle.xml
.idea/libraries

# Mongo Explorer plugin:
.idea/mongoSettings.xml

## File-based project format:
*.iws

## Plugin-specific files:

# IntelliJ
/out/

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

### JetBrains Patch ###
# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721

# *.iml
# modules.xml
# .idea/misc.xml 
# *.ipr 

【讨论】:

好的!如果你想找东西,你可以去[gitignore.io/](https://www.gitignore.io),它对你很容易找到你想要的东西很有帮助! 这很有帮助,但如果您只是链接到文件会更好 - 在线版本中已经存在差异。 为什么不直接做.idea/*?节省大量行数。 @Hackinet 这取决于你的情况,忽略所有带有* 符号的文件,或者只需要忽略一些特殊文件。【参考方案4】:

几年来,我一直支持将特定的 .gitignore 用于 IntelliJ 和 this suggested configuration。

不再。

IntelliJ 更新非常频繁,内部配置文件规范的变化比我想要的更频繁,JetBrains 旗舰产品擅长基于 maven/gradle/etc 构建文件自动配置自身。

所以我的建议是将所有编辑器配置文件都排除在项目之外,让用户根据自己的喜好配置编辑器。代码样式之类的东西可以而且应该在构建级别进行配置;说直接在 Maven/Gradle/sbt/etc 上使用 Google Code StyleCheckStyle

这确保了一致性,并将编辑器文件排除在源代码之外,在我个人看来,这是它们应该在的位置。

【讨论】:

这正是我的观点,正如我在回答中所解释的那样,我们不应该只为 JB 争论 .gitignore【参考方案5】:

Github 将以下 .gitignore 用于他们的程序

https://github.com/github/gitignore/blob/master/Global/JetBrains.gitignore

# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839

# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf

# Generated files
.idea/**/contentModel.xml

# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml

# Gradle
.idea/**/gradle.xml
.idea/**/libraries

# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn.  Uncomment if using
# auto-import.
# .idea/modules.xml
# .idea/*.iml
# .idea/modules

# CMake
cmake-build-*/

# Mongo Explorer plugin
.idea/**/mongoSettings.xml

# File-based project format
*.iws

# IntelliJ
out/

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Cursive Clojure plugin
.idea/replstate.xml

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

# Editor-based Rest Client
.idea/httpRequests

# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser

【讨论】:

【参考方案6】:

您可以通过将.idea/* 添加到.gitignore 文件来简单地忽略所有这些。

【讨论】:

【参考方案7】:

就我而言,/**/.idea/* 效果很好

【讨论】:

【参考方案8】:

如support page 中所述,从版本 2019.1 开始,IntelliJ 能够将需要共享的所有内容添加到版本控制automatically。

这很棒,因为 IDE 将分两步将必要的文件添加到 Git:

    使用 IntelliJ 打开项目,稍等片刻,直到右下角出现以下弹出窗口 选择“始终添加”

您也可以选择“查看文件”,然后手动添加它们。

【讨论】:

【参考方案9】:

虽然维护正确的 .gitignore 文件很有帮助,但我发现这种替代方法更清洁且更易于使用。

创建虚拟文件夹 my_project 并在其中 git clone my_real_project 实际项目存储库。 现在在 IDE (Intellij/Pycharm) 中打开项目时,打开文件夹 my_project 并将 my_project/my_real_project 标记为 VCS 根目录。 您可以看到my_project/.idea 不会污染您的 git 存储库,因为它很高兴地存在于您想要的 git 存储库之外。这样你的.gitignore 文件也保持干净。

由于以下原因,这种方法效果更好。

1 - .gitignore 文件保持干净,我们不必插入与 JetBrains 产品相关的行,该文件更适合用于二进制文件和库以及自动生成内容。

2 - Intellij 不断更新他们的项目,.idea 中的文件不断更改 JB 的每个重要版本。这意味着我们必须相应地不断更新我们的.gitignore,这不是一个理想的时间利用方式。

3 - Intellij 的模式存在缺陷,大多数编辑器 Atom、VS Code、Eclipse... 没有人将他们的 IDE 内容直接存储在项目根目录中。 JB也不应该是个例外。 Jetbrains 有责任在项目根目录之外跟踪这些文件。他们必须避免污染 VCS 根。这种方法就是这样做的。 .idea 文件夹保存在 PROJECT_ROOT 之外

希望这会有所帮助。

【讨论】:

这个答案完全是误导。 .gitignore 中的/.idea 工作正常;通常问题会通过这个命令解决:git rm --cached -r .idea /.idea 不起作用,您也可以查看其他答案和 JB 的官方指南 我不明白你为什么认为你需要保持你的 .gitignore 干净。但是你总是可以把它放在你的用户 git config 中,而不是通过这种额外的虚拟文件夹方法。 @ChristopherBarber 你不明白,因为你还没有遇到问题。当我的意思是保持 gitignore 干净时,我考虑过不断更改它的文件,这不是开发人员的错,因为 Jetbrains 不断添加文件或更改文件名。 是的,但是如果你想忽略所有的 .idea 文件,你只需要在你的 .gitignore 文件中添加一次/.idea/ 就可以了。或者您可以在您的用户 .gitconfig 中执行相同的操作,而无需使用这种虚拟文件夹方法。【参考方案10】:

删除 .idea 文件夹

$rm -R .idea/

添加规则

$echo ".idea/*" >> .gitignore

提交 .gitignore 文件

$git commit -am "remove .idea"

下次提交就可以了

【讨论】:

忽略idea文件夹很好,因为不是每个人都使用它们,它们不是你代码的一部分——例如,你(希望)在生产中不需要它们。 忽略是好的,但删除不是一个好主意。它包含您本地工作区的信息。 我很惊讶这被否决了。接缝在这里是最好的答案! 答案被否决,因为它没有回答问题。您也不必删除 .idea 文件夹即可对其进行 gitignore 处理。 @ChristopherBarber 你需要从 git origin 中删除它

以上是关于.idea 文件夹中的 gitignore 是啥?的主要内容,如果未能解决你的问题,请参考以下文章

.gitignore不起作用/无效,.idea文件夹无法删除

.gitignore不起作用/无效,.idea文件夹无法删除

idea设置不自动添加gitignore

Git中的使用.gitignore忽略不想要提交的文件

idea git提交文件忽略(.gitignore)

.gitignore