场景描述
在使用git的时候,项目开始我们设置了一些需要忽略的文件和文件夹,比如一些工程文件和项目依赖库,以免多个开发者本地环境不一样和工程文件过大的问题。但后期发现那些已经被我们忽略掉的文件需要重新添加或者忽略的文件夹里面有某个文件(夹)是需要大家一致的,需要设置一下排除,下面我们针对这两种场景讲一下解决办法
设置忽略排除
设置忽略我们通常是在.gitignore
文件中设置,比如在laravel
框架中我们设置忽略整个vendor文件夹,则在.gitignore
中添加如下路径
/vendor/*
路径中的星号表示所有,如果需要这是后续的排除,这里的星号很重要
接下来我们设置忽略的文件夹中有一个文件夹里面的内容不需要忽略
!/vendor/laravel/framework/src/Illuminate/Auth/
!表示排除的意思,当然如果忽略某个文件就直接指定就行了,比如
!/vendor/laravel/framework/src/Illuminate/Auth/TokenGuard.php
好,设置忽略和设置忽略排除,这里就基本行了
重新添加已经被忽略过的文件(夹)
重新添加已经被忽略过的文件时,我们仅仅使用git add
是不行的,因为git仓库中根本没有那个文件,这时候我们需要加上-f参数来强制添加到仓库中,然后在提交。比如上面设置了忽略排除的文件TokenGuard.php我们需要重新加入
git add -f /vendor/laravel/framework/src/Illuminate/Auth/TokenGuard.php
然后在commit和push就行了
忽略已经提交过的文件
这里说点题外话,有的时候我们需要忽略掉以前提交过的文件,因为git已经索引了该文件所以我们先要删除掉该文件的缓存,如文件User.php已经提交过了,现在我们想忽略,这是我们先在.gitignore
中设置该文件为忽略,然后我们执行如下命令删除缓存
git rm --cached User.php
若是文件夹
git rm -r --cached folder/
然后我们在commit和push就好了
忽略目录中文件,保留目录结构
项目有的时候为了代码目录的完整性,需要保留目录本身,目录里面的文件都忽略。比如涉及用户上传相关的文件需要忽略,而上传目录有的时候因为权限的问题无法自动创建,所以需要保留目录本身。
我们只需要在需要保留的目录中添加一个.gitignore
文件,内容如下
# ignore all except .gitignore file
*
!.gitignore
当然第一行是一个注释,可以去掉。如果先前目录是被忽略的,则需要用git add -f
来强制添加在提交
还有一种情况是目录里面的文件不是忽略的,只是由于git无法提交空目录,所以可以在空目录中添加一个文件占位符,我们一般叫做.gitkeep
文件,里面内容是空的,这样目录就可以提交了