[#项目通用文件 #Git] .gitignore 代码提交自动忽略信息

.Gitignore忽略或指示不跟踪文件

  • 总结的通用 .Gitignore 文件
  • Gitignore说明[^2]
    • 支持的忽略方式-概述
    • 区别-概述
    • 优先级
    • 忽略方式说明
      • .gitignore [ 为当前项目的所有成员配置忽略规则 ]
      • \$GIT_DIR/info/exclude [ 为当前主机用户的当前项目配置忽略规则 ]
      • $XDG_CONFIG_HOME/git/ignore
    • 匹配规则
  • 可参考的其他帖子
        • 如果有给你提供帮助麻烦点下免费的赞,请不要进行无意义的转载,不想要在百度搜索的时候出现满页满页的重复内容。无疑是画蛇添足,还添了不是一个两个。新人发帖如有错误或者不好的地方欢迎指正

总结的通用 .Gitignore 文件

总结了一些项目中可用度较高的排除文件配置

### Wrapper ###
# 由SpringInitializr生成的Maven项目中带有,该目录文件用于提供一个简用的Maven支持,用于免配置Maven环境,即有了这玩意就相当于你已经配置过了Maven环境
.mvn/wrapper/

### Java ###
# 编译后的Java代码,在Git中通常只保留有对应的项目的源代码而忽略编译后的文件
*.class

### Package File ###
# 部分逻辑同上,忽略编译后的Java包
*.war
*.ear
# 示例的部分压缩文件,项目需斟酌自行调整
*.zip
*.tar.gz
*.rar
*.7z

### Maven Ignore ###
# Maven项目运行或编译时生成的运行信息包含可运行的代码,同理只保存源码。另外一点 /target/ 和 target/的区别在于 /target/ 仅匹配项目根目录对应文件,而 target/将会匹配根目录下所有的target文件,使用 target/时会出现子目录使用target命名时被忽略的问题
/target/
/build/

### Temp File ###
# 一些常用的日志文件后缀
*.log
*.cache
*.diff
*.patch
*.tmp

### System Ignore ###
# 一些系统方面的隐藏文件
.DS_Store
Thumbs.db

### STS ###
# spring tools suite
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
# Idea编辑器的一些临时配置
.idea/
/idea/
*.ipr
*.iml
*.iws

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
/build/

### VS Code ###
.vscode/

### Test File ###
# 排除测试文件包,部分项目develop是需要进行版本控制的,不需要提交test文件时保留
test/

Gitignore说明1

支持的忽略方式-概述

  • $XDG_CONFIG_HOME/git/ignore
  • $GIT_DIR/info/exclude
  • .gitignore

区别-概述

方式 共享 作用范围 优先级 说明
配置类型和其他操作方式 是否可以被项目种其他人员使用 配置类型可使用的范围 优先级 -
commandLine 提交后共享 仅项目内 最高 例如被命令行控制暂存的文件/跟踪的文件,将会被提交会忽略掉忽略配置
.gitignore 提交后共享 仅项目内 第二高 在项目根目录中的忽略配置,对没有暂存等操作的数据进行忽略
$GIT_DIR/info/exclude 仅本地,不共享 仅项目内 略,依次优先级降低
$XDG_CONFIG_HOME/git/ignore 仅本地,不共享 本地全局 在全局和用户级别配置中读取

即:
由命令行控制要提交或暂存的 => .gitignore文件配置的 => 项目.git文件配置的 => 当前主机用户全局配置 => 当前主机用户系统默认配置

优先级

从高到低。同一个优先级内,最后确定的规则决定其结果

highest to lowest (within one level ofprecedence, the last matching pattern decides the outcome)

  • 从 command 读取支持它们的命令的匹配模式

    Patterns read from the command line for those commands that supportthem.

  • 从根目录下的 .gitinore文件中读取模式,或从任何父级目录(分布式开发或微服务效果的项目中指更外层项目,在当前工作树的顶层),高级模式中的文件将被低级别文件中的模式覆盖。这些规则将会在.gitignore文件的相对路径下进行匹配,一个项目通常都会包括这个文件在你的仓库项目中,其中包含在生成的项目时用作构建的部分文件相对的忽略规则。

    Patterns read from a.gitignorefile in the same directoryas the path, or in any parent directory (up to the top-level of the workingtree), with patterns in the higher level files being overridden by those inlower level files down to the directory containing the file. These patternsmatch relative to the location of the.gitignorefile. A project normallyincludes such.gitignorefiles in its repository, containing patterns forfiles generated as part of the project build.

  • 从 $GIT_DIR/info/exclude 中读取支持的匹配规则

    Patterns read from$GIT_DIR/info/exclude.

  • 从配置变量 e.excludesFile 中读取支持的匹配规则

    Patterns read from the file specified by the configurationvariablecore.excludesFile.

忽略方式说明

.gitignore [ 为当前项目的所有成员配置忽略规则 ]

将忽略文件的信息配置到项目根目录的 .gitignore 文件中,随版本控制器提交并同步到所有使用开发人员项目中,即针对于项目的配置文件并可根据版本控制进行同步。

Patterns which should be version-controlled and distributed toother repositories via clone (i.e., files that all developers will wantto ignore) should go into a.gitignorefile.

分布到一个.gitignore文件,匹配模式信息将会被 GIt 进行版本控制和通过克隆(即所有开发人员都希望忽略的文件)。

[#项目通用文件 #Git] .gitignore 代码提交自动忽略信息_第1张图片[#项目通用文件 #Git] .gitignore 代码提交自动忽略信息_第2张图片

$GIT_DIR/info/exclude [ 为当前主机用户的当前项目配置忽略规则 ]

将忽略信息配置到项目项目根目录私有文件 .git文件夹下 /info/exclude 文件中,该配置将和本地的 .git文件配置内容类似变成私有化配置,该配置只保留在当前项目中且不会别版本控制器处理及同步。

Patterns which are specific to a particular repository but which do not need to be shared with other related repositories (e.g., auxiliary files that live inside the repository but are specific to one user’s workflow) should go into the $GIT_DIR/info/exclude file.

特定于特定存储库但不需要与其他相关存储库共享的模式(例如,存在于存储库内但特定于一个用户的工作流程的辅助文件)应该进入该 $GIT_DIR/info/exclude文件。

[#项目通用文件 #Git] .gitignore 代码提交自动忽略信息_第3张图片[#项目通用文件 #Git] .gitignore 代码提交自动忽略信息_第4张图片

$XDG_CONFIG_HOME/git/ignore

将在全局配置读取的code.excludesFile 配置,默认值为 $XDG_CONFIG_HOME/git/ignore,若该环境未设置将使用 $HOME/.config/git/ignore

匹配规则

  • 空行不做处理,它可以用作分隔符以提高可读性。尾部的空格也将不做处理,可以使用 \ 反斜杠进行转义
  • # 开头的行作为注释行,可以使用 \ 反斜杠进行转义
  • ! 前缀将开启否定模式,在忽略文件中进行指定保留的匹配规则,如果排除该文件的父目录,则无法重新包含文件。出于性能原因,Git 不会列出排除的目录,因此无论在哪里定义包含的文件上的任何都没有效果,可以使用 \ 反斜杠进行转义
  • 斜线/用作目录分隔符。分隔符可能出现在开头、中间或结尾。
    • 如果在匹配模式的开始或中间(或两者)都有分隔符,那么模式是相对于.gitignore文件本身所在特定的目录级别的
    • 如果 末尾有分隔符,那么模式将限定为只匹配目录
  • 一个星号* 匹配除斜线 /以外的任何内容
  • 一个星号? 匹配除斜线 /以外的一个内容
  • 中括号[]可用于匹配范围中的一个字符
  • 两个星号** 匹配任何内容
    • **/表示在任意目录下匹配
    • /**表示在指定目录下匹配任意
    • /**/表示在指定目录下匹配以指定内容结尾的任意

匹配规则示例

# 其中的匹配规则逻辑大致分为两种

# 精度匹配(通过开头获取中间包含 / 分割符)
# 模糊匹配(仅给予单个目录信息)

#例如
# 要搜索 frotz文件或文件夹
# 1. 通过在匹配规则最后一个字符设置 / 来区分
frotz            # 匹配文件或文件夹
frotz/           # 仅匹配名为frotz的文件夹

# 2. 如上是两个简单版的模糊匹配规则,通过在开始或中间(或两者)添加分隔符来调整为精准匹配
/frotz           # 匹配当前.gitignore文件所在根目录的frotz文件或文件夹
/frotz/          # 同理匹配当前.gitignore文件所在根目录的frotz文件夹

# 3. 扩展层级,将匹配当前根目录 a文件下的 frotz
a/frotz          # 匹配当前根目录下的a文件夹中的frotz
a/frotz/         # 匹配当前根目录下的a文件夹中的frotz文件夹

# 1、2与3的关系可能不太好理解,可以以:
#  · 除去末尾的 / 外没有包含其他 / 时,当前匹配为模糊匹配,结果会自动附加第5步演示的**/作为前缀
#  . 除去末尾的 / 外包含其他 / 可以认为是精准匹配,结果以直接以输入的匹配规则来定
#  · 因为末尾的斜杠是用来确认匹配的范围是文件夹还是两个均可匹配这项内容的,所以末尾的 / 在理解时需要忽略

# 4. 单字统配符号
fr?tz/           # 匹配以 fr开头,中间一个任意字符,以tz结尾的规则 可以匹配到  fratz/ frotz/ ...等等
fro?z/           # 匹配以 fro开头,中间一个任意字符,以z结尾的规则 可以匹配到  frovz/ frooz/ ...等等
fr*tz/           # 匹配以 fr开头,中间任意字符,以tz结尾的规则 可以匹配到  fraaaatz/ frooootz/ ...等等
fro*z/           # 匹配以 fro开头,中间任意字符,以z结尾的规则 可以匹配到  frovvvvvvz/ frooooooz/ ...等等
fr[0-9]tz/       # 匹配以 fr开头,中间一个指定范围任意字符,以tz结尾的规则 可以匹配到  fr0tz/ fr1tz/ ...等等
fr[a-zA-Z]tz/    # 匹配以 fr开头,中间一个指定范围任意字符,以tz结尾的规则 可以匹配到  fratz/ frytz/ ...等等

# 5. 任意统配
**/frotz/        # 匹配任意目录下的frotz文件夹,也可以写成缩写形式 frotz/
a/**/frotz/      # 根目录下a文件夹后任意节点中的frotz文件夹
a/frotz/**       # 根目录下a文件夹下的frotz文件夹下的文件文件和文件夹

可参考的其他帖子

  • Git config 配置2
  • 比较语义化好理解的 Git 忽略提交规则3

如果有给你提供帮助麻烦点下免费的赞,请不要进行无意义的转载,不想要在百度搜索的时候出现满页满页的重复内容。无疑是画蛇添足,还添了不是一个两个。新人发帖如有错误或者不好的地方欢迎指正


  1. Gitignore官方文档说明 ↩︎

  2. Git Config 配置 ↩︎

  3. Git 忽略提交规则 ↩︎

你可能感兴趣的:(git,java,intellij-idea)