git忽略未被跟踪和已被跟踪的文件

独自空忆成欢 提交于 2021-02-15 05:06:41

git的文件操作本质上来讲是基于文件索引来做追踪的。
 
至于忽略未跟踪(untrack)文件文件,git提供了三种方式
1 .gitignore
2 git config --global core.excludesfile
3 git/info/exclude
网上有很多参考资料,可自行查阅。
不同语言项目大致需要忽略的文件,也已有大量现成模板。
 
至于如何忽略已跟踪(tracked)文件,使得当本地某系文件(尤其是配置文件发生改变时,不需要体现在git变化列表中)有以下两种方式:
1.git update-index --assume-unchanged /path/file 与git update-index --no-assume-unchanged /path/file
2.git update-index --skip-worktree /path/file 与git update-index --no-skip-worktree /path/file
此时再对/path/file进行更改,你会发现不会体现在git status列表中
有很多文章介绍采取git rm --cache的方式,不可取,这种方法本质上是将所有文件都删除了
解释:
--assume-unchanged 假定开发人员不会更改文件。此标记旨在为无变化文件夹(如 SDK)改善性能。
--skip-worktree 用于命 GIT 不再染指特定文件——即便开发人员可能更改它——的情形。例如,如果主源码库上游承载某些即将投入生产的配置文件而你不希望意外的提交影响到那些文件,--skip-worktree 正是你的菜。
 
所以我建议使用git update-index --skip-worktree来进行忽略
用以下命令可以查询被skip-worktree命令忽略的文件
git ls-files -v | grep -i ^S
 
极端情况:
某些已跟踪且被跳过的文件在master分支上发生了变化,与本地冲突导致无法进行pull操作。
建议解决步骤如下:
1.检查被跳过的文件
git ls-files -v | grep -i ^S
window下没有grep命令,执行
git ls-files -v

2.发现被跳过的文件在冲突列表中则取消跳过

git update-index --no-skip-worktree /path/file

3.使用stash暂存本地版本

git stash

4.拉取最新文件

git pull

5.自动解决

git stash pop

6.各种方式解决冲突

...

7.重新将该文件加入跳过列表
git update-index --assume-unchanged path/file

 

git 提供多种处理冲突的方法,自行搜索。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!