忽略规则

发布时间 2023-12-22 14:08:35作者: euv

忽略文件和目录

常见编程语言的.gitignore模板
https://github.com/github/gitignore/blob/main/VisualStudio.gitignore

规则

  • .gitignore与.git在同一级目录才能生效

  • 被忽略的文件夹和文件不会被git add,不会被追踪和加入版本库。

  • 每条过虑规则占用一行

  • 空行不匹配任何文件,因此常用作分隔符(以方便阅读)

  • 开头的行表示注释

  • 路径分隔符统一使用 / ,不要用 \ ,即使是Windows系统

  • 当/在开头时,表示从.gitignore文件所在目录开始匹配。否则,下级都将匹配。ax,则/x/ax,/x/y/ax,/y/ax都会被忽略。/ax,则仅忽略根目录下的ax(ax目录或文件)。

  • 当/在末尾时,只匹配目录,否则,则同名的目录和文件都将匹配。ax,会忽略/ax,/x/ax(ax是文件夹),/y/x/ax(ax是文件)。ax/,会忽略/x/ax(ax是文件夹),不会忽略/x/ax(ax是文件)。

  • *可以匹配任何字符(0次或多次),?可以匹配任何字符(1次)【注意它们都不可以匹配 / 】

  • [ ] 通常用于匹配一个字符列表,如:a[mn]z可匹配amz和anz

  • 原先被排除的文件,使用!模式可以被重新包含,但是如果该文件的父级目录被排除了,即使使用!也不会再被包含进来。

  • ** 用于匹配多级目录,如a/**/b可以匹配a/x/b和a/x/y/b

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


实战

假设仓库文件夹名称是repository,.git在repository目录下。




image

忽略所有内容
*/*

忽略所有目录
*/

忽略public目录下的所有文件,除了favicon.ico文件
下面的达不到目的,因为父级目录被排除了
/public
!/public/favicon.ico
这样和上边一样,也达不到目的,原因一样
/public/
!/public/favicon.ico
下面的可以
/public/*
!/public/favicon.ico

只保留public目录下的所有a{一个字符}z.{后缀名}的所有文件
/public/*
!/public/a?z.*


*.a

!lib.a

会忽略所有.a结尾的文件,如repository/hello.a,repository/x/good.a,但是不会忽略repository/lib.a,repository/x/lib.a

/TODO

仅仅忽略repository/TODO文件夹下的所有内容和repository/TODO文件,但是不会忽略repository/x/TODO文件夹或文件

TODO/

会忽略repository/TODO文件夹下的所有内容,但不会忽略repository/TODO文件以及repository/x/TODO文件夹或文件

/TODO:

会忽略repository/TODO文件,不会忽略repository/TODO文件夹,:结尾表示文件,/结尾表示文件夹

doc/*.txt
会忽略repository/doc/notes.txt,repository/x/doc/notes.txt,但不会忽略repository/doc/server/arch.txt

!/bin/run.sh
不忽略repository/bin/run.sh

**/foo

忽略repository/foo, repository/a/foo, repository/a/b/foo等

debug/*.obj
忽略repository/debug/io.obj,不忽略 repository/debug/common/io.obj 和 repository/tools/debug/io.obj

[Ll]og/
!/Common/Log/

忽略Log和log文件夹,除了....../Common/Log


.gitignore生效

如果暂存区已经存在a.txt,然后在.gitignore添加一行a.txt后,git add仍旧会把a.txt提交到暂存区进而提交到版本库。
解决办法:
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
说明:先清空暂存区,那么工作区的所有文件都变成未追踪的,再次提交就可以了。值得注意的是,git rm -r --cached .时,要避免丢失其他非忽略文件的更新,git add . 时要避免提交了不想被忽略但是又不想本次就git add的文件。
所以上述做法,最好在当前工作告一段落暂存区和工作区完全一样的情况下,再进行此操作。

当然也可以针对性的在暂存区删除被忽略的文件,或者先将暂存区被忽略的文件恢复到工作区,再从暂存区删除被忽略的文件,再进行git add。

检查是否被忽略

检查public目录是否已经被忽略
git check-ignore public/
如果被忽略,回车后命令行输出路劲名,没被忽略,则什么也不输出。

查看是哪一条规则导致public目录被忽略
git check-ignore -v public/

查看文件的状态进行判断
git status

列出所有被忽略的文件
git status -s --ignore