Git 取消文件跟踪

11 阅读2分钟

Git 取消文件跟踪的场景

我们在使用Git管理代码的时候,有时有一种场景,就是起初我们需要将某个文件提交到远程代码仓库,提交到代码库后,我们的后续对这个本地文件的更改就不再需要被Git跟踪了;典型的例子就是配置文件,比如我们Java Spring Cloud项目配置文件或者Flask .env配置文件,我们需要将配置模版提交到代码库并在团队间共享或者直接开源到外部,由于配置文件里面有自己公司或者个人的敏感信息,我们在补充了配置模版里面具体的值后不能提交给别人。

以Flask .env配置文件为例

我起初交给git管理并提交到代码库的模版如下,里面没有敏感信息,可以公开给团队成员或者直接开源到外部 截屏2024-04-02 15.11.11.png

当我提交模版后,实际运行项目需要填入具体的参数,这时这些参数是敏感信息,所以不能提交到代码库也不需要git管理了。 截屏2024-04-02 15.09.04.png

Git 取消文件跟踪的命令

对于从未被git跟踪的文件

如果一个文件从未被git本地跟踪过或者未提交到代码库,这时我们直接使用.gitignore中设置好不需要跟踪的规则即可

如下图我们指定了git忽略.env文件,这样如果你从未显式的将.env文件添加到本地或者远程代码库,那么git会自动忽略该文件 image.png

对已经被git跟踪的文件

如果某个文件已经显式的被添加到git本地库或者已经被别人提交到了远程代码库,你想在本地取消git对这个文件的跟踪,那么需要了解如下的git命令

取消跟踪

文件已经纳入了Git管理,想取消文件追踪,这样本地更改不再被管理

# 关闭跟踪某个文件,修改不提交
git update-index --assume-unchanged xxx.xxx

# 关闭追踪某个目录下的某种类型文件
git update-index --assume-unchanged /xxx/*.xxx

恢复跟踪

恢复跟踪已经被取消跟踪过的文件

# 恢复跟踪文件,修改提交
git update-index --no-assume-unchanged xxx.xxx
# 恢复追踪某个目录下的某种类型文件
git update-index --no-assume-unchanged /xxx/*.xxx

文件跟踪管理

# 列出关闭追踪的文件
git ls-files -v | grep '^h\ '
# 提取文件路径
git ls-files -v | grep '^h\ ' | awk '{print $2}'
# 恢复所有文件追踪
git ls-files -v | grep '^h' | awk '{print $2}' |xargs git update-index --no-assume-unchanged

参考