git中排除文件和目录

git中排除文件和目录

需求是这样的,我想把我的obsidian上传到github,上传时需要排除.obsidian目录,于是就有了这一篇文章

一、排除某个文件

Git 桌面版(以 GitHub Desktop 为主)排除文件,核心是通过图形界面操作或手动配置 .gitignore/ 本地排除规则,且仅对未跟踪文件生效;已跟踪文件需先取消追踪再忽略。以下是具体可操作步骤:


图形界面快速排除(推荐,适用于未跟踪文件)

  1. 打开 GitHub Desktop 并进入目标仓库,切换到 "Changes" 页签。
  2. 找到需排除的未跟踪文件,右键点击该文件 / 文件夹。
  3. 在弹出菜单中选择以下选项之一:
    • Ignore "文件名":仅忽略当前文件 / 路径。
    • Ignore all files like this:忽略所有同名文件(递归)。
    • Ignore all files with extension ". 后缀":忽略所有该后缀的文件。
  4. 操作后,软件会自动在仓库根目录生成 / 更新 .gitignore 文件,将规则写入其中。
  5. 提交 .gitignore 的变更,使规则生效并同步到团队。

手动配置 .gitignore(共享规则,适用于团队协作)

  1. 在仓库根目录新建文本文件,命名为 .gitignore(注意开头的点)。

  2. 按以下规则编写忽略内容(示例):

    gitignore 复制代码
    # 注释行
    node_modules/        # 忽略依赖目录
    *.log                # 忽略所有.log文件
    /dist/               # 仅忽略根目录下的dist目录
    !important.log       # 不忽略important.log(取反)
    **/temp/*            # 递归忽略所有temp目录下的文件
  3. 保存 .gitignore 后,在 GitHub Desktop 中提交该文件,规则对所有仓库协作者生效。


本地排除(仅自己生效,不共享规则)

若不想将规则提交到仓库,可使用本地排除:

  1. 打开仓库根目录下的 .git/info/exclude 文件(需显示隐藏文件)。
  2. .gitignore 语法添加规则,例如 *.baklocal-dev.env
  3. 保存文件即可,该规则仅在本地生效,不会被 Git 追踪和提交。

处理已跟踪文件(关键排障步骤)

若文件已被提交到版本库,直接忽略无效,需先取消追踪:

  1. 打开终端,进入仓库目录。

  2. 执行命令取消追踪(保留本地文件):

    bash 复制代码
    # 单个文件
    git rm --cached 文件名
    # 目录(递归)
    git rm --cached -r 目录名
  3. 提交取消追踪的变更(这一步会从版本库中移除文件,但本地文件保留)。

  4. 再通过图形界面或 .gitignore 添加忽略规则,提交规则变更即可。


常见问题与注意事项

问题 解决方法
忽略规则不生效 检查文件是否已跟踪 → 取消追踪 → 重新配置规则
.gitignore 被 Git 追踪 正常现象,需提交 .gitignore 使规则生效
只想本地忽略 使用 .git/info/exclude 而非 .gitignore
规则冲突 取反规则(!)需放在对应忽略规则之后

快速生成 .gitignore 模板

访问 gitignore.io,输入项目类型(如 Node、Python、VSCode),生成适配模板后复制到本地 .gitignore 中。

需要我根据你的项目类型(如 Node.js、Python、前端 / VitePress)生成一份可直接使用的 .gitignore 模板吗?

二、排除某个文件夹

你想要在 Git 桌面版中排除某个特定的文件夹,这个需求很明确,核心是通过 .gitignore 文件添加文件夹忽略规则,下面我会分步骤告诉你具体操作,包括不同场景下的处理方式:

基础操作:排除未被跟踪的文件夹(推荐)

方式 1:Git 桌面版图形界面操作(最简单)
  1. 打开 GitHub Desktop,进入你的仓库,切换到「Changes」标签页。
  2. 在未跟踪文件列表中找到要排除的文件夹(比如 node_modulesdisttemp 等)。
  3. 右键点击该文件夹,选择 Ignore "文件夹名 /"(比如 Ignore "node_modules/")。
  4. 此时 Git 桌面版会自动在仓库根目录生成 / 更新 .gitignore 文件,并写入对应的忽略规则(如 node_modules/)。
  5. 最后记得提交 .gitignore 文件的变更(填写提交信息后点击「Commit to 分支名」),确保规则生效且能同步给团队。
方式 2:手动编辑 .gitignore 文件(更灵活)

如果图形界面操作不方便,可直接手动配置:

  1. 打开你的仓库根目录(找不到的话,在 GitHub Desktop 中点击「Repository」→「Show in Explorer/Finder」)。

  2. 找到或新建 .gitignore 文件(注意文件名开头有个点,没有后缀),用记事本 / VSCode 打开。

  3. 写入文件夹忽略规则,格式如下(关键是末尾加 / 表示文件夹):

    gitignore 复制代码
    # 排除根目录下的指定文件夹(推荐,精准)
    目标文件夹名/   # 比如 dist/、node_modules/、temp/
    
    # 若要排除所有目录下的同名文件夹(递归)
    **/目标文件夹名/  # 比如 **/temp/ 会忽略所有层级的temp文件夹
    
    # 示例:排除根目录下的dist文件夹
    dist/
    
    # 示例:排除根目录下的src目录里的assets文件夹
    src/assets/
  4. 保存 .gitignore 文件,回到 Git 桌面版,提交该文件的变更即可。

关键处理:排除已被 Git 跟踪的文件夹

如果该文件夹已经被提交到 Git 版本库(即之前推过代码),直接忽略会无效,需先取消跟踪:

  1. 打开终端(Git Bash/CMD/ 终端),进入你的仓库目录(可在 GitHub Desktop 中点击「Repository」→「Open in Terminal」)。

  2. 执行以下命令取消跟踪(本地文件会保留,仅从 Git 版本库中移除):

    bash 复制代码
    # 取消跟踪单个文件夹(替换成你的文件夹名)
    git rm --cached -r 目标文件夹名/
    
    # 示例:取消跟踪根目录下的dist文件夹
    git rm --cached -r dist/
  3. 回到 Git 桌面版,会看到该文件夹被标记为「Removed」,先提交这个变更(比如提交信息写 "取消跟踪 dist 文件夹")。

  4. 再按照上面「基础操作」的方法添加忽略规则,提交 .gitignore 文件即可。

本地独享忽略(不共享给团队)

如果只想自己本地忽略该文件夹,不想把规则提交到仓库:

  1. 打开仓库根目录下的隐藏文件夹 .git → 找到 info 文件夹 → 打开 exclude 文件(无后缀)。
  2. .gitignore 的语法写入文件夹规则(如 dist/),保存即可。
  3. 该规则仅在你本地生效,不会被 Git 跟踪,也不会同步给其他协作者。

总结

  1. 排除未跟踪文件夹:优先用 Git 桌面版右键「Ignore 文件夹名 /」,自动生成 .gitignore 规则并提交。
  2. 排除已跟踪文件夹:先通过终端执行 git rm --cached -r 文件夹名/ 取消跟踪,再添加忽略规则。
  3. 规则核心:文件夹名后必须加 /(如 dist/),否则会被识别为文件;**/文件夹名/ 可递归忽略所有层级的同名文件夹。
相关推荐
Leo⁵12 小时前
基于 Git 的 Obsidian 笔记同步
笔记·git
Qres82115 小时前
Git基础命令学习笔记
笔记·git·学习
REDcker16 小时前
Git分支与版本管理实践
git
Goodbye21 小时前
Git 开发必备性能
git
Wils0nEdwards21 小时前
Windows本地 git 版本管理
windows·git·elasticsearch
Niliuershangba1 天前
ChestnutCMS 栗子内容管理系统:从入门到模板开发实战
java·git·开源·gitlab·github·开源软件·gitcode
专注VB编程开发20年1 天前
安桌15系统文件直接存到其他目录要权限吗?/storage/emulated/0/Downloa
git
解道Jdon1 天前
从Go转向Rust迁移指南:靠自觉 vs. 靠编译器
ide·windows·git·svn·eclipse·github·visual studio
霸道流氓气质1 天前
Git 三方合并策略详解
git