匹配规则
- 忽略具体目录。正斜杠
/
开头,代表当前 .gitignore 文件下的绝对路径
。 - 忽略所有同名目录。正斜杠/结尾,表示文件夹。例:build/ 即忽略
所有
build 文件夹,子目录下的build 目录也忽略。 - 取消忽略。使用
!
开头。比如前面使用 *.apk,下面使用!a.apk,则此a.apk不被忽略。如果排除了该文件的父级目录
,则使用!
也不会再次被包含。 - 匹配零个或多个字符。使用
*
符号。如*.[oa]忽略所有以".o"或".a"结尾; - 匹配制定列表的任一字符。使用
[]
符号。如 [abc],也可以在括号内加连接符,如 [0-9] 匹配0至9的数; - 匹配单个字符。使用
?
符号。 - ** 匹配多级目录,可在开始,中间,结束
示例:
/mtk/ 过滤整个文件夹
*.zip 过滤所有.zip文件
/mtk/do.c 过滤某个具体文件
!/mtk/one.txt 取消此文件的忽略
.ignore 配置文件按行从上到下
进行规则匹配,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效.
示例:
a)忽略所有同名目录的文件。fd1/*
说明:忽略目录 fd1
下的全部内容。不管是根目录下的 /fd1/
目录,还是子目录 /child/fd1/
,都会被忽略;
b)忽略具体目录的文件:/fd1/*
说明:忽略根目录下的 /fd1/
目录的全部内容;
c)规则:
/*
!.gitignore
!/fw/bin/
!/fw/sf/
说明:忽略全部内容,但是不忽略 .gitignore 文件、根目录下的 /fw/bin/ 和 /fw/sf/ 目录;
忽略规则的优先级
在 .gitingore 文件中,每一行指定一个忽略规则,Git检查忽略规则的时候有多个来源,它的优先级如下(由高到低):
1)从命令行中读取可用的忽略规则
2)当前目录定义的规则
3)父级目录定义的规则,依次递推
4)$GIT_DIR/info/exclude 文件中定义的规则
5)core.excludesfile中定义的全局规则
在Git项目中定义.gitignore文件
.idea
composer.lock
*.log
*.css.map
.sass-cache
/source/application/config.php
/source/application/database.php
/source/runtime/*
/source/.buildpath
/source/.project
/source/.settings
/web/.htaccess
/doc
在Git项目的设置中指定排除文件
这种方式只是临时指定该项目的行为,编辑项目下的 .git/info/exclude文件,将需要忽略提交的文件写入其中
定义Git全局的 .gitignore 文件
还可以设置全局的git .gitignore文件来管理所有Git项目的行为。这种方式在不同的项目开发者之间是不共享的,是属于项目之上Git应用级别的行为。这种方式也需要创建相应的 .gitignore 文件,可以放在任意位置。然后在使用以下命令配置Git:
git config --global core.excludesfile ~/.gitignore
Git忽略规则(.gitignore配置)不生效原因和解决
1).gitignore只能忽略那些原来没有被track的文件.如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的
。
2)想要.gitignore起作用,这些文件必须不在暂存区中才可以。
.gitignore只忽略没被staged(cached)文件,否则加入.gitignore时一定要先从staged移除,才可以忽略。
方法一: git清除本地缓存(改变成未track状态)后再提交:
git rm -r --cached 文件/文件夹名字
git add .
git commit -m 'update .gitignore'
git push -u origin master
方法二:
# 新增忽略文件
git update-index --assume-unchanged source/application/database.php
# 取消忽略文件
git update-index --no-assume-unchanged source/application/database.php
在使用.gitignore文件后如何删除远程仓库中以前上传的此类文件而保留本地文件
在使用git和github的时候,之前没有写.gitignore文件,就上传了一些没有必要的文件,在添加了.gitignore文件后,就想删除远程仓库中的文件却想保存本地的文件。这时候不可以直接使用"git rm directory",这样会删除本地仓库的文件。
可以使用"git rm -r –cached directory"来删除缓冲,然后进行"commit"和"push",这样会发现远程仓库中的不必要文件就被删除了,以后可以直接使用"git add -A"来添加修改的内容,上传的文件就会受到.gitignore文件的内容约束
git库所在的文件夹中的文件大致有4种状态
Untracked:
未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
Unmodify:
文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改,
而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
Modified:
文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态,
使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改
Staged:
暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态.
执行git reset HEAD filename取消暂存, 文件状态为Modified
Git 状态 untracked 和 not staged的区别
1)untrack 表示是新文件,没有被add过,是为跟踪的意思。
2)not staged 表示add过的文件,即跟踪文件,再次修改没有add,就是没有暂存的意思
官方文档:https://git-scm.com/docs/gitignore
Git忽略提交 https://www.cnblogs.com/kevingrace/p/5690241.html
Git中使用.gitignore忽略文件的推送
gitignore语法规则及踩过的坑 https://blog.csdn.net/tianyake_1/article/details/112647944