Git 忽略文件的规则

语法

.gitignore 文件是用来告诉 Git 哪些文件或目录在版本控制中应该被忽略的。这对于排除编译生成的文件、临时文件、日志文件以及敏感数据等非常有用。下面是一些编写 .gitignore 文件的基本规则和示例:

  1. 文件名匹配规则

    • *:匹配零个或多个字符。
    • ?:匹配任意一个字符。
    • []:匹配方括号内的任意一个字符。
    • !:在模式前加上感叹号表示取反,即排除匹配的文件或目录。
  2. 注释:以 # 开头的行表示注释,Git 会忽略这些行。

  3. 示例

    • 忽略所有 .a 文件:

      1
      *.a
    • 但是跟踪 lib.a,即使在忽略 .a 文件的规则下:

      1
      !lib.a
    • 忽略所有以 .o 结尾的文件:

      1
      *.o
    • 忽略所有以 ~ 结尾的临时文件:

      1
      *~
    • 忽略 TODO 文件:

      1
      TODO
    • 忽略 build/ 目录下的所有文件:

      1
      build/
    • 忽略 doc/notes.txt 文件,但不包括 doc/server/arch.txt 文件:

      1
      doc/notes.txt
    • 忽略 doc/ 目录下的 .pdf 文件:

      1
      doc/*.pdf
    • 忽略 doc/ 目录下的所有 .pdf 文件:

      1
      doc/**/*.pdf

Tips

取消忽略后无效果

如果上述 .gitignore 规则没有达到预期效果,可以尝试更具体的忽略和取消忽略规则。在 .gitignore 文件中,顺序和具体路径可能会影响规则的应用。以下是调整后的版本,确保首先取消忽略特定的文件夹,然后忽略一般的文件夹:

1
2
3
4
5
6
7
8
# 取消忽略以 hexo-theme- 开头的文件夹
!node_modules/hexo-theme-*/

# 忽略 node_modules 文件夹及其所有内容
node_modules/

# 忽略 node_modules 文件夹下的 hexo-theme-landscape 文件夹
node_modules/hexo-theme-landscape/

另外,请确保这些文件夹已经被 Git 跟踪(即它们之前没有被忽略)。如果这些文件夹之前已经被忽略,需要先将它们从缓存中移除,然后重新添加它们。可以按照以下步骤操作:

  1. 从 Git 缓存中移除 node_modules 文件夹(但保留本地文件):

    1
    git rm -r --cached node_modules
  2. 确认 .gitignore 文件中的规则。

  3. 重新添加 node_modules 文件夹:

    1
    git add node_modules
  4. 提交更改:

    1
    git commit -m "Update .gitignore rules"

通过这些步骤,Git 将正确应用 .gitignore 文件中的规则。