一、配置全局过滤
Step1:在根目录新建一个 .gitignore_global 文件,在里面添加忽略的规则
Step2:在 ~/.gitconfig 中添加 excludesfile 配置,即
git config --global core.excludesfile ~/.gitignore_global
效果图
vim .gitignore_global
# ============================================
# ignore all the *.tar.gz file including subdir
*.tar.gz
# ============================================
# ignore all the .history dir including subdir
.history/
.ipynb_checkpoints/
Step3: 如果你设置完配置文件,发现你的git仓库还是无法像你想的一样顾虑掉文件,请看下面 第二部分 和第三部分 的说明
二、局部配置优先于全局配置
设置全局过滤配置文件 .gitignore_global 后,如果在某个版本库里也设置了.gitignore (局部过滤配置文件),那 git 会优先考虑局部的过滤规则,然后再考虑全局
举个例子:
在全局你设置了过滤.ipynb_checkpoints/
,而在局部设置了!.ipynb_checkpoints/
,则当前git仓库库不会过滤掉 .ipynb_checkpoints
文件夹
三、文件夹 .ipynb_checkpoints 之前已提交远端,无法再顾虑?
问题描述
我明明设置好了全局过滤,并且局部没有冲突,但为什么还是无法过滤掉某个文件夹呢
分析原因
添加忽略之后,已经提交到版本库中的文件是无法忽略的。因为 .gitignore 只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
解决方法
方法一
先把本库文件中需要过滤的文件移到本库外面,提交一次,更新项目库;然后再把这些文件移回原来的位置,再提交一次就会过滤掉这些文件了。
方法二(推荐)
可以Google搜索 git rm命令 去删除已经添加到仓库的文件
(1) 删除已经添加到远端的.DS_Store文件
- 删除已经加到远端的当前目录下的.DS_Store文件
git rm --cached .DS_Store
- 删除已经加到仓库的所有目录下的.DS_Store文件
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
(2) 删除已经添加到远端的 .ipynb_checkpoints文件夹
find . -name .ipynb_checkpoints -print0 | xargs -0 git rm -r --ignore-unmatch
执行后git版本历史会删除所有已提交的 .ipynb_checkpoints 文件夹,注意这时并没有删除你本地的.ipynb_checkpoints 文件夹
如果出现一下报错
使用下面命令即可
find . -name .ipynb_checkpoints -print0 | xargs -0 git rm -r --cached --ignore-unmatch
四、过滤规则语法
.gitignore
(局部)或.gitignore_global
(全局)过滤配置文件的规则语法,请看 这里
官方文档:https://git-scm.com/docs/gitignore