IDEA和.gitignore有什么关系?
在使用IDEA编译器开发项目时,项目根目录下面除了有我们开发时所写的源文件,idea还会在里面自动创建一些IDEA自己需要使用到的文件或文件夹(如:.idea文件夹)。在我们使用git管理项目时,这些文件是否需要被ignore就成为一个问题。
.idea文件夹中包含什么?
.idea文件夹中包含两种类型设置信息:项目配置、个人配置。下图是一个 .idea 文件夹的结构示例。
- 项目配置包括:项目的语法检测规范(sonarlint、inspectionProfiles),编码风格规范(codeStyle)、项目字典(dictionaries)等
- 个人配置包括:自己使用的一些Idea插件的配置如:ZeppelinRemoteNotebooks、uiDesigner.xml
idea目录中的什么文件应该剔除?
其中项目配置可以共享(不是必须,根据项目特点选择)、个人配置不能共享。
idea项目的.gitignore模板
- 模板一:把整个.idea 文件夹都给屏蔽了
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
# Mac
.DS_Store
# Maven
log/
target/
好处:简单。
坏处:语法检查规范配置、编码风格配置无法共享
- 模板二:精细化剔除.idea文件夹下面的一些“个人配置”:(注意Gradle and Maven with auto-import那块的注释,如果使用了maven应该放开注释)
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# 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
# AWS User-specific
.idea/**/aws.xml
# 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/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# 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
# 其他,有些idea插件会在.idea目录中创建配置文件,如果不需要共享也需要将其ignore掉(ex:sonarlint)
好处:不是一股脑屏蔽整个.idea文件夹,保留了语法检查规范配置、编码风格配置。
坏处:如果本地的idea的某些插件在.idea文件中创建的文件可能需要再在gitignore文件中再追加一些东西)
如果文件已经被追踪了怎么办?
.gitinore知识告诉git:“在add文件时.gitignore文件中的文件不需要被add”,对于已经commit了的文件gitignore文件是无法将其从仓库中删除掉的。所以如果文件已经被git追踪了,需要先将其从暂存区删除再commit
# 将内容从暂存区剔除
git rm -r --cached ${filePathToRemove}
# 为了防止以后这些文件再次被add进去,需要将其添加到.gitignore文件中去
除了.gitignore文件还有哪些其他“ignore”文件的方式?
- 方式一:.git\info\exclude文件(项目粒度的,相比.gitignore文件,该文件不会被git进行版本追踪)
- 方式二:git全局ignore配置(各个项目都会生效)就是在gitconfig文件中配置一个全局的.gitignore文件路径。为什么不能把.idea文件夹从项目的gitignore文件中排除
针对方式二的操作办法:
1) 创建一个全局的.gitignore文件
2)在.gitconfig配置文件中配置该文件路径,配置如下
# add this to ~/.gitconfig:
# 表示全局ignore文件位置
excludesfile = ~/.gitignore
有没有工具可以帮助生成.gitignore文件?
更多的ignore项可以使用idea的.ignore插件生成