• 「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不会追踪这些删除

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

  • 相关阅读:
    使用Python实现强化学习算法
    MySQL 并发事务问题和隔离级别 (事务篇 三)
    .NET delegate 委托 、 Event 事件,接口回调
    Docker Swarm 维护模式
    (附源码)spring boot学业指导系统 毕业设计 030958
    Iterator-Generator 迭代器和生成器
    【35kJava开发岗:基础篇】
    当食品制造业遇见数字化工具,如何借助S2B2C电商系统实现企业新增长
    Rust实战 | 用 RustRover 开发猜数字游戏
    Redis的使用(二)
  • 原文地址:https://blog.csdn.net/qq_41785288/article/details/133860185