本文主要介绍如何在git中删除文件但是让git不追踪这些删除操作
自己在使用react
开发一个包含大量媒体文件的网站时,项目初期临时将这些媒体文件都放在项目中,直接使用访问本地文件的方式读入媒体文件。
这样做会导致因为项目中包含大量媒体文件,本地开发时React Hot Loader
在compiling
的时候速度会非常慢,严重影响修改代码后在浏览器查看页面效果的效率。
但对于生产环境Build
时,影响不大。所以考虑在将文件同步到代码仓库后,本地删除这些媒体文件,但是删除的操作不能让git
同步到代码仓库,否则会导致生产环境pull
下来的仓库里也没有媒体文件,影响业务使用。
所以解决问题的重点在于: 如何删除本地已经提交过的目录下的文件,但是让git不追踪这些删除操作(即,不显示在git的changes里面)
gitignore
可以ignore
掉还没进到项目里的文件,或者是非删除操作的change,但是对于删除一个已经在git repo的文件,.gitignore
不起作用。
关于git
删除文件或者停止追踪文件的方法,可以有:
.gitignore
fileexclude
filegit update-index
git rm
git
自带的命令中可以使用git update-index --skip-worktree
来ignore
掉指定的文件,执行命令之后再删除文件,git
的changes中也不会列出这个文件被删除的change。
因为git update-index --skip-worktree
是针对一个文件,所以对于一个文件夹下的文件和子文件夹的全部文件,就得需要配合其他linux
命令来达成,如下:
cd /path/to/folder/want/to/delete
git update-index --skip-worktree
命令:find . -maxdepth 1 -type d \( ! -name . \) -exec bash -c "cd '{}' && pwd && git ls-files -z ${pwd} | xargs -0 git update-index --skip-worktree" \;
git
不会追踪这些删除写文不易,如果对你有帮助的话,来一波点赞、收藏、关注吧~👇