瞎扯淡 在 Git 的监视下 偷偷摸摸

lyb124553153 · 2019年07月08日 · 最后由 tinyfeng 回复于 2020年07月13日 · 3846 次阅读

GIT 提供了几种方式让你的本地文件修改,不被 GIT 追踪。

.gitignore

只要在.gitignore 里面加入你自己的文件,那么 git 就会忽略这些文件,不去追踪,可以说说大部分人的解决方案。

.git/info/exclude

修改.gitignore 会告诉别人你忽略了哪些文件。 程序员是一个充满了鄙视链的职业,用 IDE 的同学 一但在.gitignore 里面加入了 IDE 的配置文件,很快就会被同事拿鼻孔看。 建议大家不要冒这种风险。 这个时候 .git/info/exclude 文件就派上用场了,把你要忽略的文件写入.git/info/exclude,一样会被 git 排除,而且排除设置都是是保存在本地,所以排除信息不会共享到远程仓库,适用于一些不想跟别人分享的忽视。

以上方法都只适用未被 git 追踪的文件,一但被 git 追踪就没用了,但是接下来就有请下两个方法

git update-index --assume-unchanged

有些文件是要临时性排除的, 比如我在项目中,每次一跑 db:migrate,schema.db 上都会出现一堆不属于自己的改动。虽然可以直接手动撤销,但是如果有多次 migrate,每次都去撤销就比较费事的。 git update-index --assume-unchanged filename告诉 git。这个文件不是我改的,你别瞎说啊。 但是这个时候文件仍然在 git 的监视下,本地修改会被检出分支覆盖

如果有需要提交的改动 可以用 git update-index --no-assume-unchanged <file> 来撤销申明。

git update-index --skip-worktree

比 assume-unchanged 的方式 更进一步 是 skip-worktree,适用于 希望某些配置文件不会随着 git 更新而发生变化的时候用

区别是 assume-unchanged 是告诉 git 你没改过,所以检出分支,git 会把对应更新还原到分支的状态。

如果你想修改 git 追踪了的文件 举个例子 项目里有个 .rubocop.yml

Metrics/LineLength:
  Max: 113

行代码就这么低的分数,根本不适合我,直接改成

Metrics/LineLength:
  Max: 1000

因为 rubocop 已经被 git 追踪,如果把这么优秀的分数分享给同事,可能招来嫉妒的目光,顺便

git update-index --skip-worktree .rubocop.yml

这条命令基本用于各种需要本地定制化的文件

这标题。。。

Nice Work!

每次改 database.yml、xxx.yml, 都要回来找一下这个命令 😂 git update-index --skip-worktree

需要 登录 后方可回复, 如果你还没有账号请 注册新账号