0


GIt系列(二)忽略文件(.gitignore)

一 .gitignore 的作用

如果你不想让本地仓库的所有文件都上传到远程仓库中,而是有选择的上传一部分的文件,比如说依赖文件,测试文件你不想提交,
可以通过 ".git目录 " 下的 .gitignore 文件,选择忽略这些文件。

二 .gitignore使用规则

2.1 在工作区创建 .gitignore

工作区:包含 .git目录的上一级目录,详见:GIt系列(一)中的工作区(Working Directory)

LiYapeng@Lenovo MINGW64 /d/Local_Warehouse(master)
$ touch .gitignore  # 创建.gitignore文件,要在工作区创建,和 .git目录位于同一级目录下,在其它位置可能没用
LiYapeng@Lenovo MINGW64 /d/Local_Warehouse(master)
LiYapeng@Lenovo MINGW64 /d/Local_Warehouse(master)
$ ls -al
-rw-r--r--1 LiYapeng 1971210 Apr 2519:53.gitignore
drwxr-xr-x 1 LiYapeng 1971210 Apr 2514:00.git/ # 用了ls-al 出现 .git/,这是工作区,要在该路径下创建 .gitignore,其它位置可能没用

2.2 .gitignore的语法

#:注释符,开头的行表示注释行
*:通配符,用来匹配零个或多个字符
?:用来匹配单个字符
** :匹配多级目录,可在开始,中间,结束

*.a表示忽略.a文件,工作区内都忽略,不管在工作区内的路径在哪里
[]:用来匹配括号内的任一字符,如[abc]
[0-9]:在[]中匹配0至9的数
[ ^ ] : 表示否定, [ ^0-4 ] .c 忽略除了 0 至 4之外的 .c 文件 , 忽略 3.c,不忽略 5.c
!:用来否定忽略,前面用了 *.c , !1.c , 否定忽略对1.c的忽略
/ 文件名:/a 如/a表示忽略根目录下的a文件,但不忽略子目录里的b/a文件 和 c/d/a文件
文件名 /:b/表示忽略b文件夹里的所有文件

**/abc: 表示忽略 /abc,a/abc,a/b/abc 等

a/**/b: 表示忽略a/b, a/123/b, a/fgh/dfghdfg/b等

.gitignore只能忽略那些未追踪的文件,如果某些文件已经被追踪中,即如果之前已经添加(add)到暂存区,则修改.gitignore是无效的。
解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

git add 1.txt # 1.txt 已经添加(add)到暂存区
vim .gitignore # 在 .gitignore中编辑内容,添加 *.txt
touch 2.txt # 创建 2.txt
git add . # 无法添加 2.txt 到暂存区
git commit -m "abcd" # 1.txt 被提交,2.txt不被提交到版本库
git push origin # 1.txt 被推送到远程仓库,2.txt不被推送到远程仓库

本地缓存删除(改变成未track状态),然后再提交

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

2.3 进入 .gitignore 编辑内容

$ vim .gitignore # 用 vim 进入 .gitignore 编辑内容

Windows环境下,选中打开方式,点击鼠标右键,选中记事本,点击鼠标左键,进入 .gitignore 编辑内容
用记事本进入 .gitignore 编辑内容

2.4 .gitignore 的使用案例

.bin     #表示忽略所有 .bin 结尾的文件或目录
?1.bin   #表示忽略所有的(某一个字符)1.bin的文件或目录,忽略 a1.bin,11.bin,x1.bin ,不忽略aa1.bin,111.bin,xx1.bin[1-9].c  #表示忽略 1至9.c, 不忽略1.cpp , 99.c[1-9].c  #表示忽略 1至9.(任何).c, 忽略1.ac , 9.c, 6.ac, 不忽略 100.ac , 1.cpp
.[oa]#表示忽略 file.o,file.a ,不忽略 file.cpp!a.bin   #表示但a.bin除外
/a       #表示仅仅忽略项目根目录下(和.git 位于 同一级目录下 )的 a 文件或目录,不包括 child/a
b/       #表示忽略 b/目录下的所有文件,忽略整个b文件夹
c/.txt   #表示会忽略c/a.txt但不包括 c/d/e.txt
d/       #表示,忽略当前路径下的d文件夹(目录),该文件夹下的所有内容都会被忽略,不忽略d 文件(非目录)
/bin     #表示忽略项目根目录下的bin文件
fd/      #表示忽略目录 fd下的全部内容,项目根目录下的 /fd1/ 目录 和 子目录 /child/fd/ 目录,都会被忽略
/fd1/    #表示忽略项目根目录下的 /fd1/ 目录的全部内容,不忽略/fd1, /a/fd1, /b/e/fd1/v
/a/b/*   #表示忽略项目根目录下的 /a/b/ 目录的全部内容,不忽略/a/c, /x/a/b
/.c      #表示忽略1.c,不忽略 child/2.c
e/.cpp   #表示忽略e/123.cpp,不忽略 a/b/234.cpp和1/2/4.cpp
/f       #表示忽略/f,a/f,a/b/f等
a//b     #表示忽略a/b, a/asdf/b, a/q/w/b等!/k/m.sh #表示不忽略k目录下的m.sh文件
*.txt    #表示忽略所有 .txt 文件或目录
m.out    #表示忽略当前项目根目录里面的 m.out文件和目录

2.5设置全局生效

首先创建文件,然后设置全局生效

touch ~/.gitignore_global   # 创建.gitignore_global
vim ~/.gitignore_global     # 设置忽略规则,vim 怎么用这里不讲 ,csdn上有搜索即可 
# 也可用记事本代替 vim 设置忽略规则 .gitignore_global ,打开记事本的方法 在2.1进入 .gitignore  编辑内容中有
git config --global core.excludesfile ~/.gitignore_global #设置所有的本地仓库生效
标签: git

本文转载自: https://blog.csdn.net/l7077/article/details/130372271
版权归原作者 嵌入式笔记 所有, 如有侵权,请联系我们删除。

“GIt系列(二)忽略文件(.gitignore)”的评论:

还没有评论