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

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

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

本机私有忽略,不动共享的 .gitignore:对未跟踪文件,把规则写进 .git/info/exclude(语法与 .gitignore 相同,但该文件不会进版本库);对已跟踪文件的本地改动(如本地配置文件),不要把 skip-worktree 当成可靠忽略方案;优先改用已跟踪模板与未跟踪本地配置。

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

exclude_path=$(git rev-parse --git-path info/exclude)
echo "my-local-notes/" >> "$exclude_path"
echo "*.local.js" >> "$exclude_path"

语法与 .gitignore 完全一致,只存在于本地 Git 元数据中,队友克隆不到;关联 worktree 可能共享此文件,不能假设每个工作区完全独立。

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

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

此命令主要服务稀疏检出,不应推荐用来隐藏本地数据库配置或调试开关;文件仍被跟踪,标记不保证所有命令都忽略它。

注意副作用:pull/switch 等可能报错、更新或清除标记,不能保证本地内容永久保留;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 -t | grep '^S'(S 标记即 skip-worktree)。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台