Git 忽略文件规则及设置

文章目录

      • 1. 创建 .gitignore 文件
      • 2. 使用命令忽略文件

一般项目中总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。

对于忽略文件,git提供了几种方式。

1. 创建 .gitignore 文件

在这种情况下,我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件的模式。 来看一个实际的 .gitignore 例子:

*.log
.idea/*

第一行告诉 Git 忽略所有以 .log 结尾的文件。一般这类文件都是代码运行过程中出现的。

第二行告诉 Git 忽略所有名字为 .idea 目录下的所有文件,例如使用编辑器软件(vscode)打开的文件根目录就会自动创建。

此外,你可能还需要忽略 tmp 或者 pid 目录,以及自动生成的文档等等。 要养成一开始就为你的新仓库设置好 .gitignore 文件的习惯,以免将来误提交这类无用的文件。

文件 .gitignore 的格式规范如下:

  • 所有空行或者以 # 开头的行都会被 Git 忽略。

  • 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。

  • 匹配模式可以以(/)开头防止递归,即表示只匹配到根目录下的指定目录,而不是全局的匹配整个项目中所有与指定目录同名的文件目录。

  • 匹配模式可以以(/)结尾指定目录。

    如果 “/” 后面的名称是个目录,则该目录以及该目录下的所有文件都会被忽略;

    如果 “/” 后面的名称是个文件,则该目录下只有该文件会被忽略;

  • 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。

    比如要忽略 data/log,但是又不想忽略 data/log/test.log,可以使用 !data/log/test.log

所谓的 glob 模式是指 shell 所使用的简化了的正则表达式:

  • 星号(*)匹配零个或多个任意字符;
  • [abc] 匹配任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
  • 问号(?)只匹配一个任意字符;
  • 如果在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)
  • 使用两个星号(**)表示匹配任意中间目录,比如 a/**/z 可以匹配 a/za/b/za/b/c/z 等。

注意:git 对于 .gitignore 配置文件是按行从上到下进行规则匹配的,如果前面的规则匹配的范围更大,则后面的规则将不会生效;

我们再看一个 .gitignore 文件的例子:

# 忽略所有的 .a 文件
*.a

# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a

# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
/TODO

# 忽略任何目录下名为 build 的文件夹
build/

# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt

# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf

注意:

1. 在 windows 不能直接新建 .gitignore 文件,可以选择使用 Gitbash 命令行工具创建

touch .gitignore

**2. 文件.gitignore可以放在当前仓库中的任何目录中; 也就是说在项目中可以有多个.gitignore文件 **

3. 只会忽略未跟踪文件,不会忽略已经加入版本库的文件;

4. 如果不希望将.gitignore添加到版本库里,也不希望每次提交或者切换分支时都重置.gitignore文件,可以在忽略文件中忽略自己;

2. 使用命令忽略文件

# 将文件假如忽略列表
git update-index --assume-unchanged config.conf
git status

# 将文件从忽略列表移除
git update-index --no-assume-unchanged config.conf

参考链接

你可能感兴趣的:(版本控制工具,git)