git的本地文件忽略功能

2024/06 05 18:06

需求

git管理下的某些文件或者目录,要本地删了它,并且忽略它

1、使用.gitignore会影响其它人

2、对于已上传(追踪)的文件,使用.gitignore是无效的

3、对于已上传(追踪)的文件,使用skip-worktree是无效的

所以可以使用assume-unchanged功能

以下命令为linux版本,如果是windows系统,右键菜单Open Git Bash here亦可

update-index命令

在git根目录,用bash打开命令行,可以执行相应的git命令

git的update-index选项说明:

–assume-unchanged 本地忽略,停止文件追踪

–no-assume-unchanged 撤销忽略

–really-refresh 刷新,无视assume-unchanged

忽略文件

git update-index --assume-unchanged Assets/tmp.txt

不忽略文件

git update-index --no-assume-unchanged Assets/tmp.txt

忽略目录

–assume-unchanged只能忽略文件,所以需要递归此目录所有文件

在bash中cd到目录,然后

git ls-files -z | xargs -0 git update-index --assume-unchanged

不忽略目录

如果文件已经被删了,使用shell的ls命令是无法获得文件名的,所以需要先really-refresh

先看一下really-refresh
git update-index --really-refresh
输出了 Assets/UXTools/Res/UX-GUI/Res/Fonts.meta: needs update
需要截取: needs update前面的文件名进行命令行恢复

执行以下命令即可递归不忽略所有文件

git update-index --really-refresh | awk -F ':' '{print $1}' | xargs git update-index --no-assume-unchanged

awk说明

-F ':' 为指定:作为分隔符
$1 为第1个截取参数
'{print $1}' 为打印第1个参数
也可以添加过滤条件
git update-index --really-refresh | grep Assets/MyEditor/ | awk -F ':' '{print $1}' | xargs git update-index --no-assume-unchanged