Git的忽略文件

在日常中,有些文件我们只想本地使用,不想上传到远程仓库中被别人看到,可如果我们不追踪这些文件,git status时Git就会絮絮叨叨的提醒我们工作目录中一些未跟踪的文件,所以我们可以通过.gitignore文件来让获得清净

由于我是在Windows环境下,不能直接创建空文件名的文件,所以去bash里创建(移动到所在目录):

> touch .gitignore

用法:

假如我们要忽略一个临时文件test.tmp,那么在.gitignore文件中写入*tmp即可

《Pro Git》里对.gitignore格式规范的解释:

  • 所有空行或者以注释符号 # 开头的行都会被 Git 忽略
  • 可以使用标准的 glob 模式匹配
  • 匹配模式最后跟反斜杠(/)说明要忽略的是目录
  • 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反

glob模式:
指 shell 所使用的简化了的正则表达式

星号(*)匹配零个或多个任意字符

[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c)

问号(?)只匹配一个任意字符

如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)

所以 *tmp,就是指忽略所有以tmp结尾的文件

再来看一个 .gitignore 文件的例子:

# 此为注释 – 将被 Git 忽略

# 忽略所有 .a 结尾的文件

*.a

# 但 lib.a 除外

!lib.a

# 仅仅忽略项目根目录下的 TODO 文件

# 不包括 subdir/TODO

/TODO

# 忽略 build/ 目录下的所有文件

build/

# 忽略 doc 目录下的所有 .txt 文件

# 会忽略 doc/notes.txt 

# 但不包括 doc/server/arch.txt

doc/*.txt

在项目一开始就把.gitignore设置好,可避免不必要的文件对代码产生干扰,比如有些需要本地生成的文件,如果放在远程仓库中被其他人下载使用,也可能会导致程序无法正常运行

参考: Crossin的编程教室

<think>我们正在处理用户关于Git忽略文件的命令问题。根据引用内容,我们可以总结出以下关键点:1.忽略文件通常通过创建或修改`.gitignore`文件来实现,在该文件中列出要忽略文件或目录模式(引用[1])。 2.如果文件已经被Git跟踪(即已经添加到版本控制中),仅仅将其添加到`.gitignore`文件中是不够的。需要先使用`gitrm --cached<file>`命令将其从索引中移除(停止跟踪),然后再忽略(引用[2])。3.空目录不会被Git跟踪,如果想跟踪空目录,通常需要在其中放置一个文件(例如`.gitignore`文件)(引用[2])。 因此,用户询问的“gitignore filecommand”实际上涉及两个主要步骤:###步骤1:创建或编辑`.gitignore`文件在项目根目录(或任何子目录,但通常放在根目录)下创建或编辑一个名为`.gitignore`的文件。在该文件中,每一行写一个要忽略文件或目录模式。例如: ```#忽略所有.log文件*.log#忽略名为temp的目录temp/#忽略特定文件secrets.txt```###步骤2:处理已跟踪的文件(如果文件已经被跟踪) 如果文件已经被Git跟踪(即之前已经提交过),那么需要将其从索引中移除(但保留工作目录中的文件): ```bashgit rm--cached <file> ```然后,将该文件添加到`.gitignore`中,以确保后续不会再次跟踪。###完整命令示例假设我们想忽略一个名为`debug.log`的文件,并且该文件已经被Git跟踪了: 1.首先,将`debug.log`添加到`.gitignore`文件中:```bashecho"debug.log">> .gitignore``` 2.然后,将其从索引中移除(但保留工作目录中的文件):```bashgitrm --cacheddebug.log``` 3.提交更改:```bashgit commit-m"Stoptracking debug.log"```如果文件还没有被跟踪,则只需将其添加到`.gitignore`中,然后Git就会忽略它。###注意事项-如果`.gitignore`文件本身还没有被跟踪,你可能需要先将其添加到Git中(除非你希望忽略它,但通常我们会跟踪它):```bashgitadd .gitignoregit commit-m"Add.gitignore file"``` -可以使用`gitstatus`命令来检查文件是否已经被正确忽略。 ###相关问题根据这个主题,我们可以生成以下相关问题: §§相关问题§§1.如何查看Git是否忽略了我指定的文件? 2.如何忽略已经被Git跟踪的文件? 3.如何忽略一个目录及其所有内容? 4.如何让Git忽略除特定文件之外的所有文件? 5.如何全局忽略文件(对所有仓库生效)?注意:引用中的其他内容(如解决乱码问题、基本命令等)与当前问题无关,因此不在此处展开。</think>### 如何用 Git 忽略特定文件忽略特定文件,需通过 `.gitignore` 文件实现。以下是详细步骤和注意事项: #### 1. **创建/编辑 .gitignore 文件** 在项目根目录创建或编辑 `.gitignore` 文件,每行添加要忽略文件名、目录或通配符模式: ```bash # 忽略单个文件 secret.key # 忽略所有.log文件 *.log # 忽略整个目录 build/ ``` #### 2. **处理已跟踪的文件** **关键点**:如果文件已被 Git 跟踪,仅修改 `.gitignore` 无效[^2]。需额外执行: ```bash # 从跟踪列表中移除文件(保留本地文件git rm --cached <filename> ``` 例如要忽略已跟踪的 `temp.log`: ```bash git rm --cached temp.log echo "temp.log" >> .gitignore git add .gitignore git commit -m "忽略 temp.log" ``` #### 3. **生效验证** ```bash git status # 检查忽略文件是否不再显示 ``` #### 4. **特殊场景处理** - **空目录**:Git 默认不跟踪空目录。如需保留,可在目录中创建占位文件(如 `.gitkeep`)[^2]。 - **全局忽略**:对所有项目生效(不推荐): ```bash git config --global core.excludesfile ~/.gitignore_global ``` ### ⚠️ 注意事项 1. 通配符 `*` 匹配任意字符,`/` 表示目录(如 `logs/` 忽略根目录下的 `logs`) 2. 以 `!` 开头表示例外(如 `!important.log` 会跟踪该文件) 3. `.gitignore` 文件本身需被 Git 跟踪才能生效 > 示例:忽略所有 `.tmp` 文件但保留 `main.tmp`: > ``` > *.tmp > !main.tmp > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值