如何让 Git 只在本机忽略某些文件(不共享 .gitignore)

本机私有忽略两种方式:未跟踪文件写入 .git/info/exclude(语法同 .gitignore,不进版本库);已跟踪文件的本地改动用 git update-index --skip-worktree <文件>。个人 IDE 配置也可放全局 ~/.gitignore_global。

最佳实践
Git 分支协作与合并示意

本机私有忽略,不动共享的 .gitignore:对未跟踪文件,把规则写进 .git/info/exclude(语法与 .gitignore 相同,但该文件不会进版本库);对已跟踪文件的本地改动(如本地配置文件),用 git update-index --skip-worktree <文件> 让 Git 假装它没变。

方法一:.git/info/exclude(未跟踪文件)

echo "my-local-notes/" >> .git/info/exclude
echo "*.local.js" >> .git/info/exclude

语法与 .gitignore 完全一致,只存在于你的 .git 目录里,队友看不到。

方法二:skip-worktree(已跟踪文件)

git update-index --skip-worktree config/database.yml   # 本地改动不再出现在 status
git update-index --no-skip-worktree config/database.yml # 恢复跟踪

典型场景:数据库配置、本地调试开关——文件必须在仓库里有默认版,但你本地的修改不想提交。

注意副作用:git pull 若涉及该文件会报错要求处理;stash 也会跳过它。

方法三:全局忽略(个人环境文件)

git config --global core.excludesFile ~/.gitignore_global
echo ".idea/" >> ~/.gitignore_global
echo ".DS_Store" >> ~/.gitignore_global

适合你所有仓库都该忽略的个人文件(IDE 目录、系统垃圾文件)。

常见问题(FAQ)

Q:skip-worktree 和 assume-unchanged 用哪个?

skip-worktree 主要服务于稀疏检出,assume-unchanged 是文件未变的性能提示,两者都不是可靠的本地配置忽略机制。已跟踪的配置应改为模板文件,加一个未跟踪的本地配置文件或环境变量,避免后续切分支、合并时发生冲突。

Q:clone 后 .git/info/exclude 还在吗?

不在了,它在 .git 目录里随仓库存在,重新克隆需要重配。全局 excludesFile 则跟随你的账号配置。

Q:怎么查看哪些文件被 skip-worktree 了?

git ls-files -v | grep '^S'(S 标记即 skip-worktree)。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台