git中排除文件和目录
需求是这样的,我想把我的obsidian上传到github,上传时需要排除.obsidian目录,于是就有了这一篇文章
一、排除某个文件
Git 桌面版(以 GitHub Desktop 为主)排除文件,核心是通过图形界面操作或手动配置 .gitignore/ 本地排除规则,且仅对未跟踪文件生效;已跟踪文件需先取消追踪再忽略。以下是具体可操作步骤:
图形界面快速排除(推荐,适用于未跟踪文件)
- 打开 GitHub Desktop 并进入目标仓库,切换到 "Changes" 页签。
- 找到需排除的未跟踪文件,右键点击该文件 / 文件夹。
- 在弹出菜单中选择以下选项之一:
- Ignore "文件名":仅忽略当前文件 / 路径。
- Ignore all files like this:忽略所有同名文件(递归)。
- Ignore all files with extension ". 后缀":忽略所有该后缀的文件。
- 操作后,软件会自动在仓库根目录生成 / 更新
.gitignore文件,将规则写入其中。 - 提交
.gitignore的变更,使规则生效并同步到团队。
手动配置 .gitignore(共享规则,适用于团队协作)
-
在仓库根目录新建文本文件,命名为
.gitignore(注意开头的点)。 -
按以下规则编写忽略内容(示例):
gitignore# 注释行 node_modules/ # 忽略依赖目录 *.log # 忽略所有.log文件 /dist/ # 仅忽略根目录下的dist目录 !important.log # 不忽略important.log(取反) **/temp/* # 递归忽略所有temp目录下的文件 -
保存
.gitignore后,在 GitHub Desktop 中提交该文件,规则对所有仓库协作者生效。
本地排除(仅自己生效,不共享规则)
若不想将规则提交到仓库,可使用本地排除:
- 打开仓库根目录下的
.git/info/exclude文件(需显示隐藏文件)。 - 按
.gitignore语法添加规则,例如*.bak或local-dev.env。 - 保存文件即可,该规则仅在本地生效,不会被 Git 追踪和提交。
处理已跟踪文件(关键排障步骤)
若文件已被提交到版本库,直接忽略无效,需先取消追踪:
-
打开终端,进入仓库目录。
-
执行命令取消追踪(保留本地文件):
bash# 单个文件 git rm --cached 文件名 # 目录(递归) git rm --cached -r 目录名 -
提交取消追踪的变更(这一步会从版本库中移除文件,但本地文件保留)。
-
再通过图形界面或
.gitignore添加忽略规则,提交规则变更即可。
常见问题与注意事项
| 问题 | 解决方法 |
|---|---|
| 忽略规则不生效 | 检查文件是否已跟踪 → 取消追踪 → 重新配置规则 |
| .gitignore 被 Git 追踪 | 正常现象,需提交 .gitignore 使规则生效 |
| 只想本地忽略 | 使用 .git/info/exclude 而非 .gitignore |
| 规则冲突 | 取反规则(!)需放在对应忽略规则之后 |
快速生成 .gitignore 模板
访问 gitignore.io,输入项目类型(如 Node、Python、VSCode),生成适配模板后复制到本地 .gitignore 中。
需要我根据你的项目类型(如 Node.js、Python、前端 / VitePress)生成一份可直接使用的 .gitignore 模板吗?
二、排除某个文件夹
你想要在 Git 桌面版中排除某个特定的文件夹,这个需求很明确,核心是通过 .gitignore 文件添加文件夹忽略规则,下面我会分步骤告诉你具体操作,包括不同场景下的处理方式:
基础操作:排除未被跟踪的文件夹(推荐)
方式 1:Git 桌面版图形界面操作(最简单)
- 打开 GitHub Desktop,进入你的仓库,切换到「Changes」标签页。
- 在未跟踪文件列表中找到要排除的文件夹(比如
node_modules、dist、temp等)。 - 右键点击该文件夹,选择 Ignore "文件夹名 /"(比如 Ignore "node_modules/")。
- 此时 Git 桌面版会自动在仓库根目录生成 / 更新
.gitignore文件,并写入对应的忽略规则(如node_modules/)。 - 最后记得提交
.gitignore文件的变更(填写提交信息后点击「Commit to 分支名」),确保规则生效且能同步给团队。
方式 2:手动编辑 .gitignore 文件(更灵活)
如果图形界面操作不方便,可直接手动配置:
-
打开你的仓库根目录(找不到的话,在 GitHub Desktop 中点击「Repository」→「Show in Explorer/Finder」)。
-
找到或新建
.gitignore文件(注意文件名开头有个点,没有后缀),用记事本 / VSCode 打开。 -
写入文件夹忽略规则,格式如下(关键是末尾加
/表示文件夹):gitignore# 排除根目录下的指定文件夹(推荐,精准) 目标文件夹名/ # 比如 dist/、node_modules/、temp/ # 若要排除所有目录下的同名文件夹(递归) **/目标文件夹名/ # 比如 **/temp/ 会忽略所有层级的temp文件夹 # 示例:排除根目录下的dist文件夹 dist/ # 示例:排除根目录下的src目录里的assets文件夹 src/assets/ -
保存
.gitignore文件,回到 Git 桌面版,提交该文件的变更即可。
关键处理:排除已被 Git 跟踪的文件夹
如果该文件夹已经被提交到 Git 版本库(即之前推过代码),直接忽略会无效,需先取消跟踪:
-
打开终端(Git Bash/CMD/ 终端),进入你的仓库目录(可在 GitHub Desktop 中点击「Repository」→「Open in Terminal」)。
-
执行以下命令取消跟踪(本地文件会保留,仅从 Git 版本库中移除):
bash# 取消跟踪单个文件夹(替换成你的文件夹名) git rm --cached -r 目标文件夹名/ # 示例:取消跟踪根目录下的dist文件夹 git rm --cached -r dist/ -
回到 Git 桌面版,会看到该文件夹被标记为「Removed」,先提交这个变更(比如提交信息写 "取消跟踪 dist 文件夹")。
-
再按照上面「基础操作」的方法添加忽略规则,提交
.gitignore文件即可。
本地独享忽略(不共享给团队)
如果只想自己本地忽略该文件夹,不想把规则提交到仓库:
- 打开仓库根目录下的隐藏文件夹
.git→ 找到info文件夹 → 打开exclude文件(无后缀)。 - 按
.gitignore的语法写入文件夹规则(如dist/),保存即可。 - 该规则仅在你本地生效,不会被 Git 跟踪,也不会同步给其他协作者。
总结
- 排除未跟踪文件夹:优先用 Git 桌面版右键「Ignore 文件夹名 /」,自动生成
.gitignore规则并提交。 - 排除已跟踪文件夹:先通过终端执行
git rm --cached -r 文件夹名/取消跟踪,再添加忽略规则。 - 规则核心:文件夹名后必须加
/(如dist/),否则会被识别为文件;**/文件夹名/可递归忽略所有层级的同名文件夹。