%% # 纲要 > 主干纲要、Hint/线索/路标 # Q&A #### 已明确 #### 待明确 > 当下仍存有的疑惑 **❓<font color="#c0504d"> 有什么问题?</font>** # Buffer ## 闪念 > sudden idea ## 候选资料 > Read it later %% # .gitignore 忽略提交 作用:`.gitignore` 文件中声明忽略的文件/文件夹不会被**提交到远程仓库**。 ### `.gitignore` 文件说明 - `.gitignore` 中声明的匹配模式**仅从该 `.gitignore` 所在目录开始生效** - **项目根目录**(与`.git`文件夹同一路径)下的`.gitignore`中声明的模式会**匹配整个项目文件** - `.gitignore` 文件中,**每行指定一个匹配模式**,从上到下依次进行。 - 因此,如果**前面的规则匹配的范围更大,先匹配上了,则后面的规则将不会生效。** # 规则优先级 `.gitignore` 中匹配规则的优先级 Git **检查忽略规则**的时候有多个来源,其优先级如下(由高到低): - (1)从**命令行**中读取可用的忽略规则 (`git push` 命令的附带参数) - (2)**当前目录定义的规则** (除了在`.git`所在的整个项目下创建`.gitignore`, 还可以在项目中的任何一个子目录中创建`.gitignore`文件); - (3)父级目录定义的规则,依次递推; - (4)`$GIT_DIR/info/exclude` 文件中定义的规则 - (5)`core.excludesfile` 中定义的全局规则 # 规则说明 > 参见 [^1] - **`/` 开头的模式,或者`/`出现在路径中间的模式,均表示只匹配`.gitignore` 文件所在路径下的模式**。 - a leading slash is not relevant if there is already a middle slash in the pattern. - **`/` 结尾的模式表示只匹配文件夹,以及该文件夹路径下的所有内容,不匹配同名文件。** - `**` 表示匹配任意中间目录 - `!` 表示不忽略指定文件。通常用在已指定某个匹配模式后(必须在此之后声明),**排除某个匹配模式下的部分特殊文件**。 - Any matching files excluded by a previous pattern will become included again. > [!caution] **如果 ! 所指定的文件或目录的父级目录已被排除,则 ! 的声明不会生效。** **规则示例** | 示例 | 说明 | | ------------------------- | ------------------------------------------------------------ | | *. a | 忽略所有以 .a 为后缀的文件 | | !lib. a | lib. a 文件除外, 不忽略 lib. a 文件 | | hello.* | 忽略所有 `hello.*` 文件 | | /hello.* | 仅忽略`.gitignore`所在目录下的`hello.*`文件, 但不包括子目录下的`hello.*`文件,即不包括`a/hello.java` | | doc/frotz<br />/doc/frotz | 仅忽略`.gitignore` 所在目录下的路径为`doc/frotz` 的文件,而不包括`a/doc/frotz` | | doc/frotz/ | 仅忽略`.gitignore` 所在目录下的整个 front 文件夹 | | build/ | 忽略所有 build 文件夹, 例如当前路径下的`build` 和子目录`bc/build`文件夹。 **注: 不会忽略同名的 build 文件.** | | /build/ | 仅忽略`.gitignore` 所在目录下的整个 build 文件夹。注:不忽略同名的 build 文件 | | doc/*. txt | 仅忽略`.gitignore`所在目录下的`doc/*.txt`文件, 不包括 doc 子目录下的文件, 即不忽略`doc/subdir/cc.txt`,`a/doc/cc.txt` | | a/**/b | 忽略 a/b, a/x/b, a/x/y/b,a/···/b 等文件 | | *.[oc] | 忽略所有`.O`, `.c` 后缀的文件。 | ###### 示例 ```gitignore # 忽略项目根目录下的target文件夹 (.gitignore位于根目录) # 三句都有效, 但第一句还会忽略同名的target文件(如果存在), 二三句完全等效,仅忽略根目录下的target文件夹, 不包含子目录下的target文件夹. /target /target/ target/* # 忽略所有文件夹 */ # 文件夹some_folder除外 !some_folder/ ``` <br><br> # .gitignore 变更无效的解决办法 现象描述:某些原先已经被 track 的文件,现希望加入到 `.gitignore` 中,今后不再对其进行跟踪,但**发现无效**。 解决方案: ![[_attachment/05-工具/git 使用/gitignore 说明.assets/IMG-gitignore 说明-CBA75D247CFDD62E1769B6D3BA9D7DBA.png|643]] ![[05-工具/git 使用/git 工作区&暂存区管理#^eo9uqt]] <br><br> # 参考资料 # Footnotes [^1]: [Git忽略提交规则 - .gitignore配置运维总结 - 散尽浮华 - 博客园](https://www.cnblogs.com/kevingrace/p/5690241.html)