git的.gitignore 排除文件夹和文件 保留子文件夹

1.约定:

/   是你本机的git目录的根,不是Linux系统的/(根);
    /指的是你在目录下执行 git init的那个目录,里面有.git文件夹的 

 例如:

# cd /opt/test/
# git init
# touch test.txt
# ls -l /opt/test/test.txt

 上面test.txt的根指的就是test/

 

2.注释: .gitignore里注释用#号

 

3.目录结构

# cd /opt/test/
# ls 
t1.txt
test.txt 
t2/
t2/t1.txt
t2/t2.cc
t2/t3/t.py

 

 

 在.gitignore里写入以下内容

 

情况一: 不想让,/opt/test/目录和所有子下的t1.txt 上传到仓库

t1.txt 

 

情况二: 不想让,/opt/test/下的 t1.txt 上传

/t1.txt

 

情况三: 不想让,所有后缀为txt的文件上传

*.txt

 

 情况四:不想让,t2/目录下的文件和目录上传

t2/*

 

 情况五:不想让,t3目录上传

t2/t3/

 

 情况六:想让,t2/目录下 t3/ 子目录上传

!t2/t3/

 或

!/t2/t3/

 

注意
尾随的 /* 很重要:

模式 dir/ 排除了一个名为 dir 的目录以及(隐式地)它下的所有内容.

使用 dir/,Git 永远不会查看 dir 下的任何内容,因此永远不会将任何取消排除"模式应用于 dir.

模式dir/* 没有说明dir 本身;它只是排除 dir 下的所有内容.使用 dir/*

Git 将处理 dir 的直接内容,让其他模式有机会取消排除"某些内容(!dir/sub/).

 

如果已经提交过的文件或者文件夹怎么办?此时更改.gitignore文件对已经提交的文件是无效的。
1 首先,编辑.gitignore文件。
2 然后如果是单个文件,可以使用如下命令从仓库中删除:
   git rm --cached logs/xx.log
  如果是整个目录:
   git rm --cached -r logs
  如果文件很多,那么直接
  git rm --cached -r .
  如果提示某个文件无法忽略,可以添加-f参数强制忽略。
   git rm -f --cached logs/xx.log
3 然后
  git add .
  git commit -m "Update .gitignore"

  把被忽略的某个文件强制添加回去:
  git add -f filename

  ignore规则检查:
  git check-ignore

4 一些规则
a# 忽略所有 .a 结尾的文件
!lib.a  # 其他都不上传,但 lib.a 除外(lib.a上传)
/TODO  # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/  # 忽略build/ 目录下的所有文件
doc/.txt  # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

 

 

 

 

参考:

https://www.it1352.com/2639226.html

https://learnku.com/articles/65721

http://t.zoukankan.com/Excr-p-12588385.html

https://blog.csdn.net/cainiao1412/article/details/109517218

https://www.cnblogs.com/superfeeling/p/15936393.html

https://www.cnblogs.com/shamshing/p/15357578.html

https://blog.csdn.net/nyist_zxp/article/details/119887324

https://www.jianshu.com/p/854672c36692

https://www.jb51.net/article/149021.htm

https://www.cnblogs.com/superfeeling/p/15936393.html

 

posted @ 2022-08-26 17:12  悟透  阅读(5189)  评论(0)    收藏  举报