Git update-index 忽略本地修改

寒江蓑笠翁大约 4 分钟gitVCSGitignore

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

由于文件内容不一样,就必须要解决冲突,解决冲突的思路取决于你是否想将本地修改推送到远程仓库。

不提交本地修改

  1. 撤销skip-worktree

    $ git update-index --no-skip-worktree .env.development
    
  2. 暂存文件

    $ git stash .env.development
    
  3. Pull更新代码

    $ git pull
    
  4. 应用暂存文件

    $ git stash pop
    
  5. 解决冲突合并后,重新给文件加上skip-worktree

    $ git update-index --skip-worktree .env.development
    

提交本地修改

  1. 撤销skip-worktree

    $ git update-index --no-skip-worktree .env.development
    
  2. 提交该文件

  3. Pull更新代码

  4. 解决冲突

  5. 将合并后的文件推送到远程仓库

上次编辑于:
贡献者: 246859