A. 如何在Git中忽略某些文件
1. 介绍
有些文件是我们并不想加入也无需被添加到 Git 管理中,同时也不希望他出现在未跟踪列表中。例如在编译过程中生成的 o 文件。 “.gitignore” 文件可以达到这个效果。
2. 全局与局部
.gitignore 有全局和局部两种:
2.1 全局
通过修改全局配置 git config 中的 excludesfile 指定全局忽略文件。设置方法:
$git config --global core.excludesfile ~/.gitignore
修改 ~/.gitignore 这个文件将作用于所有 git 项目,并且作用于项目实例中的所有被跟踪的目录。比如说我们可以在该文件中添加 *.o 来忽略所有 .o 文件。
2.2 局部
忽略文件默认为当前目录的 .gitignore ,但它只作用于当前目录下。上面说到,在全局的 .gitignore 文件中添加 *.o 会忽略所有目录下产生的 .o 文件,但在当前目录下的 .gitignore 中添加 *.o 却只能忽略当前目录下的 .o 文件。
3. 语法
.gitignore 的语法规范如下:
·所有空行或者以注释符号 # 开头的行都会被 Git 忽略;
·可以使用标准的 glob 模式匹配。 * 匹配模式最后跟反斜杠(/)说明要忽略的是目录。 * 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
glob 模式匹配:
·星号(*)匹配零个或多个任意字符;
·[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
·问号(?)只匹配一个任意字符;
·[0-9a-zA-Z] 在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9a-zA-Z] 表示匹配所有 0 到 9 的数字和所有字母);
·\ 转义字符。
注:理论上来说,在要忽略的格式文件后面添加注释是允许的,但经过我的验证,结果发现这样子操作并不能达到预期的效果。
4. 例子
一个 .gitignore 例子。
# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
B. 文件移除 git 版本库但不删除文件
执行以下命令
git rm -r .gitignore --cached
再次提交下
git commit -m '删除过滤文件'
git status
过滤规则生效
git push
.gitignore忽略已加入版本控制的文件
问题:.gitignore中已经标明忽略的文件目录下的文件,在git push的时候还会出现在push的目录中。
原因:在git忽略目录中,新建的文件在git中会有缓存,如果某些文件已经被纳入了版本管理中搏举,就算是在.gitignore中已经声明了忽略路径也是不起作用的
解决:这时候我们就应该先把本地缓存删除,然后再进行git的push,这样就不会出现基丛碧忽略的文件了。git清郑喊除本地缓存命令如下:
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
C. 如何创建.gitignore文件,忽略不必要提交的文件
1、进入项目的目录下,点击右键单击【git bash】。