Git update-index 忽略本地修改
大约 4 分钟
Git update-index 忽略本地修改

使用Git版本控制系统进行本地开发时,如果你不想Git追踪某一个文件或文件夹,我们都知道通过.gitignore
来忽略这些文件,但是.gitignore
文件是需要提交到远程仓库上的,如果你仅仅只是想忽略掉自己本地的文件或文件夹,而不想影响远程仓库上的其它开发者,之前的办法就行不通了。一个非常经典的例子就是现代前端开发中都会用到的.env
文件,我们会在.env.development
中设置开发环境的接口BASE_URL,但不是每个人本地开发的BASE_URL都是相同的,所以你自己做的修改不能提交到远程仓库上,但这个文件也不能被.gitignore
忽略。
skip-worktree
在这种情况下,我们可以使用如下的命令,来忽略本地的修改
$ git update-index --skip-worktree [<file>...]
当然你也可以选择撤销
$ git update-index --no-skip-worktree [<file>...]
如果你想查看工作树中哪些文件被skip了,可以使用下面的命令
$ git ls-files -v | grep ^s
这些命令使用起来很简单,没什么难度。
潜在问题
如果只是一般使用那基本上不会有问题,但如果多人协作开发,使用skip-workree
就可能会出现一些情况,比如说,你本地忽略了.env.devlopment
文件,但是另一个开发者在里面添加了一个新的环境变量,并推送到远程仓库,这时候你尝试通过pull
来更新代码,可能会如下类似的报错
error:
Your local changes to the following files would be overwritten by merge:
vue-project/.env.development
Please commit your changes or stash them before you merge.
Aborting
由于文件内容不一样,就必须要解决冲突,解决冲突的思路取决于你是否想将本地修改推送到远程仓库。
不提交本地修改
撤销
skip-worktree
$ git update-index --no-skip-worktree .env.development
暂存文件
$ git stash .env.development
Pull更新代码
$ git pull
应用暂存文件
$ git stash pop
解决冲突合并后,重新给文件加上
skip-worktree
$ git update-index --skip-worktree .env.development
提交本地修改
撤销
skip-worktree
$ git update-index --no-skip-worktree .env.development
提交该文件
Pull更新代码
解决冲突
将合并后的文件推送到远程仓库