• 「Git|场景案例」从项目中删除之前commit过的文件并且让git不追踪删除操作


    本文主要介绍如何在git中删除文件但是让git不追踪这些删除操作

    场景说明

    自己在使用react开发一个包含大量媒体文件的网站时,项目初期临时将这些媒体文件都放在项目中,直接使用访问本地文件的方式读入媒体文件。

    这样做会导致因为项目中包含大量媒体文件,本地开发时React Hot Loadercompiling的时候速度会非常慢,严重影响修改代码后在浏览器查看页面效果的效率。

    但对于生产环境Build时,影响不大。所以考虑在将文件同步到代码仓库后,本地删除这些媒体文件,但是删除的操作不能让git同步到代码仓库,否则会导致生产环境pull下来的仓库里也没有媒体文件,影响业务使用。

    所以解决问题的重点在于: 如何删除本地已经提交过的目录下的文件,但是让git不追踪这些删除操作(即,不显示在git的changes里面)

    解决方案

    gitignore可以ignore掉还没进到项目里的文件,或者是非删除操作的change,但是对于删除一个已经在git repo的文件,.gitignore不起作用。

    关于git删除文件或者停止追踪文件的方法,可以有:

    • Ignore changes to untracked files by using a .gitignore file
    • Ignore changes to untracked files by using an exclude file
    • Stop tracking a file and ignore changes using git update-index
    • Stop tracking a file and ignore changes using 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不会追踪这些删除

    写文不易,如果对你有帮助的话,来一波点赞、收藏、关注吧~👇

  • 相关阅读:
    Revit API: Pipe & Duct -管道和风管
    nginx的优化和防盗链
    Swift页面添加水印
    MLX90640 开发 微型红外成像仪
    艾美捷双链RNA定量试剂盒试验方案
    ROS-Noetic安装与环境搭建-Ubuntu20
    springBoot 多次请求限制
    【C++STL基础入门】list的增、删
    改进YOLOv7 | 头部解耦 | 将YOLOX解耦头添加到YOLOv7 | 涨点杀器
    【docker】harbor私有仓库部署与管理
  • 原文地址:https://blog.csdn.net/qq_41785288/article/details/133860185